基于BP神经网络转矩观测器的开关磁阻电机直接转矩控制方法
2026/9/19 17:21:47 网站建设 项目流程

简介:开关磁阻电机运行中常伴有明显转矩脉动,直接转矩控制能有效抑制,但传统公式计算转矩过程复杂。该PDF文献提出一种基于BP神经网络的直接转矩控制建模与仿真方法:通过有限元仿真获取训练数据,经离线训练得到输入量到转矩的非线性映射,从而以BP神经网络预测取代复杂转矩计算,并配合磁链估算与滞环控制完成直接转矩控制。资源为一份PDF文档,约2.59MB,内容来自2020年《电子器件》期刊,作者李玉峰等,包含理论推导、控制策略设计、仿真与实验验证,适合电气工程、电机控制方向的研究生、工程师及科研人员参考。已有129人学习,读者可借鉴其神经网络建模思路、数据获取与训练方法、以及转矩脉动抑制的完整实现框架,用于相关课题研究或工程应用。

1. 开关磁阻电机的转矩脉动:直接转矩控制为什么卡在转矩观测

开关磁阻电机(SRM)的转矩脉动问题,很大程度上是结构决定的:定子、转子都是凸极,相电流又是脉冲式的,磁路饱和严重,瞬时转矩和母线电压、相电流、转子位置之间呈现强非线性关系。直接转矩控制(DTC)可以显著压住脉动,但这个策略里最棘手的一环不是电压矢量选择,而是实时转矩的获取——查表法在大功率电机上数据量大得离谱,解析法又因为磁路饱和而精度差、计算重。这篇论文的方案是把转矩观测直接替换成BP神经网络,用有限元仿真数据做离线训练,在线运行时只做前向推理。实验结果是四相8/6样机上转矩波动从电流斩波控制(CCC)下的12 N·m压到0.8 N·m。对电机驱动、电力电子或控制算法的工程师来说,整套流程——有限元采样、网络训练、Simulink闭环、DSP移植——每一环都有可抄的工程细节。

2. 直接转矩控制框架与BP神经网络转矩观测器的替代逻辑

2.1 从磁场定向控制到定子磁链定向:DTC省掉了哪些环节

传统磁场定向控制(FOC)要先做坐标变换,把三相静止坐标系变换到旋转坐标系,再对d、q轴电流解耦,整套算法对电机参数的依赖性很强。SRM是双凸极结构,绕组电感和转子位置的关系本身就是非线性周期函数,用FOC那套坐标变换去描述,模型复杂度反而被放大。DTC的思路是把转子磁通定向换成定子磁链定向,不做Clarke/Park变换,直接通过实时检测电压和电流来估算磁链与转矩,再与给定值比较,由转矩滞环和磁链滞环输出数字信号,最终通过开关表选择空间电压矢量。

整个控制框架里,滞环比较器输出的是两个数字量:转矩滞环输出τ,磁链滞环输出φ,1表示需要增大,0表示需要减小。四个组合对应开关表中不同的电压矢量选择。参考电压矢量的作用方式可以参考下表,具体矢量编号依功率变换器拓扑和定子磁链扇区而定。

转矩滞环输出τ磁链滞环输出φ控制意图
11转矩偏小、磁链偏小:需要增转矩并增磁
10转矩偏小、磁链偏大:需要增转矩并弱磁
01转矩偏大、磁链偏小:需要减转矩并增磁
00转矩偏大、磁链偏大:需要减转矩并弱磁

DTC对电机参数的依赖度低,但代价是转矩反馈必须准确、延迟低。滞环比较器本身不关心转矩是怎么算出来的,它只拿估算转矩和给定转矩做差。因此转矩观测器就变成了DTC性能的天花板。

2.2 转矩观测的两种传统方案与其适用边界

