STM32F103控制360度MG996舵机

此函数运用片内输出口(PWM波形输出口)为定时中断2(TIM2)的ETR通道2(TIM_CH2)

控制MG996R舵机需要调制一个频率为50Hz,也就是周期为20ms的波形,此时我选择分频器的值为720,ARR重装器的值为2000

详细计算公式相信大家也会

`      TIM_TimeBaseInitStucture.TIM_Period = 2000-1;              //ARR自动重装器的值

       TIM_TimeBaseInitStucture.TIM_Prescaler = 720-1;            //PSC预分频器值

`

void PWM_SetCompare2(uint16_t ComPare)   此函数是用来改变CCR的值的,也就是用来改变PWM波形的脉冲宽度,此时ComPare的值的取值范围为0——2000,对应的就是0ms——20ms,例如当调用此函数将110赋予给ComPare后,MG996R舵机将顺时针速度次一点运转。

void PWM_Init(void)
{
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);        //启用时钟
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
	
	TIM_InternalClockConfig(TIM2);        //选择内部时钟为时基频率
	
	GPIO_InitTypeDef GPIO_InitStucture;
	GPIO_InitStucture.GPIO_Mode = GPIO_Mode_AF_PP;             //复用推挽输出(指定)
	GPIO_InitStucture.GPIO_Pin = GPIO_Pin_1;                   //PA0口为TIM2_CH2通道输出口
	GPIO_InitStucture.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOA,&GPIO_InitStucture);
	
	TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStucture;
	TIM_TimeBaseInitStucture.TIM_ClockDivision = TIM_CKD_DIV1;         
	TIM_TimeBaseInitStucture.TIM_CounterMode = TIM_CounterMode_Up;
	TIM_TimeBaseInitStucture.TIM_Period = 2000-1;
	TIM_TimeBaseInitStucture.TIM_Prescaler = 720-1;
	TIM_TimeBaseInitStucture.TIM_RepetitionCounter = 0;
	TIM_TimeBaseInit(TIM2,&TIM_TimeBaseInitStucture);          //时基单元配置
	
	TIM_OCInitTypeDef TIM_OCInitStucture;                       
	TIM_OCInitStucture.TIM_Pulse = 0;                         //CCR的值      
	TIM_OCInitStucture.TIM_OCMode = TIM_OCMode_PWM1;          //输出比较模式
	TIM_OCInitStucture.TIM_OCNPolarity = TIM_OCPolarity_High; //极性设置
	TIM_OCInitStucture.TIM_OutputState = ENABLE;
	TIM_OC2Init(TIM2,&TIM_OCInitStucture);                    //比较单元的配置
	
	TIM_Cmd(TIM2,ENABLE);
}

void PWM_SetCompare2(uint16_t ComPare)                       //改变通道2CCR的值
{
	TIM_SetCompare2(TIM2,ComPare);
}

  • 6
    点赞
  • 65
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值