基于粒子群算法的永磁同步电机多参数辨识【simulink】

文摘   2024-08-02 08:30   河北  

   主要内容   

仿真程序参考文献《改进粒子群算法的永磁同步电机多参数辨识》,采用粒子群算法与simulink模型结合的方式,对永磁同步电机进行多参数辨识。程序以定子绕组电阻、d轴电感、q轴电感和永磁体磁链四个参数作为输入参数,以定子dq轴电压作为输出,通过辨识模型电压与测量电压的偏差作为目标函数,从而实现参数的精准辨识。

  模型研究   

  1. 1. 适应度函数

适应度函数以辨识模型与实际测量值之间的误差平方和最小为目标,适应度函数值越小其辨识模型电压与测量电压越接近待辨识参数和实际值也越接近,具体表达式如下:

对应的程序代码为:

fitness_gbest(j) = -((ud0-ud_0)^2 + (uq0-uq_0)^2 + (ud1-ud_1)^2 + (uq1-uq_1)^2 ); % 每个个体的历史最佳适应度

2. 算法流程

算法流程主要是通过粒子群算法调用simulink仿真模型,通过输入计算输出值和适应度值,通过循环优化出最佳参数,具体流程可参考下图:

3. simulink仿真模型主体

对应数据采集模块的模型如下:

模型对应的dq轴电压计算模块如下:

SVPWM模块如下:

4. 部分程序代码


iter = 1; %迭代次数record = zeros(ger, 1); % 记录器while iter <= ger for j=1:sizepop % 更新速度并对速度进行边界处理 pop_v(:,j)= c_1 * pop_v(:,j) + c_2*rand*(gbest(:,j)-pop_x(:,j))+c_3*rand*(zbest-pop_x(:,j));% 速度更新 for i=1:dim if pop_v(i,j) > vlimit_max(i) pop_v(i,j) = vlimit_max(i); end if pop_v(i,j) < vlimit_min(i) pop_v(i,j) = vlimit_min(i); end end % 更新位置并对位置进行边界处理 pop_x(:,j) = pop_x(:,j) + pop_v(:,j);% 位置更新 for i=1:dim if pop_x(i,j) > xlimit_max(i) pop_x(i,j) = xlimit_max(i); end if pop_x(i,j) < xlimit_min(i) pop_x(i,j) = xlimit_min(i); end end % 进行自适应变异 if rand > 0.85 i=ceil(dim*rand); pop_x(i,j)=xlimit_min(i) + (xlimit_max(i) - xlimit_min(i)) * rand; end % 进行约束条件判断并计算新种群各个个体位置的适应度 ud_0 = pop_x(1,j)*id0 - we0*pop_x(3,j)*iq0; uq_0 = pop_x(1,j)*iq0 + we0*(pop_x(2,j)*id0 + pop_x(4,j)); ud_1 = pop_x(1,j)*id1 - we1*pop_x(3,j)*iq1; uq_1 = pop_x(1,j)*iq1 + we1*(pop_x(2,j)*id1 + pop_x(4,j)); fitness_pop(j) = -((ud0-ud_0)^2 + (uq0-uq_0)^2 + (ud1-ud_1)^2 + (uq1-uq_1)^2 );

  结果一览   

适应度值逐渐逼近0,说明待辨识参数和实际值越来越近,优化效果非常好!

Ud

Uq

   “阅读原文”获取程序源码   

电力程序
打造电力专业最新原创程序集散地,免费分享基础编程资料,在这里,带着希望而来,带着知识而归~
 最新文章