SRM转矩观测常用的方案是查表法和解析法。查表法通过有限元计算或静态实验得到转矩-电流-位置三维表,运行时用当前电流和位置角直接查表。小功率电机上这个表不算大,查起来快;换成大功率电机,为了精度要把表做得很密,数据量爆炸,查询速度直接拖累转矩环实时性。

解析法走的是磁链-电流轨迹路线。在磁路不饱和的理想情况下,可以把磁链写成电流和转子位置的函数,转矩通过磁链对位置的偏导求出来。论文里给出的近似式是 Te ≈ i·∂Ψ(θ,i)/∂θ,其中忽略了磁共能储能变化项,因为在饱和状态下这一项很小。但问题在于∂Ψ(θ,i)/∂θ本身还需要磁链模型的解析表达式,饱和越严重,这个函数的非线性越强,在线计算偏导数的开销越大,实时性很难保证。

这两种方案的共同痛点是:要么存储空间换时间,要么在线计算换精度。而BP神经网络提供的是第三条路——离线把非线性映射学进权重里,在线只做矩阵乘法和激活函数。

2.3 BP网络替代转矩计算的逻辑与数据来源

BP神经网络是一种多层前馈网络,通过误差反向传播调整权重,理论上有逼近任意连续非线性函数的能力。用在转矩观测上,网络的输入选可测量的母线电压和母线电流,输出是瞬时转矩,中间经过两个隐含层。训练数据来自有限元仿真:在电流0~90 A、电压0~150 V范围内扫描,得到若干组电压-电流-转矩样本对。离线训练完成后,网络权重固定,在线推理时不再需要求导、不需要查大表。

工程上这个替换是划算的:离线训练花几分钟甚至几十分钟都可以接受,在线推理只涉及矩阵乘法和sigmoid函数计算,DSP上开销完全可控。而且BP网络具备泛化能力,训练覆盖不到的中间工况,网络输出是平滑插值,不会像查表法那样出现台阶跳变。

仿真建模的第一步先把电机参数固化成脚本,所有后续模块共用同一组参数,避免模型和实验台对不上:

% 四相8/6 SRM 参数定义(与论文表1一致,作为Simulink电机模块参考值) Udc = 120; % 直流母线电压,单位V imax = 10; % 最大相电流,单位A flux_max = 0.486; % 最大磁链,单位Wb Rs = 3.1; % 定子绕组内阻,单位Ω J = 0.0089; % 转动惯量,单位kg·m^2 kf = 0.01; % 摩擦系数,单位N·m/(rad/s) Ld = 23.6e-3; % 完全对齐位置电感,单位H Lq = 5.9e-3; % 完全不对齐位置电感,单位H

这组参数在有限元模型、Simulink的Switched Reluctance Motor元件和实验样机里保持一致,是后面所有结果可复现的前提。Udc取120 V,训练数据电压范围取0~150 V就是为了覆盖实际母线电压波动区间。

3. 搭建BP转矩观测器:网络结构、LM算法训练与权重导出

3.1 输入输出怎么选:母线电压与母线电流的物理意义

转矩观测器选输入量时,思路是先看哪些量在控制系统中已经存在,且能间接决定转矩。母线电压U决定相电流的上升速率,母线电流I直接对应绕组安匝数,二者合在一起能反映当前磁链状态和电磁转矩水平。转子位置信息不会直接作为输入,因为有限元训练数据里已经通过不同转子位置的扫描把位置影响隐含在电流-转矩关系中。位置角对转矩的影响,网络在训练时通过样本覆盖来学习,不需要显式输入。

输出层只有一个节点,就是瞬时转矩Te。这里没有把转矩先分相再合并,而是直接做总转矩回归。原因在于DTC控制的是总电磁转矩,不需要知道每一相各自贡献多少,网络输出的总转矩直接进滞环比较器。

3.2 网络拓扑与激活函数的工程取舍

