摘要:以下是一个数字开关电源内环电流环和外环电压环的实现代码框架。该框架基于常见的微控制器(如STM32、TMS320F28x等)实现,使用了双闭环控制结构。
以下是一个数字开关电源内环电流环和外环电压环的实现代码框架。该框架基于常见的微控制器(如STM32、TMS320F28x等)实现,使用了双闭环控制结构。
硬件平台
● 微控制器(如STM32、TMS320F28x)
● ADC模块(用于采样输入/输出电压、电感电流)
● PWM模块(用于生成驱动功率开关管的信号)
● 必要的传感器和采样电路
软件框架
1. 主函数 ( main.c )
#include "DSP28x_Project.h"
#include "adc.h"
#include "pwm.h"
#include "control.h"
int main(void) {
// 初始化系统
InitSysCtrl;
InitADC;
InitPWM;
ConfigInterrupts;
// 启动ADC和PWM
StartADC;
StartPWM;
while(1) {
// 主循环可以空运行,因为控制在中断服务函数中完成
}
}
2. 中断服务函数 ( interrupts.c )
#pragma CODE_SECTION(ADC_isr, ".intvecs")
void ADC_isr(void) {
// 清除中断标志
ClearADCInterruptFlag;
// 采样输入/输出电压和电感电流
float vin = ReadADC(ADC_VIN_CHANNEL);
float vout = ReadADC(ADC_VOUT_CHANNEL);
float il = ReadADC(ADC_IL_CHANNEL);
// 运行电流环和电压环控制算法
float i_ref = VoltageLoop(vout);
float pwm_duty = CurrentLoop(il, i_ref);
// 更新PWM占空比
SetPWMDuty(pwm_duty);
}
3. 控制算法实现 ( control.c )
3.1 电流环 (Inner Current Loop)
float CurrentLoop(float il, float i_ref) {
static float i_error_prev = 0;
float i_error = i_ref - il;
float i_output = Kp_I * i_error + Ki_I * (i_error + i_error_prev) * Ts;
// 防止积分饱和
if (Ki_I * (i_error + i_error_prev) * Ts > I_LIMIT) {
i_output = I_LIMIT;
} else if (Ki_I * (i_error + i_error_prev) * Ts
i_output = -I_LIMIT;
}
i_error_prev = i_error;
return i_output;
}
3.2 电压环 (Outer Voltage Loop)
float VoltageLoop(float vout) {
static float v_error_prev = 0;
float v_error = V_REF - vout;
float v_output = Kp_V * v_error + Ki_V * (v_error + v_error_prev) * Ts;
// 防止积分饱和
if (Ki_V * (v_error + v_error_prev) * Ts > V_LIMIT) {
v_output = V_LIMIT;
} else if (Ki_V * (v_error + v_error_prev) * Ts
v_output = -V_LIMIT;
}
v_error_prev = v_error;
return v_output;
}
4. 系统配置 ( config.h )
#ifndef CONFIG_H
#define CONFIG_H
// 控制参数
#define Kp_I 0.5f // 电流环比例系数
#define Ki_I 0.1f // 电流环积分系数
#define Kp_V 0.8f // 电压环比例系数
#define Ki_V 0.2f // 电压环积分系数
#define Ts 0.0001f // 采样时间(秒)
// 限制参数
#define I_LIMIT 1.0f // 电流环输出限制
#define V_LIMIT 2.0f // 电压环输出限制
// 参考值
#define V_REF 5.0f // 输出电压参考值
#endif /* CONFIG_H */
实现细节说明
1. 硬件初始化
● InitADC 和 InitPWM 函数用于配置ADC和PWM模块。
● ConfigInterrupts 函数用于配置ADC转换完成中断。
2. 中断服务函数
● 在ADC转换完成中断中,采样输入/输出电压和电感电流。
● 运行电压环和电流环控制算法,并更新PWM占空比。
3. 控制算法
● 电流环:使用PI调节器,目标是跟踪电压环的输出。
● 电压环:使用PI调节器,目标是维持输出电压稳定。
4. 参数整定
● 需要根据实际系统特性整定PI调节器参数(Kp、Ki)。
● 可以通过阶跃响应测试或频率响应分析来确定最优参数。
5. 抗积分饱和
● 在积分项中添加限制,防止积分饱和。
6. 限幅功能
● 对调节器输出进行限幅,防止PWM占空比超出合理范围。
来源:电子设计基础