2、PWM基础:PWM(脉宽调制)的工作原理、占空比、频率与分辨率,以及如何用PWM控制电机转速和舵机角度

在机器人运动控制中,PWM(Pulse Width Modulation,脉宽调制)是最基础也最核心的控制信号之一。无论是驱动直流电机调速、控制舵机转角,还是调节LED亮度,PWM都扮演着“数字世界到模拟世界桥梁”的角色。理解PWM的本质——即用数字方波模拟连续量——是掌握机器人底层控制逻辑的关键。本节将从PWM的物理原理出发,深入拆解占空比、频率与分辨率三个核心参数,并结合直流电机与舵机的实际控制案例,帮助你建立从信号到机械动作的完整认知链路。

PWM信号生成 核心参数 执行机构 t V T周期 高电平 低电平 Ton(高电平时间) 占空比 D = Ton / T • 范围 0% ~ 100% • 决定输出平均电压 • 例:5V方波,D=60% → 平均3V 频率 f = 1/T • 电机驱动:10kHz ~ 50kHz 直流电机 转速 ∝ 占空比 舵机 角度 ∝ 脉宽(ms) PWM频率需高于 电机响应带宽 周期固定20ms 脉宽1~2ms PWM控制链路 MCU定时器 生成PWM波形 电机驱动芯片 功率放大 直流电机 机械输出 编码器反馈 转速/位置检测 MCU控制算法 PID调节 闭环控制:根据编码器反馈动态调整PWM占空比 MCU PWM输出 舵机控制板 舵机角度输出

2.1 PWM核心原理:从数字方波到模拟控制

PWM的本质是一种利用数字方波信号来模拟连续模拟量的技术。其核心思想是:在固定的周期T内,通过控制高电平持续的时间Ton,使得负载端感受到的“平均功率”或“平均电压”发生变化。这个高电平时间与周期的比值,就是占空比D = Ton / T × 100%。例如,一个5V的方波信号,如果占空比为60%,那么负载上等效的平均电压就是5V × 60% = 3V。这种“斩波”式的控制方式,避免了使用昂贵的数模转换器(DAC),仅通过数字IO口即可实现精确的模拟控制。

从物理层面看,PWM控制依赖于负载的“惯性”或“低通滤波”特性。对于直流电机,其绕组电感会平滑电流波动,使得机械转速响应于平均电压;对于舵机,其内部电路会解析脉宽信号并转换为角度指令。因此,PWM并非直接输出连续电压,而是通过快速切换电源的通断,利用负载自身的物理特性来“平滑”出等效的模拟效果。

2.2 三大核心参数:占空比、频率与分辨率

要正确使用PWM,必须深入理解以下三个参数的物理意义与工程选择方法。

参数 定义 对控制的影响 典型选择依据
占空比(D) 高电平时间Ton与周期T的比值 决定输出平均电压/功率,直接控制电机转速或舵机角度 0%~100%连续可调,由控制算法实时计算
频率(f) 每秒脉冲次数,f = 1/T 影响控制平滑度与噪声;频率过低导致电机抖动,过高增加开关损耗 直流电机:10kHz~50kHz(避开 audible 噪声);舵机:50Hz(周期20ms)
分辨率(N) 占空比可调节的最小步进,通常由定时器位数决定 决定角度/转速控制的精细度;8位分辨率=256级,16位=65536级 舵机控制需至少8位;高精度位置控制建议12位以上

频率的选择需要权衡。对于直流电机,频率过低(如1kHz以下)会导致电流纹波增大,电机产生可闻的啸叫和转速波动;频率过高(如100kHz以上)则会使MOSFET开关损耗显著增加,驱动芯片发热。工程上常用20kHz左右,既超出人耳听觉范围,又保持较低的开关损耗。而舵机则完全不同,其内部电路期望接收50Hz(周期20ms)的标准信号,脉宽范围1ms~2ms对应0°~180°。

2.3 用PWM控制直流电机转速:方法与实战

直流电机的转速与施加在电枢两端的平均电压近似成正比。通过改变PWM占空比,即可线性调节电机转速。实际工程中,通常采用“H桥驱动电路”配合PWM信号实现正反转与调速控制。

