STM32
直播中

王岩

7年用户 840经验值
私信 关注
[问答]

如何采用HAL库方式去控制数字舵机呢

数字舵机与模拟舵机的区别在哪?
如何采用HAL库方式去控制数字舵机呢?

回帖(1)

王焕树

2021-10-22 15:42:47
  HAL库方式控制数字舵机
  介绍
  数字舵机一般比较贵,数字舵机与模拟舵机的区别是前者在得到相应的脉冲后,会很清脆的到达固定的角度,不会产生异响;而模拟舵机则会在到达固定角度后抖动。
  控制方法
  数字舵机大多是是依靠PWM进行控制,舵机一个周期是20ms,给定固定占空比,则会转到相应的角度;例如让舵机转到90度的位置,那么20ms的周期内就是让低电平占1.5ms,这样就控制了舵机转到90度。对应如下表:
  
  所以我们的方法就是使用STM32单片机的定时器输出周期为20ms的PWM波,通过更改占空比值实现舵机的角度控制。通过上表可以得到一个公式:一度的占空比 = 1 / 90 * 角度 + 0.5
  STM32配置
  这里我使用STM32F407VE,配置定时器3和PWM通道1,配置如下:
  
  定时器3的时钟主频是84M,这里我分8400频(8399+1),计数值200(199+1),
  所得到的定时周期时间就是:200 * 8400 / 84000000 = 0.02s = 20ms
  PWM的频率就是:84000000 / (200 * 8400) = 50HZ
  按照以上配置计算,那么上面的公式就要扩大十倍,变为:一度的占空比 = 1 / 90 * 角度 + 5
  转为代码就是:
  // angle:角度值,0~180
  void Servo_Control(uint16_t angle)
  {
  float temp;
  temp =(1.0 / 9.0) * angle + 5.0;//占空比值 = 1/9 * 角度 + 5
  __HAL_TIM_SET_COMPARE(&htim3, TIM_CHANNEL_1, (uint16_t )temp);
  }
  通过该函数,就可以很方便的控制数字舵机转动了!
  注意:
  STM32CUBEMX生成的代码不是使能定时器,所以需要你手动添加下面一行代码使能定时器:
  HAL_TIM_Base_Start(&htim3);
  
举报

更多回帖

发帖
×
20
完善资料,
赚取积分