舵机篇(二)舵机控制

目录

01 脉宽与转角换算

计算舵机任意角度脉宽

02 PWM控制与输出

定时器设置与角度值换算

定时器设置与角度值换算

03 文章总结


大家好,这里是程序员杰克。一名平平无奇的嵌入式软件工程师。

上篇推送分享主要是对舵机的一些相关知识点进行了总结,本篇推送内容主要是对舵机控制转角与脉宽的换算。正常而言,只要频率、脉宽符合舵机控制要求,都可以实现舵机控制。本示例是使用STM32定时器的PWM输出功能进行控制。

要实现STM32的PWM控制舵机在转角范围内转到任意角度,要实现以下两点:

  • 明确舵机脉宽与转角的换算

  • 实现对应转角的PWM脉宽输出控制


下面正式进入本章推送的内容。

01 脉宽与转角换算

  • 计算舵机任意角度脉宽

舵机转动的角度与脉宽在0.5ms~2.5ms的区间内呈线性关系。舵机有90°、180°、270°、360°最大转角,这里以180°舵机为例来说明脉冲宽度和角度的关系,其他角度舵机参考具体参数,180°舵机周期为20ms时的脉宽和转角关系如下图:

图片

杰克这里,对舵机输出轴转角进行重定义:-90°认为是0位置,90°认为是180位置

脉冲宽度0.5ms1ms1.5ms2ms2.5ms
转动角度-90°-45°34°90°
重定义转角45°90°135°180°

以0.5ms为0位置时,

从0位置转到180位置,脉宽的最大增量 = (2.5ms - 0.5ms) = 2ms,有:

任意角脉宽 = 0°脉冲宽度 +  角度值 *(脉宽的最大增量 / 180°),即:

任意角脉宽 = 0.5ms + 角度值 *(2ms/180°)


02 PWM控制与输出

舵机的转动最终还是由驱动脉宽所控制。对于本篇推送而言(以STM32F1系列为例),脉宽控制是由定时器的PWM输出功能。控制信号引脚接在定时器的通道引脚上便可,编程上重点是要实现PWM的周期、占空比的控制。

下面开始分享本人的设计思路(STM32F103系列为例):既然是要控制输出PWM的周期和占空比,需要明确定时器的周期、PWM输出占空比计算公式:

定时器频率计算公式:f = sys_clk / [ ( arr + 1 ) * ( psc + 1 ) ];

占空比计算公式:duty = ccr/arr * 100%;

sys_clk系统运行时钟
psc定时器时钟预分频值
arr计数重装载值
ccr比较计数值
  • 定时器设置与角度值换算

本示例使用的舵机为周期20ms、转角180°的模拟舵机。本示例编程推导思路如下:

①任意角脉宽计算公式 :angle = 0.5ms + 角度值 *(2ms/180°)[角度值=[0,180]]

②占空比计算公式 :duty = ccr/arr * 100%

③定时器频率计算公式:f = sys_clk / [ ( arr + 1 ) * ( psc + 1 ) ]

1. 设置arr(计算重装载值)

公式①推导时有:从0位置转到180位置,

脉宽的最大增量 = (2.5ms - 0.5ms) = 2ms;

此处将arr设置为(2000-1)

2. 设置psc(预分频值)

根据公式③有:

psc = sys_clk/[ f * (arr + 1) ] - 1;

本示例中f=50hz,sys_clk=72Mhz,arr=(2000-1),即:

psc = 72Mhz/(50hz * 2000) - 1;

psc = 720

3. 角度与ccr值换算ccr = 500 + 角度值 *(2000/180°)

  • 定时器设置与角度值换算

篇幅有限,具体的代码就不在公众号贴了,杰克认为本编程的最重要的思想:“将角度值[-90°, 90°]在编程上以[0°, 180°]表征”,该思想的转换函数如下:

#define  PWM_OUT_CCR    (2000)
......
angelTopwmOutCCR(-90);  //控制舵机转到-90°
angelTopwmOutCCR(90);   //控制舵机转到90°
......
uint8_t angelTopwmOutCCR(int angle)
{
    int Compare1 = 500 + ((90 + angle)/180) * PWM_OUT_CCR;
    htim1.Instance->CCR1 = Compare1;
}
......

03 文章总结

相对其他运动电机而言,模拟舵机无论是控制电路,还是编码实现都相对简单。舵机在固定转角机构(机器人多关节转动等)普遍使用,因此对于学习电机控制入门、个人兴趣DIY设计而言,学习舵机的知识以及控制原理是非常有必要的。

 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

杰克拉力船长

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值