15.4 数字BUCK变换器项目2:闭环系统设计
# 15.4 数字BUCK变换器项目2:闭环系统设计
本实验在开环系统基础上引入数字PI控制,通过动态调节占空比实现输出电压的精确稳压,提升系统抗干扰能力。
核心改进:
- PI闭环控制:消除输入电压波动、负载变化带来的误差。
- 动态参数调节:通过编码器实时调整PI参数。
- 多模式切换:支持1V/3.3V输出快速切换,验证动态响应。
# 15.4.1 数字PI控制原理
# 1. PI控制公式
离散时间域表达式:
其中:
:控制输出 :误差(设定值 - 实际值) :比例系数 :积分系数 :采样周期
# 2. 参数作用
- 比例系数(
):快速响应误差,过大会导致振荡,过小则响应迟缓。 - 积分系数(
):消除稳态误差,过大引起超调,过小则静差残留。
# 15.4.2 STM32CubeMX配置
# 1. 新增配置(基于开环工程)
- 开启TIM1中断:用于逐周期PI计算。
- 编码器按键配置:PB4引脚设置为上拉输入,用于参数切换。
- 代码生成:为外设生成独立文件,保持原有配置不变。
# 15.4.3 闭环软件设计
# 1. 关键变量定义(代码清单15‑7)
/* USER CODE BEGIN PV */
uint16_t value[2]; // ADC采样值:[电流, 电压]
float Vout, Iout; // 实际电压/电流值
char Vo_str[30], Io_str[30], P_str[30], I_str[30];
int Encoder_cnt[2] = {0, 0}; // P/I参数编码值
int PI_select = 0; // 0:调节P,1:调节I
int32_t pidtest[2] = {310, 1024}; // 1V/3.3V对应的ADC参考值
/* USER CODE END PV */
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
# 2. PI控制函数(代码清单15‑8)
void PositionalPI_Update(void) {
static int32_t Integral = 0;
int32_t Error = Voref - value[1]; // 电压误差
// PI计算
u0 = Integral + Error * KP;
Integral += Error * KI;
// 积分限幅
Integral = (Integral < INTEGREAL_MIN) ? INTEGREAL_MIN :
(Integral > INTEGREAL_MAX) ? INTEGREAL_MAX : Integral;
// 占空比限幅(10%~90%)
Dutycycle = (u0 >> 12);
Dutycycle = (Dutycycle < 409) ? 409 : (Dutycycle > 3686) ? 3686 : Dutycycle;
// 更新PWM占空比
__HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_1, Dutycycle * 720 >> 12);
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 3. 功能函数
输出电压切换(代码清单15‑9):
void Outputvoltage_Change() { pidcnt = (pidcnt + 1) % 2; // 0↔1切换 Voref = pidtest[pidcnt]; // 1V或3.3V }
1
2
3
4OLED显示(代码清单15‑10):
void OLED_disp() { sprintf(P_str, "P:%.1f", KP / 4096.0); sprintf(I_str, "I:%.2f", KI / 4096.0); OLED_PrintString(45, 0, "BUCK", &font16x16, OLED_COLOR_NORMAL); // ...其他显示逻辑 }
1
2
3
4
5
6编码器控制(代码清单15‑11):
void Encoder() { Encoder_cnt[PI_select] = __HAL_TIM_GET_COUNTER(&htim2); // 限幅0~100 if (Encoder_cnt[PI_select] > 100) Encoder_cnt[PI_select] = 100; // 更新PI参数 if (PI_select == 0) KP = Encoder_cnt[0] * 409; // P步长0.1 else KI = Encoder_cnt[1] * 82; // I步长0.02 }
1
2
3
4
5
6
7
8
# 15.4.4 PI调试过程
# 1. 调试步骤
比例系数(P)调试:
- 初始值
,逐步增加至系统出现轻微振荡(如 )。 - 现象:输出电压超调,稳态误差明显(图15‑14)。
- 初始值
积分系数(I)调试:
- 固定
,逐步增加 至 ,消除稳态误差(图15‑15a)。 - 注意:
过大会导致振荡加剧(图15‑15b)。
- 固定
优化比例系数:
- 降低
至 ,平衡响应速度与稳定性(图15‑16)。
- 降低
# 2. 最终参数
- 理想值:
, - 实际效果:输出电压稳定在3.3V,误差<±0.05V(图15‑17)。

# 15.4.5 关键说明
- 死区保护:占空比限制10%~90%,避免MOS管直通。
- 定点数运算:采用Q12/Q24格式,避免浮点运算开销。
- 动态切换:200ms周期切换输出电压,验证系统响应。