先交代一下背景:我这次仿真针对的是一台 48V、3000rpm 的小型无刷直流电机,目标是验证双闭环控制在稳定运行和制动两种工况下的表现。做之前我本以为难点在 PI 参数上,结果真正折腾人的是调制方式——同样一套参数,换了 PWM 调制策略之后,电流波形、母线电压、制动效果完全两个样。这篇文章就把整个过程拆开讲,从建模到调参再到工况实验,把那些仿真文档里不会写、但实测一定会踩的细节一并说清楚。适合正在搭无刷电机仿真模型的学生、刚入门电机控制的工程师,以及对六步换相调制方式有疑惑的人。
1. 双闭环架构与调制探索的整体思路
1.1 双闭环为什么是标配:转速环和电流环的分工
无刷直流电机的控制核心是转矩,而转矩又和电流直接挂钩。双闭环的做法是在内层用一个电流环快速控制绕组电流,在外层用一个转速环负责把实际转速拉向给定值。转速环的输出不直接给 PWM,而是作为电流环的参考值——也就是说,转速偏差越大,转速环给出的电流指令就越大,电流环再根据这个指令去调节占空比。
两个环的响应速度必须有明显差距。电流环要快,因为绕组电感限制了电流的变化速率,如果不及时控制电流,启动瞬间很容易冲出很大的冲击电流;转速环可以慢,因为它面对的是机械惯量,本身响应周期就长。我的做法是让电流环带宽保持在 1~2kHz 左右,转速环带宽取 100~200rad/s,两者拉开十倍左右的差距,避免内外环耦合振荡。
经验之谈:先整定电流环,再整定转速环。电流环没调稳之前,转速环输出再准也没用,因为内环的不稳定会被外环放大成低频振荡。
1.2 调制方式为什么值得单独研究
无刷直流电机最常见的控制是 120° 两两导通,也就是俗称的六步换相:任意时刻只有两相导通,第三相悬空。但“导通”并不等于上下桥臂直接接电源正负,中间还夹着一个 PWM 斩波过程。斩波方式不同,续流路径就不同,续流路径不同,电流纹波、换相尖峰、制动时的能量回馈路径全都不一样。
常见的半桥调制有两大类:一类是上桥臂 PWM、下桥臂恒通,我统一叫 H_PWM-L_ON;另一类是上桥臂恒通、下桥臂 PWM,我统一叫 ON_PWM。不同资料里叫法很乱,有的叫 HPWM-LON,有的叫 PWM-ON,但本质上就是问一句:斩波管放在上面还是下面。这个选择在电动工况下影响可能不太明显,但在制动工况下,续流回路的差异会被放大——能量是回到母线还是被电感续流吃掉,直接决定了母线电压会不会泵升、制动电流能不能稳住。
所以我这篇博文的核心思路就是:固定电机参数和 PI 参数,只切换调制方式,把稳定运行和制动工况都跑一遍,用波形说话。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 仿真建模:电机本体、换相逻辑与控制器实现
2.1 电机数学模型与仿真参数设定
无刷直流电机建模的关键是反电动势波形。和永磁同步电机的正弦反电动势不同,无刷直流电机的反电动势是梯形波,平顶宽度大约 120° 电角度,这样才能在 120° 导通期间保持转矩相对恒定。建模时用基于反电动势查表法的方式实现,比用 Simscape 里的现成模型更灵活,因为后续想看调制细节时,内部换相逻辑不会被封装挡住。
电机参数我直接列出来,后续所有波形都基于这组参数:
| 参数 | 数值 | 备注 |
|---|---|---|
| 额定电压 | 48V | 直流母线电压 |
| 额定转速 | 3000rpm | 机械角速度约 314 rad/s |
| 极对数 | 4 | 电角度频率为机械频率 4 倍 |
| 相电阻 | 0.4Ω | 每相绕组电阻 |
| 相电感 | 0.6mH | 每相绕组电感 |
| 反电动势系数 | 0.045 V·s/rad | 相电动势峰值 / 机械角速度 |
| 转动惯量 | 1.5e-4 kg·m² | 转子加负载折算 |
| 额定负载转矩 | 0.25 Nm | 对应约 78W 输出功率 |
两相导通时,动态电压方程可以写成:
u_dc × d = 2Ri + 2(L - M)di/dt + 2e
这里的 d 是占空比,L - M 是考虑了互感的等效相电感。仿真模型里直接写这个方程即可,不用去搭复杂的磁链方程,六步换相本身就决定了绝大多数时间只有两相在工作。
2.2 逆变器与六步换相逻辑
逆变器部分我用了理想开关管加反并联二极管的方式。理想开关管速度快,不会引入开关损耗,适合先验证控制逻辑;等确认逻辑没问题,想研究换相尖峰的细节,再把 IGBT/MOSFET 的导通压降和开关暂态加进去。
霍尔传感器按 120° 间隔安装,六个转子位置对应六组开关状态。我给出一张我自己常用的导通逻辑表(以 A+B- 表示 A 相上桥臂导通、B 相下桥臂导通):
| 霍尔组合 | 导通相 | 上桥臂开通管 | 下桥臂开通管 |
|---|---|---|---|
| 101 | A+B- | Q1 | Q6 |
| 100 | A+C- | Q1 | Q2 |
| 110 | B+C- | Q3 | Q2 |
| 010 | B+A- | Q3 | Q4 |
| 011 | C+A- | Q5 | Q4 |
| 001 | C+B- | Q5 | Q6 |
注意:这张表不是唯一答案。不同绕组定义、不同霍尔安装角度下,相序可能完全相反。最稳妥的办法是先让电机拖转,对照反电动势波形和霍尔跳变沿去修正顺序,别直接照抄别人的表。
换相逻辑在 Simulink 里我用一个 Stateflow 或者纯逻辑模块搭都行。我习惯用真值表模块,六个输入状态对应六个输出状态,输出直接给到 PWM 调制模块,和 H_PWM-L_ON、ON_PWM 的斩波信号做与逻辑合成,最终生成六个开关管的驱动脉冲。
2.3 双闭环控制器与 PI 参数整定方法
电流环整定我用的典型 I 型系统方法,核心思路是把电流环的被控对象近似成一阶惯性环节,用 PI 的零点去对消电机绕组的极点。对消条件是积分时间常数约等于电气时间常数:
Ti = L / R = 0.6mH / 0.4Ω = 1.5ms
然后按期望的电流环带宽来定比例系数。我希望电流环的截止频率在 2000rad/s 左右,于是:
Kp ≈ L × ω = 0.6e-3 × 2000 = 1.2
Ki = Kp / Ti ≈ 800
这个结果只是初值,Simulink 里再用 PID Tuner 微调一轮。速度环这边,把电流环等效成一阶惯性环节之后,机械对象的传函就只剩转动惯量和阻尼。转速环带宽我取 150rad/s 左右,初值给 Kp = 0.1、Ki = 5,然后再根据阶跃响应微调。
限幅是双闭环的命门。转速环输出要限幅,也就是电流参考值的上限:我设为 ±10A,这是额定电流的两倍左右,给启动和制动留足裕量。电流环输出同样要限幅,对应占空比范围 0~1,同时在积分支路上加抗积分饱和处理,否则启动阶段转速偏差大,积分项闷到顶,等转速到位了积分退不出来,系统必超调。
3. 稳定运行工况仿真:启动、突加载与调制对比
3.1 启动阶段的电流限幅与积分饱和处理
先看启动过程。给定转速直接给 3000rpm 阶跃,转速环瞬间输出会冲向限幅值,电流环参考直接打到 10A,这其实是正常的——有电流内环在,冲击电流不会失控,但波形会很难看,转速上升段电流一直顶在限幅值上,直到转速逼近给定值才开始回落,期间会伴随明显的超调。
我的做法是给转速参考加一个速率限制器,也就是斜坡启动。比如每秒限 3000rpm,电机从 0 到 3000rpm 大概用时 1 秒,期间电流被限制在 6A 左右,平稳得多。这个斜坡速率要配合电流限幅值来选:斜坡太陡,电流还是会顶上限幅;斜坡太缓,启动时间浪费。我一般先算期望的最大加速度,反推需要的启动电流,再倒推斜坡斜率。
启动阶段还有个容易忽略的细节:转速环的积分器在斜坡启动期间也一直在累积。如果抗积分饱和做得不好,到了额定转速附近,控制器会因为积分残留而超调 10% 以上。Simulink 里我给积分器加了限幅,限幅值和输出限幅一致,并且用 conditional integration 方式,只在输出没饱和时才允许积分更新。
3.2 负载突变下的双闭环响应过程
稳定运行工况的第二项实验是突加负载。仿真时间线我这样安排:0~0.5 秒空载启动并稳定在 3000rpm,0.5 秒瞬间加载到 0.5Nm,观察转速跌落和恢复过程。
从波形上看,负载突加瞬间,电机转速开始往下掉,转速环立刻把电流参考往上抬,电流环跟随参考值迅速增加电磁转矩,阻止转速继续下跌。整个过程中电流环的响应几乎是瞬间完成的,你会在示波器上看到电流几乎是跟着参考值贴在一起的台阶;转速环则呈现出典型的二阶系统响应,有一定的动态跌落和恢复时间,最终通过积分作用消除稳态误差。
这组波形恰好说明内外环带宽拉开的重要性:如果电流环不够快,加载瞬间电流跟不上,转速会掉得更深;如果转速环太快,又会在恢复过程中产生几次振荡。我跑这组实验的实测数据是:加载后转速最大跌落约 80rpm,恢复时间约 0.3 秒,之后稳态误差为零。
3.3 H_PWM-L_ON 与 ON_PWM 在稳定运行时的波形差异
把同一组 PI 参数分别配 H_PWM-L_ON 和 ON_PWM 跑稳定运行,差异主要在细节上。下面这个表是我从波形里实测出来的对比:
| 对比项 | H_PWM-L_ON | ON_PWM |
|---|---|---|
| 电动时关断续流回路 | 下桥臂反并联二极管续流,电流在绕组和低频侧循环 | 上桥臂恒通管保持导通,关断时续流经上桥臂二极管回母线 |
| 相电流纹波 | 中高速下略小,波形更整齐 | 纹波略大,换相缺口更明显 |
| 换相转矩脉动 | 换相期间有凹坑,但幅度相对小 | 换相缺口略大,低速时更明显 |
| 功率管发热分布 | PWM 损耗集中在上桥臂 | PWM 损耗集中在下桥臂 |
| 母线电压冲击 | 电动时差异不大 | 电动时差异不大 |
稳定运行时,这两种调制方式的平均转矩和转速表现几乎一致,差别主要体现在纹波和管子发热分布上。如果你的应用场景对电流纹波敏感,或者想减小换相噪声,H_PWM-L_ON 会稍微占优;如果考虑散热设计,希望把开关损耗集中到低压侧便于统一贴散热器,那 ON_PWM 更好布置。
不过稳定运行不是这次仿真重点,真正的差异要到制动工况才显出来。
4. 制动工况仿真:能量回馈、母线泵升与调制策略对比
4.1 两种典型制动工况的仿真设计
制动工况我分两种来跑。第一种是减速制动:电机稳定在 3000rpm,0.5 秒时把转速指令阶跃降到 1000rpm,此时速度环输出会变成负的电流参考,电机进入发电状态,电磁转矩反向,把动能转换成电能。第二种是紧急制动:0.5 秒时把转速参考直接改到 0,让电机以最大允许电流减速到停转。
仿真里要注意速度环输出的双向性。很多模型只给转速环输出设了正向限幅,负向没设,导致减速时电流参考被钳在 0 附近,电机根本制不住。正确做法是正负对称限幅,正向给 +10A,负向给 -10A,这样减速力矩和启动力矩能力相当。
减速制动时你会看到很有意思的现象:转速线性往下掉,电流稳定在负限幅值附近,母线电压开始爬升。这是因为电机在制动状态下相当于一个升压源,反电动势通过逆变器向母线电容充电,如果母线侧没有泄放通路,电容电压就会持续上升。紧急制动时这个过程更剧烈。
4.2 制动电流回路与调制方式的关键差异
这就是标题里说的“调制探索”的核心部分。制动时电流方向和电动时相反,续流路径也就和电动时“互换”了。
我用 H_PWM-L_ON 跑紧急制动时,母线电压从 48V 一路冲到 63V 左右,而且还在慢慢涨——直到我手动把仿真停掉,因为电容电压继续涨下去,模型就会出数值问题。换成 ON_PWM 之后,同样条件下母线电压只升到 54V 左右,涨幅小得多。
为什么差这么多?关键在关断瞬间的续流去向。H_PWM-L_ON 在上桥臂做斩波,制动电流反向时,斩波管关断的瞬间电流会经上桥臂反并联二极管直接回灌母线电容,能量“实时”地泵回母线,母线电压自然涨得快;ON_PWM 在下桥臂做斩波,关断瞬间续流走的是绕组和桥臂内的环流路径,先被电感储存消化一轮,回馈母线的能量比例小一些,母线泵升也就更缓和。
这个现象说明一个问题:调制方式选择的本质是在选能量的分配路径。你希望制动能量快速回馈到母线,那 H_PWM-L_ON 响应更直接;你希望母线电压冲击小、系统更安全,那 ON_PWM 更有优势。没有绝对好坏,只有适不适合你的应用场景。
从制动响应速度看,H_PWM-L_ON 的制动电流建立更快,减速制动距离更短;ON_PWM 虽然母线冲击小,但制动电流带有一点滞后,制动时间稍微长一点。这个差异在紧急制动场景下尤其要权衡:设备的急停需求优先,还是驱动器过压保护优先。
4.3 母线电压泵升问题的仿真处理
母线电压泵升不是仿真专有的问题,真实系统更严重——如果不加处理,电容会被充爆,驱动器会过压保护停机。仿真里如果不处理,表现为电压一路飞涨,最后数值发散、仿真报错。
我在这套模型里加了制动泄放电路模型:母线电容并联一个开关电阻,用滞环比较器控制。电压超过 52V 时接通泄放电阻,电流通过电阻把多余能量转化成热量,电压回落到 46V 时断开,避免频繁开关。仿真参数上,母线电容取 470μF,泄放电阻取 10Ω,泄放功率按母线电压 52V 计算约 270W,对这个功率等级的电机足够。
加泄放电路前后对比非常明显:加了之后,紧急制动时母线电压只会在 46~52V 之间小幅波动,转速照常减到零,制动电流也稳定在限幅值附近;不加的话,制动过程最后几毫秒就会因为计算发散而中断。所以我的建议很直接:凡是做制动工况仿真,第一步先加泄放电路模型,否则后面全是浪费时间。
5. 常见问题与排查经验实录
5.1 启动失败、反转与飞车问题
启动阶段最坑的问题是电机反转。多数原因是换相逻辑表的霍尔组合和反电动势波形对不上,导致本该导通的相序错了 60° 电角度,电磁转矩方向反了。排查方法我在前面提过:手动给一个极低转速拖动电机,记录三相反电动势波形和三个霍尔信号的对应关系,再对照你的导通逻辑表逐项核对。
还有一个常见问题是启动爬行——给定转速很久提不上去,电流也上不来。这通常不是控制器问题,而是启动斜坡斜率太小,或者电流限幅值设置得太保守。我一般把启动斜坡设到 3000rpm/s 以上,电流限幅至少给额定电流的 2 倍,稍微激进一点没问题,反正有电流环兜底。
5.2 换相尖峰与转矩脉动
120° 导通方式在换相瞬间,非导通相续流会造成关断相电流拖尾,导通相电流又刚开始建立,电磁转矩会短暂跌落,形成周期性的转矩凹坑。这个凹坑在低速重载时特别明显,表现为转速波动和噪声。
调制方式对换相尖峰影响很大。我实测对比下来,H_PWM-L_ON 在换相瞬间的尖峰电压略高,但电流拖尾时间短;ON_PWM 尖峰电压略低,但非导通相续流时间更长。具体取舍看你更在意 EMC 还是转矩平稳性。如果两种都不满意,下一步可以考虑换相角前移补偿,或者在换相瞬间临时提高占空比来补偿转矩跌落,这是六步换相控制的经典优化方向。
5.3 制动电流失控与仿真发散
制动工况最容易出现的两个问题:一是电流没有按负限幅走,而是来回震荡;二是仿真跑着跑着直接报错发散。前者多半是速度环饱和处理问题——正负限幅不对称或者抗积分饱和没做好;后者基本都是母线电压泵升导致的数值发散,因为电容电压不受控,状态量持续增大。
排查制动电流震荡时,我建议先把时间步长调小一个数量级跑一遍,排除数值稳定性问题;如果步长缩小后波形恢复正常,说明是模型离散化步长太大,开关切换瞬间的状态跳变没有被捕获到。如果缩小步长后依然震荡,再去查速度环 PI 和限幅。
一些收尾的个人体会
整个项目做下来,我最深的感受是:双闭环只是让电机“能稳定跑”的基础,真正决定系统性能上限的往往是那些不起眼的细节,比如调制方式、续流路径、母线能量管理。而且我发现一个挺实用的习惯——调 PI 参数之前,一定先把调制方式定下来。同一套 PI 参数,配上不同调制方式,表现差异非常大;换个调制方式回头再看之前调好的参数,可能又需要重新调。先定调制、再调 PI,能少走很多弯路。
另外再分享一个小技巧:做这类双闭环仿真时,先用平均值模型(忽略开关纹波、把逆变器等效成连续电压源)把双闭环 PI 调通,再切换到带 PWM 开关的精细模型去研究调制细节。平均值模型跑得快,能快速确定 PI 的大致范围;精细模型跑得慢,但能看到真实的电流纹波和换相过程。两个模型配合使用,比一开始就在精细模型里痛苦调参高效太多。
如果后续想继续往深处做,可以试试把六步换相改成无感反电动势过零检测,或者把电流环从 PI 换成滞环控制,再看看制动工况下的表现——每种改动打开的思路都不太一样,足够再写一篇长文了。
