ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

基于神经网络PID的异步电机MRAS转速辨识与无速度传感器控制

基于神经网络PID的异步电机MRAS转速辨识与无速度传感器控制 简介这份PDF资料聚焦异步电机无速度传感器矢量控制中的转速辨识问题提出基于神经网络PID的MRAS辨识方法以转子磁链电压模型为参考模型、电流模型为可调模型利用单神经元PID在线调节参数提升转速估算精度与响应速度。面向电机控制、电力电子及自动化方向的研究人员与工程师尤其适合关注智能控制与仿真验证的读者。资源为单篇期刊论文共1个PDF文件大小约205KB内容包含Popov超稳定性理论推导、改进MRAS系统设计及MATLAB/Simulink仿真验证。已有148人学习浏览可用于快速了解神经网络PID在转速估算中的应用思路获取关键公式、系统框图与仿真结论为相关课题研究或课程设计提供参考。1. 基于神经网络PID的异步电机转速MRAS辨识无速度传感器方案到底解决什么问题在冶金、矿山、纺织这类现场电机轴上的编码器经常被高温、油污和振动折磨坏了之后整条产线跟着停。于是很多人把目光转向无速度传感器控制不装编码器通过电机端电压和电流把转速“算”出来。基于神经网络PID的异步电机转速MRAS辨识做的就是这件事——用MRAS模型参考自适应系统在线辨识转子转速再用神经网络PID替代传统固定参数的PID调节器让系统在参数变化、负载突变时还能稳住。我最早接触这个方向是处理一台辊道电机的低速抖动试了很多固定PI都压不住后来换成神经网络PID配合MRAS辨识才把问题理顺。这篇文章把原理、仿真步骤和踩过的坑一次讲清楚。2. MRAS转速辨识是怎么工作的从异步电机模型到自适应律2.1 为什么做转速辨识编码器的软肋和无速度传感器的代价编码器在电机控制里承担两件事一是给速度环提供转速反馈二是给磁场定向提供转子位置。但在实际产线上编码器属于“高危部件”。振动会导致码盘松动油污会遮挡光电头高温会让码盘热变形这些都不是靠选更贵的编码器能完全解决的。更麻烦的是很多老设备在改造时根本没有预留编码器安装位置机械上硬装一个联轴器又会引入同心度误差。所以我做改造项目时能去掉编码器就尽量去掉代价是必须把转速辨识精度做上去。转速辨识不是凭空猜而是根据电机的数学模型用电流电压反推转速。异步电机的转速藏在转子磁场定向的方程里直接解又解不出来因为转速和磁链、电流是耦合的。MRAS的思路很朴素构造两个模型一个不含转速参考模型一个含转速且输出会随转速变化可调模型两者输出做差再用自适应律去调节可调模型里的转速直到差值收敛到零。这时候得到的转速就是辨识值。这要求两个模型的输出必须是可测量的或可观测的中间量最常用的是转子磁链分量。2.2 转子磁链MRAS的参考模型与可调模型核心方程与参数意义我一般以转子磁链作为MRAS的输出量。参考模型基于异步电机的电压方程在静止坐标系α-β下写出来参考模型电压模型 dψ_α/dt (L_r/L_m) * (u_α - R_s*i_α - σ*L_s*di_α/dt) dψ_β/dt (L_r/L_m) * (u_β - R_s*i_β - σ*L_s*di_β/dt)这里ψ是转子磁链u、i是定子电压电流R_s、L_s、L_r、L_m分别是定子电阻、定子电感、转子电感、互感σ是漏磁系数。这个模型不包含转速所以被称为参考模型。它的缺点是含有纯积分项积分初值和直流偏置会让结果漂移后面避坑章节我会专门说。可调模型是电流模型它包含转速估计值ω_r_hat可调模型电流模型 dψ_α_hat/dt -a*ψ_α_hat - ω_r_hat*ψ_β_hat L_m/T_r*i_α dψ_β_hat/dt -a*ψ_β_hat ω_r_hat*ψ_α_hat L_m/T_r*i_β其中a 1/T_r 1/T_sT_r和T_s是转子、定子时间常数。当ω_r_hat接近真实转速时两个模型的磁链输出就会逼近相等。传统做法是构造误差项ε ψ_β * ψ_α_hat - ψ_α * ψ_β_hat然后把ε送进一个PI调节器PI的输出就是辨识转速。这就是MRAS里的“自适应律”。常规PI可以在额定转速附近取得不错效果但一旦电机参数随温度改变或者运行在低速度区PI很难兼顾快速性和平稳性——这就是神经网络PID切入的位置。2.3 神经网络怎么替换自适应律中的PI结构与信号流所谓“基于神经网络PID的MRAS辨识”最常见的做法不是推翻原有结构而是把MRAS里的固定增益PI替换成一个神经网络PID调节器。神经网络在这里同时干两件事一是在线调整PID的三个系数Kp、Ki、Kd二是直接用非线性映射替代线性PI让误差ε到转速估计值的传递路径更贴合电机实际非线性特性。我用的是一个三层的BP网络输入层取三个量误差ε、误差的积分、误差的微分。隐藏层用双曲正切激活函数输出层用线性激活输出的是增量式PID的控制量增量。梯度通过误差反向传播回去更新网络权值的同时也更新等效的PID参数。这个结构的信号流是参考模型和可调模型输出磁链 → 算ε → 送进神经网络PID → 得到转速估计值 → 反馈给可调模型。整个回路在一个仿真步长内完成一次更新。用神经网络PID替代PI最大的收益不是快而是自适应。固定PI在某个工况点整定好了转速一变或负载一变增益就不合适了。神经网络只要学习率和初值选对能在几个周期内把输出调整到合适区间。它保留了MRAS的结构稳定性又比单纯PI多了一层在线学习能力。3. 神经网络PID控制器设计从增量式PID到BP权值更新3.1 普通PID在异步电机调速上的两个瓶颈做电机调速普通PID是底子但用在MRAS辨识回路上会暴露两个问题。第一个是低速段的增益矛盾误差ε在低速时信号很弱为了及时收敛需要大比例增益但大增益在高速时会放大噪声导致转速估计值抖动甚至发散。固定PI只能在“低速灵敏”和“高速稳定”之间选一个中间值两头都不讨好。第二个是参数漂移电机温度升高后转子电阻可变化20%以上MRAS里的可调模型参数跟着变同一个PI在不同温度下表现完全不一样。我试过用模糊PID去切换参数效果也不错但模糊规则表需要人工整定换一台电机就要重新捋一遍规则。神经网络PID不需要人工列规则它靠误差反传自己调整权重。从工程角度看省掉的是反复试凑规则表的功夫换来的是第一次调试时要去调学习率和权值初值。后面我会说这两者虽然也要调但比模糊规则表直观得多。3.2 神经网络PID的结构增量式PID与BP网络如何组合单神经元PID是最简的做法但对付MRAS这种带积分特性的对象有点单薄我习惯用三层BP网络构成PID。先看增量式PID的离散公式Δu(k) Kp*(e(k)-e(k-1)) Ki*e(k) Kd*(e(k)-2*e(k-1)e(k-2))其中e就是MRAS的误差ε。神经网络输出的是三个系数还是直接输出Δu两种我都试过。直接输出Δu的收敛更快因为网络只需学习一个映射输出Kp/Ki/Kd再套增量式公式可解释性强但网络需要同时学三个系数收敛慢且容易出现Kd为负值导致系统振荡。我在工程里选择直接输出Δu把PID的“增量”概念保留在输出层而把Kp、Ki、Kd的学习隐含在权值里。网络结构如下输入层x1 e(k)x2 e(k) - e(k-1)x3 e(k) - 2*e(k-1) e(k-2)隐藏层6个神经元激活函数tanh输出层1个神经元激活函数线性输出Δu(k)权值更新用标准BP算法代价函数取E 0.5 * ε(k)^2。更新公式为w_new w_old - η * ∂E/∂w α * Δw_oldη是学习率α是动量因子。∂E/∂w需要通过链式法则从误差ε反传到每个权值。这里有个工程细节因为MRAS里ε到转速估计值的传递函数不是简单的线性关系严格求Jacobian很麻烦常见做法是近似用符号函数代替偏导即认为转速估计误差和ε方向一致。这个近似在收敛区域内是成立的实测不会阻碍收敛但学习率必须比标准BP小一个数量级。3.3 三个必调参数学习率、动量因子、权值初值学率η是最敏感的参数。我通常从0.001开始往上调到0.01时如果权值出现爆炸就退回。对MRAS这种闭环反馈回路η超过0.005基本就会在高速段引发振荡。这里的原因是转速辨识误差本身已经经过一个积分型对象再叠加高增益的神经网络极容易形成正反馈。要记住网络在线的每一步都在更新不像离线训练可以盯着loss曲线慢慢调。动量因子α的作用是平滑权值更新方向避免陷入局部振荡。我一般取0.6到0.9之间如果辨识转速出现高频抖动优先把α调大到0.85以上而不是急着降η。权值初值我建议全部取0到0.01之间的随机数。为什么不能取零取零会让初始梯度为零网络在头几步无法学习。取大了又会让初始输出Δu很大直接把可调模型推偏。还有一个关键输入层三个量必须先做归一化。ε的量纲是磁链的乘积换算到国际单位可能小到1e-4直接喂给网络会让梯度消失。我把ε除以一个基准值比如额定磁链的平方把输入缩放到[-1,1]区间之后再进网络。提示神经网络PID的采样周期必须和MRAS辨识周期一致或者为辨识周期的整数倍。我一般把两者都设在100微秒级太快了普通MCU算不过来太慢了辨识收敛跟不上转速变化。4. 在Simulink里把MRAS辨识和神经网络PID接起来仿真搭建步骤与参数表4.1 电机参数和坐标系先把被控对象立起来我习惯先在Simulink里搭一个完整的异步电机矢量控制模型用电机模块输出定子电流和转速作为MRAS的输入。这里不要直接用理想电压源驱动电机而要用逆变器加SVPWM模块因为实际工况下的电流谐波会对辨识有影响仿真阶段就要把谐波噪声暴露出来。一个典型的仿真电机参数表如下示例值具体以你的电机铭牌和实验测参为准参数符号典型值单位额定功率P_N3.7kW额定电压U_N380V额定频率f_N50Hz极对数p2-定子电阻R_s0.635Ω转子电阻R_r0.452Ω定子电感L_s0.084H转子电感L_r0.084H互感L_m0.081H转动惯量J0.026kg·m²坐标系统一用静止两相α-β坐标Park变换和Clarke变换的基准角度由转子磁链观测器提供。这里要注意MRAS里的电压模型需要定子电压和电流如果仿真里取的是SVPWM的参考电压而不是实际逆变器输出那个误差会在磁链积分里积累。我建议直接采样逆变器输出的线电压做重构或者至少加上死区补偿否则低速辨识会有固定偏置。4.2 MRAS辨识子系统从磁链观测到转速误差到自适应律搭建MRAS辨识子系统我分成三步走。第一步做电压模型磁链观测。输入定子电压u_α、u_β和电流i_α、i_β输出参考磁链ψ_α、ψ_β。注意积分环节要加一个带宽很小的低通滤波器替代纯积分截止频率取2到5 Hz用1/(s ω_c)的形式。这个改动会引入相位误差但可以通过补偿角校正总比纯积分飘掉好。第二步做电流模型磁链观测。输入电流和转速估计值ω_r_hat输出可调磁链ψ_α_hat、ψ_β_hat。这里ω_r_hat是一个反馈回来的信号初始值给0之后由神经网络PID子系统的输出更新。第三步计算误差ε并送进神经网络PID。ε的计算公式我在第2章已经写过在Simulink里直接用乘法和减法模块。神经网络PID用MATLAB Function写成S-function方式或者用Simulink的Neural Network Toolbox的NARX结构但后者封装太死我不太喜欢还是手写了一个MATLAB Function。用MATLAB Function实现的核心逻辑是function [w_hat, delta_u, w_net] neural_pid_mras(eps, x_history, w_net, eta, alpha) % 神经网络PID用于MRAS自适应律 % 输入: eps - MRAS误差x_history - [e(k); e(k)-e(k-1); e(k)-2e(k-1)e(k-2)] % w_net - 网络权值结构体 % 输出: w_hat - 转速辨识值增量, delta_u - 增量式PID输出, w_net - 更新后的权值 % 网络前向计算 x eps / 0.01; % 归一化基准这里用额定磁链平方量级 x [x; x_history(2:3)]; h tanh(w_net.W1 * x w_net.b1); delta_u w_net.W2 * h w_net.b2; % 更新转速辨识值 w_hat_old x_history(4); w_hat w_hat_old delta_u*(2*pi*50/60); % 标幺值换算到rad/s % 权值更新简化反向传播 g eps * sign(delta_u); delta_W2 eta * g * h; delta_b2 eta * g; delta_W1 eta * g .* (1 - h.^2) * x; w_net.W2 w_net.W2 - delta_W2 alpha * w_net.dW2; w_net.b2 w_net.b2 - delta_b2 alpha * w_net.db2; w_net.W1 w_net.W1 - delta_W1 alpha * w_net.dW1; w_net.dW2 delta_W2; w_net.db2 delta_b2; w_net.dW1 delta_W1; end这段代码里有两个关键参数。一个是归一化基准0.01它要跟实际磁链幅值匹配如果你的电机额定磁链是0.8 Wb两个磁链相乘后量级在0.6左右那除以0.01就会过放大导致初始误差超过激活函数饱和区间。我后来改成每次采样时用ε的最大历史绝对值做动态归一化。另一个是转速标幺换算系数代码里2*pi*50/60是把基于50 Hz基准的标幺值转成机械角速度如果你的系统用电气角速度这里直接乘同步角速度基准千万别搞混。4.3 神经网络PID控制器子系统的搭建与接口MRAS输出的转速估计值w_hat要接到哪里我把它接到速度环的反馈端替代编码器反馈。速度环的给定还是原来的转速指令误差经过速度环调节器之后输出的是q轴电流给定。这里是两个控制回路的叠加外环是速度环用的神经网络PID内环是电流环用的常规PI。神经网络PID在速度环里起到的作用是让外环增益自适应转速变化。子系统接口上神经网络PID的输入是速度误差e_w w_ref - w_hat输出是q轴电流指令iq_ref。内部结构可以参考第3章的三层BP但输入层三个量换成e_w、e_w的积分、e_w的微分。要注意这里的神经网络PID和MRAS里的神经网络PID是两个独立网络别共用一个权值结构体。我的做法是在同一个MATLAB Function里定义两个网络一个负责MRAS自适应律一个负责速度环分别更新。4.4 一组能跑通的存档参数表仿真跑通的关键是参数配平。我把之前调好的一组参数列在这里照着设置一般不会发散模块参数设置值备注电压模型磁链观测低通截止频率 ω_c3 Hz替代纯积分防漂移电流模型磁链观测初值 ψ_α_hat, ψ_β_hat0必须与参考模型初值一致MRAS神经网络学习率 η0.002超过0.005易发散MRAS神经网络动量因子 α0.85抑制高频抖动MRAS神经网络隐藏层神经元数64-8均可多了易过拟合速度环神经网络学习率 η0.001比MRAS网络更低速度环神经网络动量因子 α0.9大惯量对象需要速度环PI对照Kp / Ki0.15 / 2.5仅作为网络初值的参考电流环PIKp / Ki0.8 / 30内环带宽设为外环的10倍有了这组参数在Simulink里把负载设为额定扭矩的50%转速指令从0加速到额定转速再用一个阶跃降到1/4额定转速观察MRAS辨识速度w_hat能否跟上真实电机转速。如果仿真时间到了0.5秒时辨识转速还稳定在一个固定偏置上多半是低通滤波器的相位补偿没做先不要急着调神经网络。5. 避坑与常见问题排查转速辨识发散、神经网络不收敛的五条实战记录5.1 辨识转速正负跳变参考模型积分初值没对齐现象仿真一开始MRAS输出的转速在额定转速附近来回跳变正负交替幅度很大。原因参考模型电压模型里有纯积分环节虽然我加了低通滤波器但它需要从初始条件开始过渡。可调模型的磁链初值一般设成0但参考模型的输出电压上电瞬间有直流偏移两个模型的磁链初值不一致导致ε在初始阶段有一个很大的尖峰。这个尖峰经过神经网络PID放大后转速估计值被推到极端值。解决做法是在参考模型的积分器后加一个专门的一阶惯性滤波让参考模型的磁链从某个稳态初值开始而不是从零开始。我后来直接在仿真开始前先做一次开环预励磁让磁链观测器在转速为0的工况下运行0.2秒把磁链建立起来后再切入神经网络PID闭环。5.2 神经网络权值爆炸输入归一化缺失或学习率过大现象仿真运行到某一时刻转速估计值突然变成NaN或者几十倍额定值然后整个模型报错。原因这个我遇到过很多次。最常见的是神经网络输入的ε没有归一化量级很大激活函数tanh饱和梯度变成0权值却还在被别的项更新最后数值溢出。另一个原因是学习率η给到0.01以上权值更新步长太大来回振越振越大。解决先把η降到0.001再在输入层加一个缩放模块用ε的绝对值的指数滑动平均值做除数。排查时不要直接盯着转速波形把网络最后一层的权值加到示波器里观察权值在哪个时间点出现异常增长。权值一旦出现单调增趋势就是η过大的信号别等到NaN才去查。5.3 低速时辨识抖动严重磁链观测误差被自适应律放大现象转速给定降到10%额定值以下时辨识转速抖得像锯齿波而额定转速下表现很好。原因低速时反电动势很小电压模型信噪比变差磁链观测误差增大。MRAS的误差ε里包含了磁链观测误差神经网络PID为了快速收敛会把增益调大结果把噪声也放大了。这是MRAS本身的弱点不完全是神经网络的问题。解决我采用了两段式策略——低速运行时把神经网络PID旁路掉切换为固定PIPI增益按低速工况单独整定中高速再切回神经网络PID。切换要做迟滞比如低于15%额定转速切低速PI恢复到20%再切回网络防止频繁切换引起冲击。还有一个补救是提高电压模型的低通滤波器截止频率但别超过5 Hz否则相位滞后太大。5.4 控制输出限幅与辨识回路打架先整定内环再整定外环现象神经网络PID输出iq电流给定经常顶到限幅上限限幅生效之后电机电流出现明显畸变MRAS辨识也跟着乱。原因神经网络PID在初始学习阶段输出很不稳定可能连续几个周期输出很大的电流指令触发了逆变器限幅。限幅后实际q轴电流跟不上给定内环电流环出现饱和电机实际转速变化和辨识模型里的假定不一致MRAS就乱了。解决我的顺序是先让速度环用固定PI把整个驱动系统跑稳定然后把神经网络PID负载到速度环上给它一个比较小的初始输出限幅比如额定电流的10%让它先在小范围内学习等辨识误差收敛后再逐步放开限幅到100%。不要一上来就全限幅。另外神经网络PID的输出层激活函数不要用纯线性改成带饱和的线性函数例如delta_u max(min(net_out, 0.05), -0.05)能有效防爆。5.5 变步长仿真导致辨识结果漂移用定步长重跑一遍现象同一套参数用变步长仿真时能跑通但换成定步长后转速辨识误差变大或者反过来。原因变步长求解器在动态剧烈的瞬间会自动缩短步长这相当于隐式地提高MRAS的采样精度。而神经网络PID的权值更新公式是基于固定采样周期推导的步长一变梯度方向的等效增益就变了导致同一个网络在两种仿真模式下表现不一致。解决在仿真验证阶段统一用定步长步长设为10微秒和代码生成的采样周期一致。MRAS和神经网络PID模块的采样时间都设为100微秒即10个步长计算一次其余模块用连续时间或更细步长。这样仿真结果和后续单片机实现的可复现性最好。如果你必须用变步长那网络的学习率要按实际仿真步长的比值做补偿这个补偿系数很难一次算准我建议直接放弃变步长。6. 从仿真到样机先用MRAS辨识结果验证三个指标再上神经网络PID在线学习仿真跑通只是第一步在半实物平台上复现才是真正的考验。先把神经网络PID从速度环上摘掉仅保留MRAS辨识加固定PI的速度环在样机上验证三个指标。第一个指标是稳态误差。让电机从额定转速开始加到1.2倍额定转速再降到0.1倍额定转速每个工况运行10秒记录真实编码器反馈和MRAS辨识输出的差值。差值不超过额定转速的1%算合格超过就要回头查电压模型的低通滤波器和参数补偿。第二个指标是动态超调。给一个转速阶跃指令从20%额定转速跳到80%额定转速观察辨识转速是否超调超过5%以及超调后能否在0.5秒内回落。超调大说明MRAS自适应律增益偏高需要减小神经网络PID的初始输出比例。第三个指标是低速带载能力。在10%额定转速下施加额定扭矩负载看辨识转速会不会振荡电机会不会堵转。这是MRAS方案最难过的一关我见过的翻车案例大半都发生在这里。如果低速带载不行就要用第5章说的两段式策略把低速段交给固定PI不要硬扛。三个指标过了之后再把神经网络PID在线学习打开。安全措施必须有一是在线学习之前先离线预训练。我通常在Simulink里用固定PI跑一组典型工况的转速误差和电流数据把神经网络在离线状态下学习这组数据学习好后作为样机的初始权值。这样样机一上电网络的初始输出就接近合理范围而不是从随机权值开始瞎学。二是权值限幅。样机里的MCU计算速度快但浮点资源有限权值更新时要对每个权值做范围限制。我在代码里给每个权值设了±5.0的上下限超限就截断。同时给网络输出再加一道限幅保证任何情况下输出电流给定不超过电机的过载能力。这两道限幅比什么训练技巧都管用能保证网络发散时也不至于炸硬件。三是学习率在线衰减。样机刚启动时让η保持0.002运行10分钟后衰减到0.0005此后保持不变。这么做是因为系统在动态过程中需要一定学习能力但稳定运行后权值再高频变化只会引入噪声。我吃过亏一开始用固定学习率运行半小时后噪声越来越大最后定位到是权值在持续微调始终不收敛。说实话这个方向做下来我最大的体会是神经网络PID不是越智能越好而是要和对象特性匹配。MRAS本身有积分环节神经网络PID无非是给这个积分环节配上了一个能自动调增益的“增强器”。把仿真步长、初值对齐、限幅处理这三件事做好八成问题就解决了。剩下的两成靠现场工况数据慢慢磨。希望这篇笔记能帮你在MRAS辨识这条路上少走几步弯路。本文还有配套的精品资源点击获取
返回列表