STM32学习笔记:TS90A 9g舵机的控制实现

         今天无意中在电脑边找到了以前购买的9g舵机,刚好上一篇文章记录了通过STM32产生PWM波形的过程,想着9g舵机也是采用PWM波形控制转动角度,这不刚好学有所用吗。

使用的硬件:

  1. 野火的骄阳STM32F407IGT6控制板。
  2. TS90A 9g舵机,外观如下图所示

        找到了以前的采购链接,但发现没有多少有用资料,通过网上找到的资料对比,发现舵机的控制原理如下:

从以上2张图片可以看出,我们只需要生成一个周期了20ms的PWM波,再通过高电平的时间(0.5ms~2.5ms)来控制舵机的旋转角度,看起来还挻简单的,接下来开干。

——————————————————————————————————————————

大概的设置过程如下:

1,开通定时器TIM4(其实其它能够产生PWM波形的定时器也可以)的Channel 1,预分频器Prescaler设置为840-1,计数周期Counter Period设置为2000-1

        通过以上各参数设置,实际得到的TIM4定时器时钟频率为84000000/840/2000=50Hz,即PWM周期为20ms,满足9g舵机对脉冲周期的要求

2,设置计数模式为:Up,向上计数

3,设置Channel1为PWM输出模式:PWM Generation CH1

4,设置Mode为模式2:PWM mode 2   (默认为mode 1)

通过以上设置,我们已经得到了一路周期为20ms的PWM脉冲,点击GENERATE CODE生成代码,通过CUBE MX自动生成的文件并不能直接使用,需要作如下2处修改:

1,手动开启定时器的PWM输出通道:HAL_TIM_PWM_Start(&htim4,TIM_CHANNEL_1);,加在main()函数中,和其它初始化函数一起在程序启动时运行

int main(void)
{
  /* USER CODE BEGIN 2 */

   HAL_TIM_PWM_Start(&htim4,TIM_CHANNEL_1);         // 舵机1 :产生50Hz,周期20ms脉冲
    
    /* USER CODE END 2 */

————————————————————————————————————

2,在  while (1)死循环中增加占空比设置函数——__HAL_TIM_SetCompare(&htimx,TIM_CHANNEL_x,0);

具体代码如下:

20ms周期对应2000个计数值,所以有以下对应关系

旋转角度与CCR计数器对应关系
周期(ms) 计数值 舵机旋转角度(°)
0.5500
1.010045
1.515090
2.0200135
2.5250180

/* USER CODE BEGIN WHILE */
  while (1)
  {
                            /* TS90A 9g模拟舵机旋转角度控制 */
        __HAL_TIM_SetCompare(&htim4,TIM_CHANNEL_1,50);            //舵机旋转至0°位置
        HAL_Delay(300);            
        
        __HAL_TIM_SetCompare(&htim4,TIM_CHANNEL_1,100);            //舵机旋转至45°位置
        HAL_Delay(300);        

        __HAL_TIM_SetCompare(&htim4,TIM_CHANNEL_1,150);            //舵机旋转至90°位置
        HAL_Delay(300);    

        __HAL_TIM_SetCompare(&htim4,TIM_CHANNEL_1,200);            //舵机旋转至135°位置
        HAL_Delay(300);    
        
        __HAL_TIM_SetCompare(&htim4,TIM_CHANNEL_1,250);            //舵机旋转至180°位置    
        HAL_Delay(500);    

       
    /* USER CODE END WHILE */

}

代码编辑完成后,接着开始硬件接线工作

       9g舵机一共需要接3根线,将TIM4 CH1的输出引脚(STM32F407IGT6 为PD12)接至9g舵机控制黄色信号线;红色接至+5V,棕色接至GND。

接线完成后上电,我们可以看到舵机按照程序设定,

首先回到舵机的0°位置,然后停止300ms;

再回到舵机的45°位置,然后停止300ms;

再回到舵机的90°位置,然后停止300ms;

再回到舵机的135°位置,然后停止300ms;

最后回到舵机的180°位置,然后停止500ms;

至此,9g舵机的控制代码测试完成。

舵机旋转

由于舵机有各种型号,控制方式也各不相同,以上代码仅在9g舵机上测试通过,其它型号舵机是否能够适用仍需要做进一步的测试。

  • 18
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值