MENU

舵机 PWM 占空比计算

January 4, 2020 • 折腾

今年参与的实验室项目里,很多事情都离不开舵机,平时虽然也做一些硬件,但控制方面还不是那么熟悉。话不多说,直接进入主题。

在一个舵机驱动里面有这样一段代码:

var duty = 0.025 + 0.1 * angle / 270;
this._pwm.setDuty(duty);

这段代码适用于一个 270 度的舵机,但如果实际使用的是一款 180 度范围的舵机,很显然这个公式:

$$ 0.025 - \frac{0.1 * angle }{270} $$

无法使用了。

上述公式的修改可以看成是,求解一个一元线性函数的两个参数。

$$ \text{duty}= 0.025 - \frac{0.1 * angle }{270} $$

$$ \Rightarrow x = a - \frac{b * y }{\text{Max Degree Angle}} $$

通过分析可得

$$ a = \text{dutyRatio}_{\text{0}^\circ} $$

即 $a$ 是舵机在零度时的占空比

$$ \frac{b}{\text{Max Degree Angle}} = \Delta \text{dutyRatio}_{\text{1}^\circ} $$

即每一度所对应的占空比差。

可以使用联立等式,求解方程组的方式来计算。


2020 年 8 月 28 日更新:

我从后台发现不少朋友对这个问题比较关注,而我也确实发现有些关于舵机 PWM 控制的文章讲的不是很明白。

上面的数学公式可能不是很明确,在此继续补充一下,对于模拟舵机来说,PWM 波的频率一般是 $50Hz$,即周期为 $20ms$,也有频率更高的舵机,输入频率低一般不会造成什么太大问题,表现为性能差点,但是频率高于设计工作频率容易烧舵机;模拟舵机的正常工作需要不断输入 PWM 波信号,数字舵机有所不同,下段将说明。此时就需要关注 PWM 波的占空比了,占空比和舵机旋转角度一般为线性关系(非严格),此时就可以用上文中的方法计算出公式中的两个参数,可以通过测试的方式,也可以参考厂家给出的参数。下面给出算例

若给出条件:模拟舵机、$8ms$信号为$-90°$(最小角度)、$12ms$信号为$0°$,最大角度$+90°$。
则可以得出每一度对应的信号脉宽为$\frac{4}{90}ms$,对应占空比为$\frac{4}{90}\div20$,为$\frac{1}{450}ms$。
0度占空比为$\frac{12}{20}ms$,为$0.6$。

上述算例仅为一个例子,计算方法和最终代码公式形式可以有所不同,具体数字根据实际厂家参数进行带入。

但对数字舵机来说,通常厂家资料不以占空比和频率来描述,因为数字舵机和模拟舵机最大的不同是,数字舵机的控制只需输入一次脉冲就可以完成旋转操作,不需要持续的输入信号。一般描述为脉冲宽度 $x(us)$,常用值一般是在中位 $900us$(仅作举例)。在此我不直接给出算例,仅简单谈一下我的处理方法,可以用单次触发也可以持续触发方式输出一个高频的信号,用这个定时器构造出一个符合实际控制需求的脉宽,无需过度关注频率。

无论采取哪种方式,均不要输入超出动作范围的信号,不然会烧舵机。

如果这篇文章对您有帮助,欢迎您在下方留言,谢谢。

Last Modified: October 15, 2023
Archives QR Code
QR Code for this page
Tipping QR Code