STM32CuBeMX驱动舵机

舵机

舵机(Servo),由直流电机、减速齿轮组、传感器和控制电路组成的一套自动控制系统。其控制方式为PWM控制,通过调节控制信号的占空比来实现舵机转动指定角度。

舵机控制

驱动舵机的PWM信号周期需要为20ms(50HZ),而控制脉宽为0.5~2.5ms,如下图所示。

在这里插入图片描述

公式如下
控 制 数 = 占 空 比 ∗ 脉 冲 数 − 1 控制数=占空比*脉冲数-1 =1

占 空 比 = ( 0.5 + a n g l e 90 ) 20 占空比=\frac{(0.5+\frac{angle}{90})}{20} =200.5+90angle

STM32驱动

在STM32当中通用定时器和高级定时器均可以产PWM信号,且可以独立控制,这里以通用定时器为例,使用CubeMX配置

CubeMX配置

定时器有预分频器主计数器两个设值。由于定时器的定时公式为
T i m e r = ( P S C + 1 ) ( C N T + 1 ) 单 片 机 频 率 Timer=\frac{(PSC+1)(CNT+1)}{单片机频率} Timer=(PSC+1)(CNT+1)
控制舵机需要设置周期为20ms,并且为了能够给PWM调节留出更多的冗余。由此设置PSC=719,CNT=1999。
在这里插入图片描述
在这里插入图片描述

需要注意的是CH Polarity 用于设置有效电平,具体使用看最后示例。

程序编写

HAL库控制PWM输出首先需要调用下面这个函数来开启。

HAL_TIM_PWM_Start(&htim2,TIM_CHANNEL_1)//前者为对应定时器句柄,后者为响应通道

若要改变PWM脉宽则需要调用下面这个宏定义

__HAL_TIM_SET_COMPARE(&htim2,TIM_CHANNEL_1,pwmval);//第一个参数为定时器句柄,第二个为响应通道,最后一个是需要设定的值

示例

使用CubeMx生成工程
假设我们需要25%占空比,即设置设定数为500

__HAL_TIM_SET_COMPARE(&htim2,TIM_CHANNEL_1,500);

此时若设定的CH Polarity为Low,表示有效电平为低电平,波形如下图
在这里插入图片描述
而设定CH Polarity为High时,表示有效电平为高电平,波形如下图
在这里插入图片描述
由于舵机受高电平控制,因此设置的CH Polarity决定我们选用的公式。
当CH Polarity为Low,
控 制 数 = ( 1 − ( 0.5 + a n g l e 90 ) 20 ) ∗ 脉 冲 数 − 1 控制数=(1-\frac{(0.5+\frac{angle}{90})}{20})*脉冲数-1 =1200.5+90angle1
即负占空比×脉冲数

当CH Polarity为High
控 制 数 = ( 0.5 + a n g l e 90 ) 20 ∗ 脉 冲 数 − 1 控制数=\frac{(0.5+\frac{angle}{90})}{20}*脉冲数-1 =200.5+90angle1
即正占空比×脉冲数
在这里插入图片描述

假设需要让舵机转到90°,设定CH Polarity为Low,使用上述公式求得控制数为1849.

__HAL_TIM_SET_COMPARE(&htim2,TIM_CHANNEL_1,1849);

在这里插入图片描述

文中若有错误,欢迎各位在评论区指正,共同学习!

  • 10
    点赞
  • 97
    收藏
    觉得还不错? 一键收藏
  • 13
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值