4、双极性PWM调制:双极性调制原理、双极性PWM实现方式、双极性PWM的优缺点、与单极性对比
好,咱们今天聊聊双极性PWM调制。说实话,这个拓扑在电机控制里非常经典,很多入门的朋友一开始接触的就是它。我个人习惯把双极性调制看作是PWM的“基础款”——简单、直接,但代价也很明显。
4.1 双极性调制原理
双极性调制的核心思想,说白了就是一句话:在任意一个开关周期内,桥臂上的两个开关管始终处于互补导通状态。你想想看,这就意味着电机的相电压要么是+Vdc,要么是-Vdc,不存在“零电压”这个中间状态。
为什么会这样?因为双极性调制没有“死区时间”的概念(或者说,死区时间极短,不影响电压极性)。上管导通时,下管必须关断;下管导通时,上管必须关断。两个管子永远一开一关,交替进行。
我记得刚入行那会儿,有个老工程师跟我说:“双极性调制就像跷跷板,不是左边高就是右边高,永远没有平的时候。”这个比喻很形象。电机的相电压波形,就是一个正负交替的方波,占空比决定了正负脉冲的宽度比例。
关键公式:
输出电压平均值:Uout = (2D - 1) × Vdc
其中D为占空比(0~1),Vdc为母线电压。
当D=0.5时,Uout = 0,但此时相电压仍然在+Vdc和-Vdc之间来回跳变。
4.2 双极性PWM实现方式
实现方式其实不复杂。我一般用定时器产生三角载波,然后用调制波(正弦波或直流电平)与载波比较。比较结果直接决定上下管的开关状态。
下面给一个典型的实现代码(基于STM32的通用定时器):
// 双极性PWM配置示例(STM32 HAL库)
// 假设TIM1为中央对齐模式,ARR=1000
void BipolarPWM_Init(void)
{
TIM_OC_InitTypeDef sConfigOC = {0};
// 配置CH1为上管PWM,CH1N为下管互补PWM
sConfigOC.OCMode = TIM_OCMODE_PWM1;
sConfigOC.Pulse = 500; // 初始占空比50%
sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
sConfigOC.OCNPolarity = TIM_OCNPOLARITY_HIGH;
sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET;
sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_RESET;
HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_1);
HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1);
HAL_TIMEx_PWMN_Start(&htim1, TIM_CHANNEL_1);
}
// 更新占空比函数
void BipolarPWM_SetDuty(uint16_t duty)
{
// duty范围:0~1000,对应占空比0%~100%
__HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_1, duty);
}
个人经验:我在做低压伺服驱动器时,发现双极性调制对死区时间非常敏感。虽然理论上不需要死区,但实际功率管存在关断延迟,所以还是得加一点死区(通常500ns~2us)。否则上下管直通,MOS管瞬间冒烟——我曾经就烧过一块板子,教训深刻。
4.3 双极性PWM的优缺点
咱们客观分析一下,双极性调制到底好在哪,不好在哪。
优点
- 控制简单:逻辑清晰,一个比较器就能搞定。不需要复杂的死区补偿算法。
- 动态响应快:因为电压始终在正负之间切换,电流变化率大,电机对指令的响应速度很快。
- 零位附近线性度好:在占空比50%附近,输出电压与占空比呈完美线性关系,没有死区效应。
缺点
- 电流纹波大:这是最头疼的问题。因为电压幅值始终是Vdc,电流纹波幅值 = (Vdc - E) × Ton / L,比单极性调制大得多。
- 开关损耗高:每个开关周期内,所有功率管都在高频开关,损耗是单极性的两倍左右。
- 电磁干扰严重:电压跳变幅度大(从+Vdc到-Vdc,变化2Vdc),对外的EMI辐射很厉害。
避坑指南:我曾经在一个大功率项目中(母线电压600V)尝试用双极性调制,结果EMC测试死活过不了。后来换成单极性+软开关技术才搞定。所以,母线电压超过300V时,建议慎重考虑双极性方案。
4.4 与单极性对比
咱们直接上表格,一目了然:
| 对比项 | 双极性PWM | 单极性PWM |
|---|---|---|
| 相电压波形 | ±Vdc交替 | 0、+Vdc、-Vdc三种状态 |
| 电流纹波 | 大(约单极性的2倍) | 小 |
| 开关损耗 | 高(所有管高频开关) | 低(部分管低频开关) |
| EMI | 严重 | 较好 |
| 控制复杂度 | 简单 | 稍复杂(需处理死区) |
| 动态响应 | 快 | 稍慢 |
| 零位线性度 | 好 | 存在死区效应 |
| 适用场景 | 低压小功率、对成本敏感 | 中高压、对纹波和EMI有要求 |
你想想看,如果项目对电流纹波要求不高,比如玩具电机、风扇驱动,双极性调制完全够用,成本还低。但如果是精密伺服、医疗设备,那还是老老实实用单极性吧。
嗯,这里要注意一点:双极性调制并不是一无是处。在低压(12V~48V)小功率场景下,它的简单可靠反而是最大优势。我见过很多工业泵、风机驱动,用了十几年双极性方案,从来没出过问题。
最后总结一下我的个人建议:
- 如果母线电压低于100V,且对纹波不敏感 → 大胆用双极性
- 如果母线电压在100V~300V之间 → 需要评估EMI和损耗
- 如果母线电压超过300V → 建议优先考虑单极性或三电平
下一章咱们聊聊单极性PWM的细节,到时候你会更清楚为什么在某些场合必须放弃双极性。