1. 舵机控制原理与STM32 PWM实现机制
舵机(Servo Motor)是一种位置伺服执行器,其核心控制逻辑完全依赖于标准PWM信号的时序特性。在嵌入式系统中,理解其电气接口规范与定时器配置逻辑,是实现稳定、可重复控制的前提。本节将从物理层信号定义出发,推导出STM32定时器参数配置的数学依据,并阐明为何必须严格遵循特定的时基设置。
1.1 标准舵机信号协议解析
市面上最常见的模拟舵机(如SZ90型)采用三线制接口: 信号线(Signal)、电源正极(VCC)、地线(GND) 。其中,信号线接收的是周期固定、占空比可变的方波信号,其电气规范如下:
-
周期(Period):20 ms(50 Hz)
这是所有标准模拟舵机的强制性时序要求。周期偏差超过±0.5 ms即可能导致舵机响应异常或进入保护状态。 -
高电平时间(Pulse Width)与角度映射关系:
- 0.5 ms → 0°(极限左位)
- 1.0 ms → 45°
- 1.5 ms → 90°(中位,机械零点)
- 2.0 ms → 135°
- 2.5 ms → 180°(极限右位)
该映射呈线性关系,即每增加0.1 ms高电平时间,舵机转动约18°。此关系由舵机内部的电位器反馈回路与比较器电路决定,外部控制器只需精确生成对应脉宽即可。
值得注意的是, VCC与GND必须与MCU共地 。若电源地未与STM32的GND短接,信号参考电平失效,舵机将无法识别任何有效指令。实践中,曾多次遇到“代码无误但舵机不动作”的问题,最终均溯源至共地缺失——这是硬件连接中最易被忽视却最致命的一环。
1.2 STM32定时器PWM生成的核心约束
STM32的通用定时器(如TIM3)通过计数器自动重装载(ARR)与预分频(PSC)寄存器协同工作,生成精确的PWM波形。其输出频率 $f_{PWM}$ 与占空比 $D$ 的计算公式为:
$$
f_{PWM} = \frac{f_{CLK}}{(PSC + 1) \times (ARR + 1)}
$$
$$
D = \frac{CCR}{ARR + 1}
$$
其中:
- $f_{CLK}$ 为定时器输入时钟频率(本例中为APB1总线时钟72 MHz);
- $PSC$ 为预分频系数(16位寄存器,范围0–65535);
- $ARR$ 为自动重装载值(16位寄存器,范围0–65535);
- $CCR$ 为捕获/比较寄存器值,直接决定高电平持续时间。
要生成20 ms周期信号,需满足:
$$
\frac{1}{f_{PWM}} = 20\ \text{ms} \Rightarrow f_{PWM} = 50\ \text{Hz}
$$
代入公式:
$$
50 = \frac{72\ \text{MHz}}{(PSC + 1) \times (ARR + 1)}
$$
解得:
$$
(PSC + 1) \times (ARR + 1) = \frac{72\ \text{MHz}}{50} = 1\,440\,000
$$
该乘积必须为整数,且 $PSC$ 与 $ARR$ 均为16位寄存器。常见工程取值方案有二:
-
方案A(高分辨率): $PSC = 71$, $ARR = 19999$
此时 $(71+1) \times (19999+1) = 72 \times 20000 = 1\,440\,000$,精度达0.1 μs,CCR每增1对应高电平变化0.1 μs,足以覆盖0.5–2.5 ms全量程(5000–25000步)。 -
方案B(简化配置): $PSC = 7199$, $ARR = 199$
此时 $(7199+1) \times (199+1) = 7200 \times 200 = 1\,440\,000$,但CCR仅200级分辨率,对应最小步进100 μs,角度控制精度降至约1.8°,不推荐用于精密定位。
本设计采用 方案A 。其优势在于:当 $ARR = 19999$ 时,整个计数周期对应20 ms,因此高电平时间 $t_{high} = CCR \times 0.1\ \mu s$。例如:
- $CCR = 500$ → $t_{high} = 500 \times 0.1\ \mu s = 50\ \mu s = 0.5\ \text{ms}$ → 0°
- $CCR = 1500$ → $t_{high} = 150\ \text{ms}$? 错!此处需校正:$CCR = 1500$ 实际对应 $1500 \times 0.1\ \mu s = 150\ \mu s = 0.15\ \text{ms}$,明显错误。
关键修正: 若 $ARR = 19999$,则计数器从0计至19999共20000个时钟周期。每个周期时间为 $\frac{1}{72\ \text{MHz}} \times (PSC+1)$。设 $PSC = 71$,则单周期时间为 $\frac{1}{72\ \text{MHz}} \times 72 = \frac{1}{1\ \text{MHz}} = 1\ \mu s$。故:
- 总周期 $T = 20000 \times 1\ \mu s = 20\ \text{ms}$ ✓
- 高电平时间 $t_{high} = CCR \times 1\ \mu s$
- 因此:$CCR = 500$ → $t_{high} = 500\ \mu s = 0.5\ \text{ms}$ ✓
- $CCR = 1500$ → $t_{high} = 1500\ \mu s = 1.5\ \text{ms}$ ✓
此即“ 1 CCR = 1 μs ”的工程口诀,是后续所有占空比计算的基石。
2. 硬件资源规划与引脚复用配置
在STM3


1006

被折叠的 条评论
为什么被折叠?



