【PI控制】开关电源中位置式PI的离散化实现与频域分析

张开发
2026/4/21 14:39:09 15 分钟阅读

分享文章

【PI控制】开关电源中位置式PI的离散化实现与频域分析
1. 位置式PI控制基础第一次接触开关电源控制时我被各种控制算法搞得晕头转向。直到遇到位置式PI控制才发现原来控制算法可以这么直观。这种算法特别适合我们这些刚入门的工程师因为它用最直白的方式描述了控制过程。位置式PI的核心思想很简单根据当前误差大小比如设定电压与实际输出电压的差值来调整控制量。具体来说它包含两个部分比例项P项直接反映当前误差积分项I项累积历史误差举个例子假设我们在控制一个输出电压为12V的开关电源。当实际输出只有10V时这个2V的差值就是e(k)。PI控制器会根据这个差值计算出需要调整的PWM占空比y(k)。随着占空比调整输出电压会逐渐接近12V直到误差为零。在实际编程中位置式PI的离散表达式是这样的y(k) Kp * e(k) Ki * sum(e(0) e(1) ... e(k))其中Kp是比例系数Ki是积分系数。这个公式理解起来很直观当前控制量等于当前误差乘以比例系数再加上所有历史误差的积分。2. 从连续到离散的数学转换很多教科书都是从连续域开始讲PI控制但实际工程中我们都是在离散系统中实现。这就涉及到一个关键问题如何把连续的拉普拉斯变换表达式转换成离散的差分方程连续域的位置式PI传递函数是G(s) Kp Ki/s这个式子看起来简单但要在单片机里实现必须进行离散化处理。离散化的本质就是把连续的积分运算变成离散的累加运算。想象一下连续积分就像计算一条曲线下的面积而离散累加则是用一系列矩形来近似这个面积。采样周期T就是这些矩形的宽度误差值e(k)就是矩形的高度。采样频率越高T越小这种近似就越精确。使用双线性变换Tustin变换进行离散化是个不错的选择。具体做法是把s域中的s用以下式子替换s ≈ (2/T) * (1 - z^-1)/(1 z^-1)这样变换后原来的连续传递函数就变成了z域的离散传递函数。这个转换过程虽然涉及一些数学运算但现代计算工具可以帮我们自动完成。3. 频域特性分析离散化后的PI控制器性能如何最直观的方法就是看它的频域响应。我习惯用Bode图来对比离散前后的特性。在Matlab或者Python中我们可以很方便地绘制连续和离散PI控制器的Bode图。通过对比可以发现在低频段远低于采样频率的区域离散和连续的幅频特性几乎完全重合相位响应在截止频率附近会有轻微差异当频率接近奈奎斯特频率采样频率的一半时离散系统的特性会明显偏离连续系统这个现象告诉我们只要采样频率足够高至少是目标带宽的10倍离散化带来的影响就可以忽略不计。在实际的开关电源设计中我通常会把PWM频率设定在100kHz以上而控制环路的带宽控制在10kHz以内。4. 实际工程实现要点在STM32等MCU上实现位置式PI控制器时有几个坑我踩过这里分享给大家首先是积分饱和问题。当系统启动或者遇到大扰动时误差会突然增大导致积分项快速累积。这时候可以采取以下措施// 抗积分饱和实现 if(abs(e(k)) THRESHOLD) { integral integral * 0.9; // 衰减积分项 }其次是参数整定。我常用的试凑法是先把Ki设为零逐渐增大Kp直到系统出现轻微振荡然后固定Kp逐渐增加Ki直到静态误差消除最后微调两个参数在响应速度和稳定性之间取得平衡还有一个容易忽略的问题是数值溢出。积分项会不断累加必须设置上下限// 积分限幅 if(integral MAX_INTEGRAL) { integral MAX_INTEGRAL; } else if(integral -MAX_INTEGRAL) { integral -MAX_INTEGRAL; }5. 零极点补偿技巧在开关电源设计中有时需要在PI控制器中加入额外的零极点来改善系统特性。比如增加一个零点可以提高相位裕度改善稳定性。假设原始传递函数是G(s) (s 1)/s如果想在s-2处增加一个极点直接加上去会导致低频增益变化。正确的做法是G_new(s) 2*(s 1)/[s(s 2)]这个2的系数就是为了保持低频增益不变。在实际调试时我通常会先用仿真软件验证然后再烧录到硬件测试。6. 采样周期选择经验采样周期T的选择对控制性能影响很大。根据我的经验对于输出电压控制采样周期应该小于PWM周期的1/10对于电流环这种需要快速响应的场合采样周期要更短但也不是越短越好过高的采样频率会增加计算负担一个实用的方法是先根据奈奎斯特定理确定最小采样频率然后在这个基础上适当提高。比如目标带宽是5kHz那么采样频率至少需要10kHz实际可以选择50-100kHz。7. 数字滤波器的配合使用单纯的PI控制器有时会遇到高频噪声问题。我的解决方案是在反馈回路中加入一个低通滤波器// 一阶低通滤波 filtered_value 0.9 * filtered_value 0.1 * raw_value;这个滤波器的截止频率要设得比控制带宽高通常取3-5倍的关系。太高的截止频率起不到滤波效果太低又会影响动态响应。在数字实现时还要注意滤波器的相位延迟。我遇到过因为滤波器延迟导致系统不稳定的情况后来改用FIR滤波器解决了这个问题。8. 实际调试中的小技巧最后分享几个调试时的小技巧先用示波器观察PWM输出和反馈信号确保硬件工作正常从小的Kp值开始逐步增加避免过冲损坏器件保存每次的参数修改记录方便回溯遇到振荡时先降低增益再慢慢调整使用MATLAB或Python实时绘制数据比单纯看波形更直观记得第一次调试时我花了整整三天才把参数调好。后来积累经验后通常半小时就能完成基本调试。关键是要理解PI控制的工作原理这样遇到问题时才能快速定位。

更多文章