1. PWM 基础与电机控制概述
各位同学,咱们今天聊聊 PWM 控制与电机驱动。说实话,我入行那会儿,第一次调电机驱动板,板子一上电,电机嗡嗡响就是不转。后来才发现,是 PWM 频率没设对。从那以后,我就明白了一个道理——搞电机控制,PWM 是基本功,信号完整性是命根子。
1.1 PWM 基本原理
PWM,全称 Pulse Width Modulation,脉冲宽度调制。说白了,就是用数字信号模拟模拟信号。你想想看,单片机只能输出 0 或 1,怎么控制电机转得快慢?答案就是——让高电平的时间占比变化。
核心概念:PWM 信号由周期固定的方波组成,通过改变高电平的宽度(即占空比)来调节平均电压。
我习惯把 PWM 比作水龙头:周期就是开关一次的时间,占空比就是开多久。开的时间长,水流大;开的时间短,水流小。电机转速也是这个道理。
| 参数 | 定义 | 单位 |
|---|---|---|
| 周期 (T) | 一个完整 PWM 波形的时间长度 | 秒 (s) |
| 频率 (f) | 1/T,每秒完成的周期数 | 赫兹 (Hz) |
| 占空比 (D) | 高电平时间 / 周期 × 100% | 百分比 (%) |
| 分辨率 | 占空比可调节的步进精度 | 位 (bit) |
1.2 占空比与频率的实战选择
占空比决定了电机的平均电压。比如 12V 供电,50% 占空比,平均电压就是 6V。但这里有个坑——频率选不对,电机要么啸叫,要么发热。
我的经验:直流有刷电机,频率选 10kHz~20kHz 比较稳妥。低于 10kHz,人耳能听到啸叫;高于 20kHz,MOS 管开关损耗会明显增加。
我曾经在一个项目中,为了追求低噪声,把频率设到了 40kHz。结果 MOS 管烫得能煎鸡蛋。后来查资料才发现,频率每翻一倍,开关损耗就翻一倍。嗯,这个教训挺深刻的。
// 以 STM32 定时器为例,设置 10kHz PWM,占空比 50%
// 假设定时器时钟 72MHz,预分频 71,ARR = 99
TIM_HandleTypeDef htim2;
htim2.Instance = TIM2;
htim2.Init.Prescaler = 71; // 72MHz / (71+1) = 1MHz
htim2.Init.Period = 99; // 1MHz / (99+1) = 10kHz
htim2.Init.ClockDivision = 0;
HAL_TIM_PWM_Init(&htim2);
TIM_OC_InitTypeDef sConfigOC;
sConfigOC.OCMode = TIM_OCMODE_PWM1;
sConfigOC.Pulse = 50; // 占空比 50%
sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
HAL_TIM_PWM_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_1);
HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_1);
1.3 电机驱动系统组成
一个完整的电机驱动系统,不是只有单片机和电机。我画了一张图,你看看就明白了。
从图上你能看到,信号从 MCU 出来,经过隔离、驱动、功率级,最后到电机。每个环节都可能引入噪声。我见过不少新手,直接拿 MCU 的 GPIO 去推 MOS 管,结果不是烧 IO 就是电机抖得厉害。
1.4 信号完整性的重要性
信号完整性,英文叫 Signal Integrity,简称 SI。说白了,就是保证 PWM 波形从发出到接收,形状不变、时序不乱。
常见问题:PWM 信号在长线传输中会出现过冲、振铃、边沿变缓。这些问题会导致 MOS 管开关不干脆,轻则发热,重则炸管。
我曾经调试一个 24V 直流电机驱动板,PWM 频率 20kHz,线长 30cm。示波器一看,上升沿有个 5V 的过冲,直接把 MOS 管的栅极击穿了。后来加了栅极电阻和 TVS 管才解决。
信号完整性主要关注三个指标:
- 过冲/下冲:信号超过或低于目标电压的幅度,通常要求 < 10%
- 振铃:信号边沿后的振荡,持续时间越短越好
- 边沿速率:上升/下降时间,太快则 EMI 大,太慢则开关损耗大
我的建议:初次调试时,先用示波器抓一下 PWM 波形。看看上升沿有没有毛刺,下降沿有没有拖尾。这一步能省下后面很多排查时间。
好了,这一章咱们把 PWM 的基础概念、电机驱动系统的组成、信号完整性的重要性都过了一遍。你想想看,这些知识点是不是环环相扣?占空比选不对,电机转不起来;频率选不对,MOS 管发热;信号完整性不好,系统不稳定。搞电机控制,每一步都得扎实。