论文采用的网络结构是2-10-2-1:输入层2个节点,第一隐含层10个节点,第二隐含层2个节点,输出层1个节点。隐含层激活函数用sigmoid族,输出层用f(x)=x的线性激活。设计思路是:第一隐含层用较多节点做非线性特征提取,第二隐含层压缩维度,最后线性输出。

神经元数量不是拍脑袋定的。太少,拟合曲线太平滑,磁饱和区的转矩误差压不住;太多,DSP上每次前向计算的乘法次数线性增加,控制周期内算不完。10+2的组合是在保证精度的前提下扫描出来的折中。实际复现时,换电机或换工况后不要照抄这个数字,应该从少到多试一遍,画出误差随节点数的变化曲线,找拐点。

3.3 LM算法训练与权重导出

训练算法选Levenberg-Marquardt(LM)法,它结合了梯度下降的全局收敛特性和牛顿法的局部快速收敛特性,在权值数量不庞大的场景下收敛速度远快于普通梯度下降。训练数据由有限元仿真得到,格式为“电压-电流-转矩”三元组。训练目标设为1e-5的均方误差,最大迭代5000次。训练完成后把权重和偏置矩阵导出来,供Simulink模块或DSP工程导入。

核心训练代码和注释如下:

% BP转矩观测器训练:输入P(2×N),目标T(1×N) P = [U_bus; I_phase]; % U_bus:母线电压样本,I_phase:母线电流样本 T = Torque_samples; % 有限元仿真得到的瞬时转矩样本 net = newff([0 150; 0 90], [10 2 1], ... {'tansig','tansig','purelin'}, 'trainlm'); net.trainParam.epochs = 5000; net.trainParam.goal = 1e-5; net.trainParam.min_grad = 1e-7; net.trainParam.showWindow = true; [net, tr] = train(net, P, T); % 导出权重与偏置,供Simulink模块或DSP工程使用 w1 = net.IW{1}; b1 = net.b{1}; w2 = net.LW{2,1}; b2 = net.b{2}; w3 = net.LW{3,2}; b3 = net.b{3}; save('BP_torque_net.mat', 'w1','b1','w2','b2','w3','b3');

参数说明:newff第一个参数是每路输入的范围,电压0~150 V、电流0~90 A,覆盖有限元样本所在区间;[10 2 1]依次对应两个隐含层和一个输出层的节点数;'trainlm'指定LM算法;epochs=5000是迭代上限,实际可能在几百次就收敛,以tr记录为准。导出的w1、w2、w3就是论文中公开的那几组权重矩阵,复现时可以作为收敛结果的对照参考。

关键一点:newff默认会做输入输出的归一化映射,但导出权重后,离线推理时的归一化需要自己处理。常见做法是把训练集的电压、电流min/max值存下来,部署时先归一化再进网络,输出后反归一化得到物理转矩。

网络结构与训练参数汇总如下:

配置项取值说明
输入层节点数2母线电压、母线电流
隐含层1节点数10激活函数tansig
隐含层2节点数2激活函数tansig
输出层节点数1激活函数purelin
训练算法trainlmLevenberg-Marquardt
最大迭代次数5000实际收敛点看tr
训练样本来源有限元仿真I∈[0,90]A、U∈[0,150]V
训练目标1e-5均方误差

训练完成后,用测试集绘制观测转矩与实际转矩的误差曲面。论文给出的误差基本小于5 N·m,这个量级对工程控制来说是可以接受的。误差偏大的区域通常出现在电流接近上限、磁路深度饱和的工况,正好印证了训练数据边界以外不要轻易外推。

4. Simulink建模与仿真:BP-DTC闭环的模块搭建和转速响应复现

4.1 系统模块划分与电机参数配置

在MATLAB/Simulink环境里搭建调速系统时,电机本体直接使用电力系统工具箱中的Switched Reluctance Motor元件,四相8/6结构,参数按之前脚本里的配置填入。整个系统由BP神经网络转矩观测模块、直接转矩控制模块、速度调节模块、功率变换器模块组成,外环是速度环,内环是转矩环和磁链环。