操作流程(以STM32 + TB6612驱动芯片为例):

  1. 初始化定时器:配置定时器输出比较通道,设置PWM频率为20kHz(预分频与自动重载值计算)。
  2. 设置占空比:通过修改比较寄存器CCR的值,控制高电平时间。例如,8位分辨率下,CCR=128对应50%占空比。
  3. 方向控制:通过GPIO控制H桥的IN1/IN2引脚,决定电机正转或反转。
  4. 闭环调速:读取编码器脉冲数,计算实际转速,通过PID算法动态调整CCR值。
// 伪代码示例:PWM初始化与占空比设置
TIM_HandleTypeDef htim2;
htim2.Init.Prescaler = 84-1;      // 84MHz/84 = 1MHz
htim2.Init.Period = 50-1;         // 1MHz/50 = 20kHz
HAL_TIM_PWM_Init(&htim2);

TIM_OC_InitTypeDef sConfigOC;
sConfigOC.Pulse = 25;             // 占空比 = 25/50 = 50%
HAL_TIM_PWM_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_1);
HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_1);

值得注意的是,电机启动瞬间需要较大的启动电流,此时应避免从0%直接跳变到目标占空比,而应采用软启动策略(如每10ms增加5%占空比),防止电流冲击损坏驱动芯片。

2.4 用PWM控制舵机角度:信号协议与实现

舵机(Servo)是一种位置伺服驱动器,其控制信号是典型的PWM脉宽调制,但协议与直流电机调速有本质区别。舵机期望的PWM周期固定为20ms(50Hz),而角度信息编码在高电平脉宽中:1ms对应0°,1.5ms对应90°,2ms对应180°。舵机内部电路会测量高电平持续时间,并与电位器反馈的位置进行比较,驱动电机转动至目标角度。

关键参数速查:标准舵机脉宽-角度对应关系

  • 0° → 脉宽 1.0ms(占空比5%)
  • 90° → 脉宽 1.5ms(占空比7.5%)
  • 180° → 脉宽 2.0ms(占空比10%)

注意:不同品牌舵机可能存在微小差异,实际使用前应查阅数据手册,避免超出机械限位导致堵转损坏。

在嵌入式实现中,若使用定时器产生50Hz的PWM,则自动重载值(Period)需设置为20ms对应的计数值。例如,定时器时钟为1MHz时,Period=20000-1,而CCR值在1000(1ms)到2000(2ms)之间变化,即可覆盖0°~180°。这种控制方式对时序精度要求较高,建议使用硬件PWM而非软件延时模拟,以避免中断干扰导致舵机抖动。

2.5 常见误区与工程复盘

在实际项目调试中,PWM控制看似简单,却常因细节疏忽导致故障。以下是几个高频问题与排查思路:

误区一:混淆频率与占空比的调节效果。有些初学者试图通过改变频率来调速,这是错误的。频率主要影响控制平滑度与噪声,而平均电压仅由占空比决定。若发现电机转速异常,应首先检查CCR值是否正确,而非调整预分频。

误区二:舵机供电不足导致抖动。舵机启动瞬间电流可达1A以上,若与MCU共用电源,会造成电压跌落,导致舵机抽搐或复位。正确做法是使用独立的5V电源,并确保电源地线与MCU共地。

误区三:忽略死区时间。在H桥驱动中,上下桥臂的开关切换需要死区时间(如500ns),否则会发生直通短路。使用集成驱动芯片(如TB6612、DRV8833)可自动处理,但若使用分立MOSFET搭建,必须在软件或硬件上加入死区。

案例复盘:某轮式机器人项目,电机采用20kHz PWM驱动,但发现低速时转速波动明显。排查过程:首先用示波器测量PWM波形,确认占空比稳定;随后检查编码器反馈,发现低速时每100ms仅产生几十个脉冲,导致PID计算的分母过小,引入量化噪声。最终解决方案是提高编码器分辨率(从400线升级至2000线),并在PID控制中加入死区处理,低速波动问题得以解决。此案例说明,PWM控制并非孤立环节,必须与反馈系统协同设计。

总结而言,PWM控制的核心在于理解“时间比例”与“能量等效”的物理本质。掌握占空比、频率与分辨率的工程权衡,并针对不同执行机构(电机或舵机)采用适配的信号协议,是机器人运动控制的基本功。在实际调试中,建议始终使用示波器观察PWM波形,确认信号质量后再进行算法层面的优化。