双闭环数字电源code框架

B站影视 2025-02-05 05:47 2

摘要:以下是一个数字开关电源内环电流环和外环电压环的实现代码框架。该框架基于常见的微控制器(如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占空比超出合理范围。

来源:电子设计基础

相关推荐