各模块的配置要点整理为下表:

模块功能与配置要点
Switched Reluctance Motor四相8/6电机本体,Ld=23.6 mH、Lq=5.9 mH,内阻3.1 Ω
BP转矩观测模块用MATLAB Function载入训练好的w1/b1权重,输入U和I,输出Te
磁链估算模块由电压、电流积分估算定子磁链幅值与扇区
转矩/磁链滞环比较器输出τ、φ数字量,滞环宽度决定开关频率
开关表模块根据τ、φ和磁链扇区查表选择电压矢量
速度调节模块参考转速与反馈转速的PI调节,输出转矩给定
功率变换器IGBT桥式电路,直流母线电压120 V

BP转矩观测模块在Simulink里可以直接写成MATLAB Function,使用手册级的实现方式是把导出的权重矩阵变成常量,再写前向计算逻辑。也可以用coder生成C代码后封装成S-Function,这样更接近DSP部署形态。

4.2 仿真后处理:从Scope数据计算转矩脉动

仿真跑完后的分析不能只看Scope波形截图,要用脚本量化指标。下面这段代码用来从导出的Scope数据里计算稳态转矩脉动:

% 仿真后处理:从Scope数据计算稳态转矩脉动 load('Torque.mat'); % 从Scope导出,变量为t(时间)、Te(瞬时转矩) idx = find(t > 0.15 & t < 0.5); % 转速稳定段,避开起动超调 Te_ss = Te(idx); Te_avg = mean(Te_ss); % 稳态平均转矩 delta = max(Te_ss) - min(Te_ss); % 转矩波动范围 ripple = delta / Te_avg * 100; % 脉动系数 fprintf('平均转矩 %.2f N·m,波动 %.2f N·m,脉动系数 %.1f%%\n', ... Te_avg, delta, ripple);

这里取0.15 s到0.5 s的区间作为稳态段,是因为0.5 s时转速指令会跳变,跳变后的暂态数据不能混进稳态统计里。如果直接把整个时间段的max减min,会把转速突变瞬间的峰值转矩也算进去,得出的波动范围会虚高。

4.3 阶跃转速响应与电流波形解读

仿真中速度参考值设为阶跃信号:0~0.5 s内给定1000 r/min,0.5 s时从1000 r/min开始爬升到1500 r/min。实际响应过程是:系统开始运行后约0.2 s速度爬升到1000 r/min,开始时转矩有超调,但0.1 s左右就稳定下来;0.5 s给定跳变后,约0.25 s稳定到1500 r/min。这个动态响应速度符合DTC的直接控制特性——转矩响应快,速度环不需要太复杂的调节器就能跟上。

转矩波形在整个调速过程中表现为:起动和转速指令突变瞬间,速度偏差大,电流自动加大,转矩迅速顶上来;速度接近给定后,转矩回落到负载对应的稳态值。稳态段的转矩波动范围是7.6~8.4 N·m,波动只有0.8 N·m。作为对比,用电流斩波控制(CCC)策略时,电流被限制在10 A附近,转矩波动范围在1~13 N·m之间,上下波动高达12 N·m。两组数据放在一起,BP-DTC在转矩脉动抑制上的优势非常直观。

电流波形上两种策略的差异更明显:CCC是带环斩波,电流在限流值附近剧烈锯齿状波动;BP-DTC因为转矩反馈平滑,电流变化相对平稳。这一点在实际运行中对应的是电机噪音和机械振动的差别,对应用方来说往往比效率指标更敏感。

5. DSP实验对比与在线部署:TMS320F2812上的前向计算落地

5.1 实验平台构成与关键器件

