设计双向直流电源的数字PI控制器需结合双向能量流动特性、动态响应需求、稳定性要求,通过离散化PI算法、参数整定、抗饱和处理及双向模式切换逻辑实现。以下是详细设计步骤与关键要点:
传递函数模型:
双向直流电源的典型小信号模型可简化为二阶系统(含输出滤波器LC环节),其开环传递函数为:
其中:
、为PI参数,、为滤波器电感/电容,为线路电阻,为输出阻抗(源模式)或输入阻抗(负载模式)。
参数整定方法:
极点配置法:根据目标带宽(如1kHz)和相位裕度(如60°)配置闭环极点,反推、。
Ziegler-Nichols法:通过临界增益和振荡周期计算参数:
将连续域PI控制器转换为数字实现,常用方法包括:
位置式PI:
优点:直接计算控制量,无积分饱和风险(需额外处理)。
缺点:计算量大,历史误差累积易溢出。
增量式PI:
优点:计算量小,积分饱和易处理(通过限幅)。
缺点:需保存上一周期控制量。
推荐方案:
采用增量式PI,结合抗积分饱和逻辑(如遇限削弱积分法):
cif (u(k) > U_max) { u(k) = U_max; if (e(k) > 0) integral_term = 0; // 抑制正向积分} else if (u(k) < U_min) { u(k) = U_min; if (e(k) < 0) integral_term = 0; // 抑制负向积分}
| 模式 | (K_p) | (K_i) | 积分限幅 |
|---|---|---|---|
| 源模式 | 0.5 | 0.01 | ±10V |
| 负载模式 | 0.2 | 0.05 | ±5V |
c// 定义参数float Kp_source = 0.5, Ki_source = 0.01;float Kp_load = 0.2, Ki_load = 0.05;float U_max = 10.0, U_min = -10.0; // 控制量限幅float integral_term = 0.0;float u_prev = 0.0;// PI控制器函数float PI_Controller(float e, float I_out, float Ts) { float Kp, Ki; if (I_out > 0.1) { // 源模式 Kp = Kp_source; Ki = Ki_source; } else if (I_out < -0.1) { // 负载模式 Kp = Kp_load; Ki = Ki_load; } else { // 死区,保持上一状态 return u_prev; } // 增量式PI float delta_u = Kp * (e - e_prev) + Ki * e * Ts; float u = u_prev + delta_u; // 抗积分饱和 if (u > U_max) { u = U_max; if (e > 0) integral_term = 0; } else if (u < U_min) { u = U_min; if (e < 0) integral_term = 0; } // 更新状态 e_prev = e; u_prev = u; return u;}
场景:某双向直流电源在负载模式(电池充电)下,输出电流从5A突减至1A时,电压过冲达8%。
问题分析:
设计双向直流电源的数字PI控制器需: