从零到一:揭秘SG90舵机背后的PWM控制数学之美
在嵌入式开发的世界里,舵机控制看似简单,却蕴含着精妙的数学原理和工程智慧。当你第一次看到SG90舵机随着PWM信号精准转动时,是否曾好奇背后的控制逻辑?这不是简单的代码调用,而是一场时钟频率、占空比和角度转换的数学演绎。本文将带你深入PWM控制的核心,用数学的视角重新审视舵机控制,让每一次角度变换都有据可依。
对于嵌入式开发者、电子爱好者以及学生群体来说,理解PWM背后的数学原理远比记住配置步骤更为重要。在实际项目开发中,我曾遇到过舵机抖动、角度不准等问题,最终发现根源在于对定时器参数计算的误解。只有掌握了数学本质,才能灵活应对各种硬件平台和需求变化。
1. PWM控制的核心数学原理
脉冲宽度调制(PWM)本质上是一种时间分割技术,通过调整高电平在一个周期内的持续时间来控制平均电压。对于SG90这类位置舵机,控制精度完全取决于对时间参数的精确计算。
1.1 基础时间参数计算
SG90舵机要求PWM信号频率为50Hz,这意味着每个周期的时长为:
T = 1 / f = 1 / 50 = 20ms
这个20ms的时间窗口被划分为两个部分:高电平时间(脉冲宽度)和低电平时间。舵机角度由高电平时间的持续时间决定,具体对应关系如下:
| 高电平时间(ms) | 对应角度(度) | 占空比(%) |
|---|---|---|
| 0.5 | 0 | 2.5 |
| 1.0 | 45 | 5.0 |
| 1.5 | 90 | 7.5 |
| 2.0 | 135 | 10.0 |
| 2.5 | 180 | 12.5 |
这个线性关系可以用数学公式表示为:
脉冲宽度(ms) = 0.5 + (角度 / 180) × 2.0
1.2 定时器参数推导过程
在STM32中,PWM生成依赖于定时器的三个关键参数:时钟源频率、预分频系数和自动重载值。假设使用72MHz的系统时钟,我们需要推导出合适的参数配置。
首先,50Hz的频率要求定时器溢出频率为50Hz。定时器的计数频率由以下公式决定:
计数频率 = 时钟源频率 / (预分频系数 + 1)
然后,定时器溢出频率为:
溢出频率 = 计数频率 / (自动重载值 + 1)
联立以上两个公式,我们可以得到:
50 = (72,000,000 / (预分频系数 + 1)) / (自动重载值 + 1)
为了获得较高的角度分辨率,我们选择预分频系数为71(72-1),这样计数频率为:
计数频率 = 72,000,000 / 72 = 1,000,000 Hz
每个计数周期为1μs,适合精确控制脉冲宽度。接下来计算自动重载值:
自动重载值 = (1,000,000 / 50) - 1 = 20,000 - 1 = 19,999
这样配置后,定时器每个计数代表1μs,整个周期为20,000个计数(20ms),完美匹配SG50的要求。
2. 占空比与角度转换的数学建模
2.1 线性变换公式推导
从角度到PWM占空比的转换是一个典型的线性映射问题。我们需要将0-180度的角度范围映射到500-2500的计数值范围(对应0.5ms-2.5ms)。
建立线性关系方程:
CCR = a × Angle + b
当角度为0度时,CCR应为500;当角度为180度时,CCR应为2500。代入方程:
500 = a × 0

367

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