仿真验证通过后,把控制策略移植到DSP实现。论文实验平台的核心处理器是TMS320F2812,PWM频率取100 Hz,电机为四相8/6结构,额定功率550 W,额定转速2000 r/min。功率开关器件选用Microsemi的APTGT50DA120T1G,可承受最大600 V电压和150 A电流,裕量足够覆盖起动和堵转工况。

F2812是定点处理器,运行tansig函数不能直接调math库里的exp,常见做法是把sigmoid函数做成查表,或用分段线性近似。前向计算10个隐含层神经元加2个隐含层神经元,每次推理只有20余次乘法加几次exp近似,控制周期内开销很小。

5.2 前向计算的C实现与权重固化

训练好的权重在DSP上以常量数组形式固化,核心前向计算代码如下,权重数值由MATLAB导出后填入:

/* BP网络前向计算(2-10-2-1结构),权重由trainlm训练结果导出 */ static const float w1[10][2] = { { 18.900f, 70.798f}, /* 隐含层1 第1个神经元 */ {-72.546f,-165.143f}, /* 隐含层1 第2个神经元 */ /* ... 其余8个神经元权重 ... */ }; static const float b1[10] = { -22.863f, 219.017f, -140.846f, 31.776f, -97.883f, 2.809f, 482.164f, -6.224f, 207.081f, 14.141f }; static float tansig(float x) { return 2.0f / (1.0f + expf(-2.0f * x)) - 1.0f; } float bp_torque(float U, float I) { float h1[10], h2[2], out; for (int j = 0; j < 10; j++) { h1[j] = tansig(b1[j] + U * w1[j][0] + I * w1[j][1]); } /* 第2隐含层与输出层的权重复用相同方式固化 */ /* out = b3[0] + h2[0] * w3[0] + h2[1] * w3[1]; */ return out; }

代码里w1是10×2矩阵,对应电压和电流两路输入到10个隐含神经元的权重;b1是10维偏置。tansig用exp实现,如果处理器没有硬件浮点单元,要把exp换成分段线性近似或查表。推理函数bp_torque的输出直接送给转矩滞环比较器,替代原始DTC里的公式计算模块。

与此同时,训练时的归一化参数要一并固化。U和I先按训练集的min/max映射到网络输入范围,输出值再反归一化为物理转矩。很多复现失败都出在这个环节:网络在归一化域上训练,部署时却喂了物理量,输出完全对不上。

5.3 实验对比结果与工程整定建议

实验对比中,CCC控制的开通角取2°、关断角取15°、电流限制10 A;BP-DTC控制下电流波形平稳,转矩稳定段波动范围仅0.8 N·m,而CCC波动高达12 N·m。两种波形对比可以直接说明BP转矩观测器在抑制脉动上的有效性。

工程上换电机换工况时,有几件事值得保留为固定动作。第一,训练数据覆盖范围要包含磁饱和区,电流上限要留到实际最大工作电流的1.2倍,否则高转矩工况网络外推误差会失控。第二,隐含层节点数重新扫一遍,以测试集误差曲面为判断依据,不要直接沿用论文的10+2。第三,上DSP之前先做离线验证:用测试集数据在MATLAB里算一遍误差曲面,确认最大误差点落在哪些工况,再看这些工况是不是实际运行区间。第四,实验平台上先空载跑,再带负载,记录不同转速点下的转矩波动数据,和仿真结果比对。

5.4 用一个可复用的验证流程收口

落地一套BP-DTC驱动系统,最稳妥的验证路径是:先有限元建模仿真,拿到覆盖全工况的训练数据;再训练网络,导出权重画出误差曲面;然后在Simulink里替换转矩观测模块,跑转速阶跃和负载阶跃,统计稳态脉动;最后移植到DSP上做电流波形和转矩波形对比。每一步都有明确的量化指标,误差曲面看最大误差、闭环仿真看脉动系数、实验对比看波形平稳度。这套流程不限于SRM,换到永磁同步电机或感应电机的直接转矩控制上,思路同样成立。

本文还有配套的精品资源,点击获取

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询