脉宽调制(PWM)技术是现代电机控制系统的核心,它通过快速开关功率器件来模拟模拟信号输出。我第一次接触PWM是在大学实验室里,当时用555定时器搭建了一个简单的LED调光电路,没想到这个简单的原理后来会成为我工作中最常用的技术之一。
PWM的本质是通过调节脉冲的占空比(高电平时间与周期的比值)来控制平均输出电压。假设我们有一个12V电源,使用50%占空比的PWM波形,那么负载上的等效电压就是6V。这个原理看似简单,但在实际应用中需要考虑很多因素:
频率选择:PWM频率过高会导致开关损耗增加,过低则会引起可闻噪音。对于小型电机,16-24kHz是理想范围,既高于人耳听觉上限(约20kHz),又能保持较高的效率。
分辨率影响:8位PWM提供256级调节精度(0.4%),对于大多数小型电机已经足够。但在需要精密控制的场合(如伺服系统),可能需要10位(1024级)甚至更高分辨率。
实际调试中发现,当PWM频率接近电机机械时间常数时,会出现明显的振动现象。我的经验法则是:频率应至少比机械响应速度快10倍。
在电机驱动中,PWM主要实现两个功能:
速度控制:通过调节占空比改变电机端电压,从而控制转速。直流电机的转速近似与端电压成正比。
方向控制:使用H桥电路配合PWM,可以实现电机的正反转。这在附录B的代码中体现得很清楚 - 通过切换P0.0和P0.1的PWM输出,配合P0.2和P0.3的状态改变,就能实现电机转向切换。
无刷直流电机(BLDC)的控制更为复杂,需要根据转子位置传感器(通常是霍尔传感器)的信号,按特定顺序切换三相桥臂的PWM输出。附录D展示了一个典型的六步换相控制实现,其中hallPattern数组定义了霍尔信号与换相状态的对应关系。
8位PWM是最基础的实现方式,在Silicon Labs C8051F系列MCU中,PCA模块可以方便地生成这种PWM。其配置过程如附录A所示:
c复制void PCA0_Init(void) {
PCA0MD = 0x02; // 使用系统时钟/4
PCA0CPM0 = 0x42; // 模块0配置为8位PWM模式
PCA0CPH0 = 0x00; // 初始占空比为0%
CR = 1; // 启动PCA计时器
}
关键参数选择:
当需要更高分辨率或特殊波形时,HSO模式就派上用场了。如原文Example 6所示,HSO可以实现:
但HSO模式也有明显缺点:
在Example 6的代码中,关键点包括:
NextEdge变量预存下一个边沿时间LATENCY宏补偿中断延迟HiTime中心对齐PWM(如Example 7所示)在电机控制中有显著优势:
死区时间是高侧和低侧开关管切换时的保护间隔,防止直通短路。实现代码关键部分:
c复制// 计算带死区的下一个边沿时间
if(cycle) {
NextEdge1 = NextEdge0 + HiTime + DeadTime;
NextEdge2 = NextEdge0 + HiTime - DeadTime;
} else {
NextEdge1 = NextEdge0 - HiTime + DeadTime;
NextEdge2 = NextEdge0 - HiTime - DeadTime;
}
实测中我发现,死区时间通常取300ns-1μs,具体取决于:
附录D的BLDC控制代码展示了典型的三相六步换相实现,其中有几个关键技巧:
readHalls()函数需要连续3次读数一致才确认状态hallPattern和P1Pattern定义了霍尔信号与PWM输出的映射关系一个实用的改进是加入启动策略:
| 现象 | 可能原因 | 解决方法 |
|---|---|---|
| 电机振动大 | PWM频率过低 | 提高至16kHz以上 |
| 电机发热严重 | 死区时间不足 | 增加死区100-200ns |
| 方向切换异常 | H桥上下管直通 | 检查死区插入逻辑 |
| 转速不稳定 | 电源电压波动 | 增加滤波电容 |
| 高频噪音 | 开关振铃 | 优化栅极电阻 |
文中图9和图11展示了关键的实测波形,在调试时我通常会关注:
基于实际项目经验,对示例代码的改进建议:
c复制void softStart(uint8_t targetDuty) {
for(uint8_t i=0; i<targetDuty; i++) {
PCA0CPH0 = i;
delay_ms(10); // 10ms步进
}
}
c复制if(ADC0 > OVER_CURRENT_THRESHOLD) {
coast(); // 立即关闭输出
faultFlag = 1;
}
c复制void checkTemperature() {
if(ADC1 > TEMP_LIMIT) {
reduceDutyBy(20); // 降额运行
}
}
在电机控制领域,PWM技术的巧妙应用往往能带来显著的性能提升。记得有一次调试伺服系统时,仅仅是将PWM从边沿对齐改为中心对齐,就使电机噪音降低了15dB。这种实践经验是书本上很难学到的,需要在实际项目中不断积累和总结。