BUCK多种控制策略对比 图一BUCK主电路图与控制策略方法 图二采用开环控制波形 图三开环调节过程 图四单电压闭环控制波形 图五单电压调节过程
这货就是咱常见的BUCK电路,MOS管、电感、电容、二极管搭个台子就能演降压大戏。但怎么让输出电压乖乖听话?今天唠唠开环、单电压闭环两种玩法,附带翻车现场和代码实操。
开环控制:大力出奇迹?
开环控制就像手动挡老司机——踩多少油门出多少力。代码简单粗暴,直接给固定占空比PWM信号:
void setup() { analogWrite(PWM_PIN, 128); // 占空比50% } void loop() {} // 懒得动态调整!采用开环控制波形
输出电压波形看着挺稳?但负载突然加重时(比如接了个电机),电压直接尿崩(图三)。为啥?开环不检测输出,MOS管还在傻乎乎按固定节奏开关,电感续流不足,电容电量被掏空。
代码破案时刻:
用Python做个开环仿真,负载突变时电压掉到姥姥家:
def buck_open_loop(R_load): D = 0.5 # 占空比焊死 V_in = 12 return V_in * D - I_load * R_load # I_load突增时直接崩盘数学老师教的公式Vout=D*Vin在现实里就是个脆皮,负载扰动、输入波动分分钟教做人。
单电压闭环:给电路装个大脑
闭环控制就像给BUCK配了个智能手环,实时监测血压(电压)并自动调药量(占空比)。代码升级成PID控制器:
PID voltagePID(&V_out, &DutyCycle, &V_ref, Kp, Ki, Kd, DIRECT); void loop() { V_out = readVoltage(); // 实时读取输出电压 voltagePID.Compute(); // PID暴算占空比 analogWrite(PWM_PIN, DutyCycle*255); }!单电压闭环控制波形
负载突变时,闭环系统开启狂暴模式(图五):电压检测到下跌→PID疯狂调高占空比→电感猛充电容→电压逐渐回血。整个过程像极了打地鼠,哪里不行锤哪里。
代码骚操作:
PID的核心是误差处理,比如比例项Kp决定了"见错就怼"的力度:
float Kp = 0.8; // 暴躁老哥参数 float adjust_D(float error) { return previous_D + Kp * error; // 误差越大,占空比调整越猛 }但Kp调太大容易震荡,调太小反应迟钝——这微操比女朋友脾气还难把握。
灵魂拷问:选开环还是闭环?
- 开环:便宜大碗,适合负载固定、不差那点精度的场景(比如LED调光)
- 闭环:加个电压检测和算法,成本+20%,但能扛住负载蹦迪、输入电压抽风
最后放个对比彩蛋:
| 指标 | 开环 | 闭环 |
|---|---|---|
| 成本 | 5毛钱 | 5块钱 |
| 响应速度 | 躺平 | 百米冲刺 |
| 稳如老狗 | 想屁吃 | 真·泰山崩于前 |
所以...要自行车还是要玛莎拉蒂,您看着办?