Boost电路微分方程模型
boost电路smc滑模控制文章复现Boost电路在电力电子里算是老熟人了但真要玩转它的闭环控制可不容易。最近在复现一篇用滑模控制SMC搞Boost电路的论文实测发现这货对付负载突变确实有两把刷子。今天咱们就边撸代码边拆解这个暴力美学控制方案。先看Boost拓扑的基本状态方程def boost_model(t, x, Vin, R, L, C, u): iL, vC x diL (Vin - (1 - u)*vC)/L dvC ((1 - u)*iL - vC/R)/C return [diL, dvC]这里的状态变量是电感电流iL和电容电压vC控制量u对应开关管的占空比。注意u出现在两个方程里这种强耦合就是控制难搞的根源。传统PI控制遇到负载跳变容易翻车滑模控制的优势在于直接对着系统非线性硬刚。设计滑模面的时候论文里用了输出电压误差和电流变化的组合# 滑模面设计 def sliding_surface(vC_ref, vC, iL_ref, iL, lambda): e_v vC_ref - vC e_i iL_ref - iL return e_v lambda * e_i这里的lambda是个调节参数相当于给电压误差和电流误差分配权重。实测发现lambda选大了系统响应会变快但抖振也明显增强这个后面调参时再细说。控制律部分最带感直接上sign函数# 滑模控制量计算 def smc_control(s, K): u 0.5 * (1 - np.sign(s) * K) return np.clip(u, 0.1, 0.9) # 限制占空比范围注意这里的K不是传统意义上的增益而是结合系统参数计算的边界层参数。原论文给的公式是K(L/Vin)*sqrt(...)但实际调试中发现直接当可调参数用更方便。boost电路smc滑模控制文章复现跑个仿真看看效果# 仿真参数设置 t_span [0, 0.02] t_eval np.linspace(*t_span, 2000) x0 [0.1, 10] # 初始状态 # 主仿真循环 for i in range(len(t_eval)-1): s sliding_surface(20, vC_hist[i], 0.5, iL_hist[i], 50) u smc_control(s, 0.8) sol solve_ivp(boost_model, [t[i], t[i1]], x_hist[i], args(12, 10, 100e-6, 470e-6, u)) x_hist.append(sol.y[:, -1])跑出来的波形显示负载在10ms时从10Ω突变为5Ω输出电压从20V跌到19.2V后0.3ms内恢复比同条件下的PI控制恢复速度快了3倍多。不过锯齿状的占空比波形暴露了滑模控制的老毛病——抖振。调参时有个骚操作把sign函数换成饱和函数def sat(s, epsilon): return np.clip(s/epsilon, -1, 1) # 修改后的控制量计算 def smc_control_soft(s, K, epsilon0.1): u 0.5 * (1 - sat(s, epsilon) * K) return u这样占空比波形立刻温顺了许多代价是动态响应速度略微降低。论文里没提这招可能是为了突出理论性能但实际工程中不用这技巧根本没法用。复现过程中踩过最大的坑是电感参数选择。原论文用100μH电感但实际仿真发现当负载电流超过2A时电感电流断续会导致控制失稳。后来在控制律里加了电流前馈补偿才解决这说明理论设计必须结合实际硬件特性。最后安利一个调试技巧在滑模面里引入积分项s e_v lambda*e_i mu*integral(e_v)虽然会增加系统阶数但对付稳态误差有奇效。不过要注意积分饱和问题配合抗饱和处理食用更佳。这种把滑模控制拍在Boost电路上的玩法虽然数学上不够优雅但实测性能确实顶。下次遇到输入电压大范围波动或者负载剧烈变化的场景不妨试试这剂猛药。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2427498.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!