尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

永磁直流电机四象限DC-DC变换器PID控制Simulink仿真全流程

永磁直流电机四象限DC-DC变换器PID控制Simulink仿真全流程 做过电机控制或者电力电子仿真的朋友大概率都绕不开这个组合永磁直流电机、四象限DC-DC变换器加上PID闭环。这套东西看起来基础却是很多工业设备、伺服系统、车辆驱动项目里最常用的底层方案。我这次把整个Simulink建模与仿真过程完整走了一遍从电机本体的数学方程、H桥四象限变流器的工作模式到PID速度环的参数整定、仿真波形的细节分析全部串起来搭了一个可以跑的模型。这篇就把整个搭建过程和调试心得都整理出来给正要动手做类似仿真的同学一个参考。这篇内容适合两类人一类是刚接触电机控制仿真、想搞清楚Simulink里这些模块到底怎么搭的新手另一类是已经能跑通模型、但在“波形为什么是这个样子”“PID参数为什么总调不收敛”这类问题上还有困惑的进阶用户。我会把每一步的原理和操作对应起来讲尽量做到你照着搭就能出结果出了问题也知道去哪里查。1. 系统结构与设计思路拆解1.1 为什么是永磁直流电机、四象限变换器和PID这三件套很多项目落到实际控制方案选型时第一反应是上三相永磁同步电机配FOC这个思路没问题但成本和复杂度都比较高。相比之下永磁直流电机PMDC有它不可替代的适用场景控制模型极其简洁电枢电流和转矩直接成正比不需要坐标变换一个PID速度环加一个电流限制就能把系统跑稳。在车载水泵、电动工具、小型伺服、一些精度要求没那么极端的工业传动里这种组合的性价比非常高。但直流电机有个工程痛点需要可调的直流电压源来实现调速又需要能反向供电来快速制动或者反转。传统的单相整流加晶闸管方案能做但动态响应慢而且在低速段电流断续严重控制效果很一般。四象限DC-DC变换器也就是H桥恰好把这个缺口补上了它既能升压降压又能通过不同的开关组合让电机两端电压反向从而实现正转、反转、正转回馈制动、反转回馈制动这四种运行状态这就是“四象限”的由来。PID控制器在这套系统里承担的是“决策层”的角色它负责把转速误差转换成PWM占空比指令。选PID而不是更复杂的状态观测器或滑模控制一是因为被控对象直流电机功率变换器的模型足够线性PID就能拿到很好的控制效果二是因为PID参数物理意义清晰工程现场也好调试即使出了状况调参人员靠经验也能快速收敛不用翻一堆现代控制理论的公式。1.2 整个控制环路的信号流一句话说清把这三部分串起来系统的信号流是这样走的给定一个目标转速和电机轴上反馈回来的实际转速做差得到误差信号这个误差送入PID控制器PID算出一个控制量这个控制量本质上是期望的电机端电压平均值然后把这个电压值交给PWM调制模块转成占空比信号驱动H桥的四个开关管H桥输出的可变电压加到电机电枢两端产生电流电流在磁场里受到安培力形成电磁转矩推动电机转动转速上升后反电动势也上升电枢电流随之回落系统逐渐稳定在目标转速附近。这条链路里有一个地方特别重要PID输出的是电压给定不是直接的PWM波。很多初学者会把PID输出直接当成占空比去用导致整个模型跑出来的波形完全不对。实际上占空比和电压的关系是线性的D等于输出电压比上母线电压中间需要做一个归一化的换算。这个细节在后面模型搭建部分会再强调。1.3 四象限运行到底是什么意思用一张运行状态表说明关于“四象限”我在带学生的过程中发现很多人其实没吃透。它不是指电机能正转反转这么简单而是指电机在转速-转矩平面里可以工作在四个不同的区域。对照这张表就非常直观象限转速方向转矩方向运行模式能量流向典型场合第一象限正转正正向电动电源到电机正常驱动前进第二象限正转负正向制动电机回馈到电源减速第三象限反转负反向电动电源到电机驱动后退第四象限反转正反向制动电机回馈到电源反向减速在实际的Simulink模型里如果你只用单管PWM调制只有一个开关管斩波另一个常通那只能实现电机的单向调速制动靠切除电压让电机自由停车或者机械刹车速度环的快速响应根本谈不上。用H桥后通过互补PWM或者相位调制就能让系统时刻具备双向传递能量的能力。这也是这个课题选择四象限变换器的根本原因——速度控制系统要求的不只是能转还要能快速停、能反转这没有四象限拓扑是做不到的。2. 核心建模原理与数学方程解析2.1 永磁直流电机的数学本质要在Simulink里搭出靠谱的电机模型首先得把电机的数学方程吃透。永磁直流电机在他的建模里被简化成两个回路一个电枢电路一个机械运动方程。电枢回路的电压方程是Ua Ra * Ia La * dIa/dt E其中Ua是电枢端电压由四象限变换器提供Ra是电枢电阻La是电枢电感Ia是电枢电流E是反电动势和转速成正比E Ke * omega这里的Ke是反电动势常数数值上约等于转矩常数KtSI单位制下。我见过不少人在参数表里直接抄一个转矩常数然后反电动势常数随手填导致模型电磁关系对不上仿真结果不可信。正确做法是确认单位一致后两个常数取同一个值。机械运动方程是J * domega/dt Te - Tl - B * omegaJ是折算到电机轴上的转动惯量Te是电磁转矩Te等于Kt * IaTl是负载转矩B是粘滞摩擦系数。注意转动惯量这个参数如果你的系统里有减速机构或者外部负载盘必须把折算惯量算进去不然动态响应对不上实际系统。有了这两个方程Simulink模型其实就不难搭了用积分器构造状态变量电流和转速互相耦合一个反馈回路就出来了。这里可以完全不借助Simscape里面的现成电机模块亲手搭出来的好处是每个参数都能精确控制后面想改装成带扰动、带参数摄动的系统也方便。2.2 H桥四象限DC-DC变换器的两种调制方式H桥的建模也有讲究。标准的H桥有四个开关管分两个桥臂。想让电机正转开通对角线的一对管子反转就开通另一对。问题在于怎么调制才能得到平滑可控的电压。常用的是双极性PWM调制四个管子两两互补同一桥臂上下管绝对不能同时导通否则直通短路炸管。对角管同时导通相位差180度这样电机两端电压在正负母线之间切换输出电压的平均值由占空比决定。这种调制方式转矩脉动大一些但因为四个管子都在高频工作动态性能好调速范围宽在小功率永磁直流电机上用得非常多。另一种是单极性PWM调制一个桥臂的高频斩波另一个桥臂在换向时切换。输出电压只有正和零或者负和零两种状态转矩脉动小但需要更精细的逻辑控制。在仿真模型里我用的是双极性调制因为逻辑简单而且更容易直观看到四象限的能量反向流动。为了避免麻烦的管级开关模型导致仿真速度变慢我在这里做了分层处理上层是一个平均模型用受控电压源替代H桥输出而后续单独搭了一个封装好的开关级H桥子模块放在另一个仿真文件里做对比验证。这样既保证了速度闭环仿真的实时性又可以提供接近实物特性的开关级模型给需要分析纹波和损耗的人参考。2.3 PID控制器设计不要只接一个PID模块就完事Simulink自带的PID Controller模块用起来很方便但如果你只是把它的三个系数随便填一填多半得不到理想的调速效果。永磁直流电机速度环的特性和常见的纯惯性对象不太一样它本身就带一个积分环节电流产生转矩转矩积分为转速所以系统开环传递函数里已经有一个极点在原点。也就是说在速度环上PID只用P和I往往就足够了D用不好反而会放大测量噪声让系统抖振。我的做法是采用PI结构加前馈补偿。转速误差进入PI输出作为电流给定然后在电流环里再做一个简单PI输出作为电压给定。这种双闭环结构在实际工程里更为常见抗负载扰动能力强限流也方便。位置式PID公式在这个系统里可以写成u(t) Kp * e(t) Ki * ∫e(t)dt Kd * de(t)/dt但仿真里要注意的是纯微分项对误差突变非常敏感转速给定从一个值跳变到另一个值时微分项会瞬间输出一个巨大脉冲导致仿真发散。所以我一般要么不用微分项要么在微分前面加一个低通滤波器滤掉高频分量。在参数整定上我用的方法是先整定内环电流环把电流环带宽调高再整定外环速度环速度环带宽取电流环的1/5到1/10。这个比例关系不是拍脑袋定的而是从多环控制系统的稳定性理论里来的内外环带宽差小了两个环会互相影响容易产生振荡。3. Simulink模型搭建实操全过程3.1 从零开始搭建永磁直流电机子系统打开Simulink新建一个空模型我习惯先用一个子系统封装电机本体这样后面主电路和控制算法分开画面干净排查问题也方便。电机子系统的输入是电枢电压Ua和负载转矩Tl输出是电枢电流Ia和转速omega。这两个输入、两个输出放在一个子系统的端口上。构建过程如下第一步用电压源模块输入Ua减去反电动势E再除以电枢电阻得到稳态电流。但实际电流响应是有惯性的因为电感的存在所以不能直接除要加一个传递函数1/(La*sRa)来表示电枢回路的动态特性。第二步电流Ia乘以转矩常数Kt得到电磁转矩Te。Te减去负载转矩Tl和粘滞摩擦项B*omega得到的净转矩除以转动惯量J就是角加速度。第三步角加速度经过一次积分得到转速omega再经过一次积分得到转角theta如果只需要速度闭环theta可以不用但如果你以后要做位置控制这个输出一定要留出来。第四步转速乘以反电动势常数Ke得到反电动势E反馈回第一步的减法器。这里有个小细节我踩过坑Simulink里的积分器是有初始条件的。如果你默认初始值是0而负载转矩又不为0那么模型会先经历一段很长的启动过程因为电机要从零转速建立反电动势去平衡电枢电压。这本身没问题但如果你的PID参数不对电流会在启动阶段持续过大。所以我习惯在负载转矩端口加一个Step模块仿真的前1秒不带负载等转速建立稳定了再突加负载这样能清晰看到系统的抗扰能力。3.2 四象限DC-DC变换器建模的开关级实现电机本体的建模完成后接下来是整个系统里最有意思的部分——四象限DC-DC变换器。在Simulink里搭一个开关级H桥我在最简化的情况下只用了几个关键模块一个直流电源母线电压设为24V小功率直流电机系统的常见供电电压四个MOSFET管Simscape Electrical里的MOSFET模块或者直接使用Universal Bridge模块一个PWM发生逻辑电路。使用Universal Bridge模块可以省掉很多电力电子细节你只要设定好开关逻辑模块内部就会自动处理导通压降和续流二极管问题。但如果你希望更清晰地展示四象限工作原理我建议用四个离散的MOSFET模块和二极管模块自己搭一次哪怕以后不采用这个方案这个过程对理解换流路径的帮助是巨大的。桥臂控制逻辑是这样的PWM发生器产生两路互补的驱动信号同一桥臂的上下管分别接收。为了避免上下管直通在互补信号中间要插一段死区时间。Simulink里可以给PWM发生器设置死区时间也可以用Transport Delay模块模拟死区。死区时间在实际系统里是必需的在仿真里如果不加看起来也能跑但当你把控制算法代码生成到实际硬件上时不带死区的程序上电瞬间就可能炸管子。所以仿真模型里养成加死区的习惯是个非常重要的工程素养。输出电压Ua的表达式是这样的Ua (2*D - 1) * Vdc其中D是占空比范围0到1Vdc是母线电压。当D等于0.5时输出电压平均值为0电机不转D大于0.5正转电动D小于0.5反转或进入制动状态。这个线性关系在搭建平均模型时非常有用。3.3 双闭环控制器的内部结构搭建双闭环结构是这套系统稳定运行的灵魂。我搭了一个Speed_Control子系统和一个Current_Control子系统外加一个PWM调制模块。速度环的输入是转速给定和实际转速的误差输出是电流给定。电流给定经过一个限幅模块我设了限幅到电机额定电流的1.5倍防止启动电流太大。电流环的输入是电流给定和实际电流的误差输出是电压给定。电压给定除以母线电压得到PWM的占空比参考值。在这个参考值送入PWM调制之前还有一个关键问题要处理反电动势对电压余量的影响。电机转速升高后反电动势会占掉一部分电枢电压如果母线电压不够高电流环就会饱和速度环就失去了调节能力。所以PWM占空比限幅一般设在0.1到0.9给电流调节留出足够的裕量。PID模块的具体设置是这样的速度环Kp取0.5Ki取5Kd取0电流环Kp取2Ki取20Kd取0。这个参数的得出经历了手动整定和微调的过程不是从一开始就是这样的后面的问题排查里我会具体讲。3.4 完整的Simulink模型连接顺序与信号类型处理各个子系统搭好后把它们按信号流连起来。这里有一个非常容易出问题的点Simulink里的信号类型。Simscape Electrical的电力电子模块用的是物理信号走的是物理连接线蓝色而PID控制器、信号运算用的是常规的Simulink信号走的是信号线黑色。两条线之间必须加Simulink-PS Converter和PS-Simulink Converter做信号转换。我第一次搭的时候忘了加转换器一运行就报错提示端口类型不匹配排查了大半天才反应过来。另外因为Simulink底层是多速率系统PWM发生器的载波频率我设了10kHz而控制周期的采样频率是1kHz两者之间必然有速率差。我采取的办法是在控制器输出后面加一个Rate Transition模块把它从1kHz的离散域转换到PWM载波对应的连续域。这个模块的使用在双速率仿真系统里是绕不开的不加速率转换高速率模块输出的信号到了低速率模块里会产生混叠仿真波形会多出很多不该有的毛刺。整个模型搭好后从IHM的触发逻辑来看H桥的使用非常灵活如果需要快速减速可以先让D跳变到小于0.5的某个值使得电机两端电压反向电流反向流动能量从电机回馈到母线实现电气制动。这个过程在仿真波形上表现为电枢电流瞬间反向转速快速下降。4. 仿真结果分析与PID参数整定技巧4.1 从阶跃响应看系统的动静态性能模型搭好了参数设好了点击运行跑到Scope窗口看波形。我设置的目标转速是1000转每分钟0.5秒时给定阶跃从0跳到10001.5秒时突加50%额定负载。仿真的结果大致是这样的启动阶段速度环饱和电流环输出极限电压电机以最大电流加速大约0.3秒后转速到达目标速度环退出饱和电流回落到负载电流对应值。整个动态过程超调量在15%左右调整时间约0.35秒。加上负载后转速跌落约2%经过0.2秒恢复到给定值。这几个指标对于一个基础PID速度控制系统来说是可以接受的。如果你的系统对超调要求严格可以在启动时改用梯形速度给定曲线或者软启动给定把阶跃改为斜坡超调会显著下降。这个改变不仅是工程实践里的常见做法在Simulink里做起来也很简单就是把速度给定的Step模块换成Ramp模块或者Signal Builder模块。4.2 PID参数整定的“先P后I再微调”实操法关于PID参数整定我在这里分享一套自己用着很顺的步骤。它适用于大多数电机速度控制系统的仿真调参第一步把Ki和Kd都设成0只用纯比例Kp。从小到大慢慢增加Kp观察转速响应的振荡情况。当你看到系统刚好出现等幅振荡转速波形成标准的正弦形状时记下这个Kp值这个值大约是临界比例增益。第二步取Kp的经验值等于临界增益的50%到60%这样系统有足够的相位裕量不会持续振荡。第三步加入Ki。Ki的作用是消除稳态误差逐步增加Ki让响应速度变快。注意Ki太大会引起低频振荡典型表现是转速波形围绕给定值缓慢上下浮动周期在秒级。第四步如果系统存在高频抖振再考虑加Kd。很多情况下速度环的Kd设成0就够用了因为电流环本身已经给速度环提供了阻尼。我在实际调参中得到的系统参数是速度环Kp0.6Ki8Kd0电流环Kp2Ki20Kd0。仿真波形在满载突变时转速跌落不超过3%恢复时间约0.15秒这个表现在工程上已经算得很漂亮了。4.3 四个象限的仿真验证怎么做验证系统是否真正实现了四象限运行需要在仿真里给一个完整的工况序列。我设计的序列是这样的0到1秒给定转速1000rpm系统正向电动运行电流为正。1到1.5秒给定转速减为0系统进入正向制动状态电流反向能量回馈。1.5到2.5秒给定转速变为-800rpm电机反转电流为负反向电动。2.5到3秒给定转速回升到0系统反向制动电流反向但此时转速负负得正能量再次回馈。在四象限DC-DC变换器作用下整个过程中母线电流的方向会不断改变这个仿真验证了你搭的H桥在逻辑上确实支持真正意义上的能量双向流动而不只是简单的正反转切换。通过Scope里电枢电流波形和转速波形的对应关系就能判断运行状态处在哪个象限。4.4 母线电压波动对系统的影响分析接下来我特意做了个额外测试在母线电压上加了一个±10%的波动用来模拟电池供电时的电压跌落或者电网波动。这个测试很有现实意义因为很多实际系统的供电都不是理想电压源。测试结果显示母线电压的波动会直接干扰电机端电压造成转速波形和电流波形出现纹波。单纯靠PID控制器去抑制这种扰动效果其实有限因为电压波动本质上进入了系统模型的前向通道PID要靠误差信号才能做出反应此时扰动已经对输出产生了影响。想要真正扛住母线电压扰动需要引入前馈补偿实时采集母线电压把PID输出的电压给定除以实际的母线电压得到精确的占空比指令。这个除法关系在模型里就一行加一个Divide模块就能搞定但它对系统抗压波动能力的提升是质的飞跃。这就是为什么实际工程控制系统里电压前馈几乎是标配。5. 常见问题与排查技巧实录5.1 仿真发散最常见的原因和快速定位方法做电机控制仿真仿真发散是新手遇到最多的问题。现象是运行到某个时刻波形直接变成巨大的锯齿或者NaN值。这个问题我在自己的模型里也遇到过好几次定位原因的顺序基本是固定的。第一步检查代数环。如果模型里存在信号直接从输出绕回输入、中间没有经过任何延迟模块的情况Simulink求解器可能无法收敛。H桥这种包含反馈的电力电子系统特别容易产生代数环。解决办法是在反馈路径上加一个小延时单位延迟模块或者把它放到离散求解器下处理。第二步检查PID参数。积分系数过大导致的发散很常见表现是低速抖动逐渐变大最终引爆数值计算。调试手段是临时把所有PID增益归零确认系统稳定后再逐步加回参数。第三步检查求解器设置。Simulink默认的变步长ode45求解器对于含有高频PWM的系统往往效率很低而且容易在开关动作点产生数值振荡。我建议改用离散求解器固定步长设在PWM周期的十分之一左右也就是1e-5到1e-6秒。这样仿真稳定性明显改善虽然单次运行时间变长了但至少结果靠谱。5.2 电枢电流反向不明显四象限功能验证失败有读者在按照类似方案搭建后跟我反映说自己的H桥模型只看到正转和反转看不到电流反向制动过程不明显。这个问题的根源在于控制逻辑里缺少一个关键的“回馈路径”。如果你在PWM调制时让四个开关管在电动和制动状态下始终保持同样的开关逻辑电动车模式下的续流电流只是通过下管续流电机能量被消耗在电枢电阻上没有真正回馈到电源。要看到明显的电流反向制动时必须有对角的功率管处于导通状态让电机反电动势直接经过母线电容和电源形成回路。解决的办法是在速度误差为负的时候主动把占空比D调整到小于0.5这样H桥的输出平均电压反向电机制动电流才会真正反向。我在模型里加了一个“换向逻辑”模块根据速度误差符号和当前运行状态实时切换PWM模式这个模块让四象限制动效果立刻变得清晰了。5.3 PWM死区时间设置不当导致的电流奇异死区时间看起来是个小参数但在仿真里它同样不可忽视。不设死区的模型如果你的开关管是理想开关运行当然没问题但一旦你换了更接近实际的MOSFET模型带导通电阻、带寄生电容上下管几乎同时导通就会出现巨大的短路电流尖峰。我的经验是在PWM发生器里给同一桥臂上下管的互补信号设置一个2到3微秒的死区。在10kHz载波下这个死区大约占开关周期的2%到3%对输出电压平均值的影响约0.1V以内完全可以接受。但换来的却是模型适应性的巨大提升你后面把这个模型里的控制器代码生成到单片机时这块逻辑可以直接复用不用大改。5.4 从仿真到硬件移植时的三个关键差异最后再说一个容易被忽略但很重要的问题仿真模型和实际系统的差距。好多人在Simulink里跑得很漂亮一到硬件上就不对往往就是忽略了这三个差异。第一个差异是采样时间。仿真里你是连续域的还是离散域的直接影响你后续的代码生成。如果你从一开始就打算移植硬件建议PID控制器直接用离散域的PID模块带Z变换形式采样周期与实际控制周期一致这样代码生成的C代码几乎可以无缝移植。第二个差异是传感器噪声。仿真里的转速测量是理想无噪声的而实际编码器或测速发电机的信号必然有噪声。PID的微分项对传感器噪声特别敏感所以硬件系统里很少直接用纯微分项一般用带一阶低通滤波的微分器或者在离散PID模块里屏蔽D项。第三个差异是限幅保护。Simulink模型里如果电流超过额定值最大值系统还在继续运行只是波形不太好看硬件上过流超过几个毫秒功率器件就烧了。所以模型里电流限幅、欠压保护、过热保护这些逻辑都应该提前留好接口哪怕仿真阶段不激活这些保护接口位置要预留出来。6. 扩展方向与个人实操体会6.1 这个模型还可以怎么改四象限直流电机速度控制系统的模型搭好之后它本身就像一张画布后续可以往很多方向扩展。如果你想往无刷直流电机方向走只需要改电机本体子系统的数学模型把电枢回路的方程换成三相绕组的方程增加霍尔传感器逻辑H桥换成三相全桥速度环和电流环的控制框架几乎不用动。也就是说这个项目提供的双闭环框架是广泛应用的有力起点。如果你想研究更先进的控制算法可以在速度环上做文章。滑模控制、自抗扰控制、模糊PID都可以和现有的电流环无缝衔接。我曾经在这个模型上用滑模速度环替换PI速度环仿真对比下来抗负载扰动能力的提升很明显转速跌落的幅度能减少三成左右。这个结论让我确信基础模型的意义不只是一个作业或一个演示而是进一步开展研究的高效平台。如果你有兴趣做硬件在环测试可以选择把控制算法部署到实时仿真机上把四象限DC-DC和电机本体放在另一台实时机里模拟两个机器之间通过模拟量交互。整个过程的关键和仿真阶段的核心逻辑一致因为模型阶次这么低做实时仿真其实运行得非常流畅。6.2 建模仿真的最终心得把我个人的体会放在最后说。做仿真项目最重要的不是会拖几个模块而是理解你拖出来的每一个模块背后代表的物理过程和控制逻辑。这个模型看起来简单但它打通了一条很完整的链路从电机的电磁方程到功率变换器的开关逻辑到控制器的参数设计再到仿真波形的解读。这条链路在工程上非常通用结构变了、电机变了、控制算法变了链路的骨架是不变的。如果你愿意多花三个小时把这个模型里的每个子系统都点开看一遍把每条反馈线都在草稿纸上画一遍然后再动手复现一遍我保证你对电机控制的理解会有一次质的飞跃。仿真不是终点它是你看穿工程系统如何运转的一盏放大镜。最后再分享一个调试技巧在PID反馈回路里如果你怀疑某个环节设置错了最快定位的办法是把闭环断开直接给一个开环的固定占空比观察电机的开环响应是否和理论一致。开环不对是模型问题开环对、闭环不对那问题一定在控制器或反馈回路。这套排查方法在我做的几乎所有电力电子仿真项目里都有效希望你也用得上。
返回列表