微信:HuangL1121
QQ号:1224848052
团队:MATLAB代做|MATLAB专业代做|硕士博士代写
地址:北京市-朝阳区-双柳北街18号院
当前位置:首页 > 通信信号 > 两变频调速电机系统的神经网络逆同步控制
项目案例
两变频调速电机系统的神经网络逆同步控制
两变频调速电机系统的神经网络逆同步控制
产品说明:

1.1 课题研究背景与研究意义

近年来,随着工业生产自动化技术的不断发展,过去针对一台电机的控制在很多场合已经不能满足时代的需求。更多的情况是通过控制多台电机去达到指标,那么这就产生了一个新的问题,如何更好地协调运行多电机同步系统是现代工业生产中应用比较广泛探讨的问题。 

通过多年的发展,多电机同步系统是现代工业生产中应用比较广泛的电控系统,在工业生产、军事及航空等行业有广阔的应用领域。高性能的电机同步协调控制可提高纺织、冶金、机械、造纸等行业产品的质量和成品率。我国目前的张力设备绝大多数仍沿用模拟量张力型直流传动方式,但直流电机存在着性价比差、维护费用高、转速低和容量小等诸多难以克服的缺点,因此使用交流电机来替代直流电机驱动系统已经成为必然。但是交流电机是高阶、强祸合、非线性的复杂控制对象,这使传统的线性定参数PID控制常常顾此失彼,无法达到满意的控制效果,同时工业生产要求实现张力与速度的解耦控制,这就更增加了控制的难度。

    而神经网络阶逆系统方法是近些年来提出的一种新的控制方法。它将逆系统的控制思想与神经网络结合起来,使用神经网络构建逆系统模型,再将逆系统与原系统串联构成复合伪线性系统。此方法不但克服了精确数学模型构建的困难,而且结构简单易于工程实现。因此采用神经网络阶逆系统来实现两电机的同步控制具有十分重要的现实意义。

1.2 多电机同步控制技术的发展概述

自从1980年Koren提出交叉耦合控制以后,许多科学工作者围绕“多电轴协调控制”展开了进一步研究。到了90年代,Guo等把双线性理论应用到多电机的控制上,之后Tomizuka等又把自适应前馈控制策略应用到交叉藕合控制器中,以提高瞬间响应和抗干扰能力。采用交叉耦合控制能有效地解决各轴之间动态性能不匹配的问题,把最优控制、自适应控制、前馈控制等控制方法应用于线性跟踪取得了一些效果,但遇到非线性跟踪就暴露其局限性。于是人们采用时变交叉藕合控制器、变增益交叉藕合控制器等来实现这种非线性跟踪控制,取得了一定的控制效果。

在多电机的速度和张力解耦控制中,除了传统的反馈控制以外,主要有如下控制方式:

·前馈控制策略

1999年,Seok和Seung-Ho等根据实际平均转子速度和参考张力设计前馈补偿器,实现解祸控制,2000年他们又提出了带张力观测的控制器。

·交叉耦合控制

2000年,张殿华等用伪对角化方法来设计交叉耦合控制器,使补偿后的系统具有对角占优的特性,实现活套和张力的解祸控制。

·现代控制理论方法

1991年Yoshiro等采用最优调节理论实现多变量的活套控制,根据不同的权矩阵计算不同的控制增益。

·分散、子空间方法

1997年,Tetsuzo等把分散控制的方法应用到张力控制系统中,设计具有PI结构的自适应控制器来补偿邻近子系统的影响。

·神经网络控制

1998年,Luo应用多层神经网络使速度环和张力环隔离,实现速度和张力的半独立控制。

    但是以上多种方式都是基于直流电机的,具有很大的局限性。近年来提出的神经网络a阶逆系统是由我国学者独创的理论和方法,它与自动控制、人工智能、神经网络理论、计算机科学、模式识别等有密切的关系,是相关学科相互结合与渗透的产物,具有广阔的应用前景。神经网络a阶逆系统这一先进的控制理论和方法不但在交流调速系统中得到应用,神经网络a阶逆系统不但推动了多电机同步控制技术的发展,而且在其他领域也将这一理论成果转化成经济效益,提高了企业的竞争力。

·motor_by_NN.m  :神经网络逆系统控制两电机仿真(仅通过PID控制)

clc;

clear;

%电机仿真参数

%电机仿真参数

%两电机模型的具体参数可以更改,假设两个电机除了转速,其余变量是相同的

times = 2000;    %仿真时间;

np1   = 2;      %极对数

np2   = 2;      %极对数

J1    = 0.5;    %转动惯量

J2    = 0.5;    %转动惯量

Tr1   = 0.5;    %电磁时间常数

Tr2   = 0.5;    %电磁时间常数

fair1 = 0.23;   %转子磁链

fair2 = 0.23;   %转子磁链

Lr1   = 0.5;    %转子自感

Lr2   = 0.5;    %转子自感

TL1   = 0;      %负载转矩

TL2   = 0;      %负载转矩

r1    = 0.8;    %电机轴半径

r2    = 0.8;    %电机轴半径

k1    = 1/20;   %电机速比常数

k2    = 1/20;   %电机速比常数

T     = 5  ;    %皮带张力变化常数

K     = 17.2;   %传递常数;

wr1   = zeros(times,1);

wr2   = zeros(times,1);

F     = zeros(times,1);

dt    = 0.01;

%产生信号输入

% select = 1:速度突然突然变大,张力不变

% select = 2:速度突然突然变小,张力不变

% select = 3:速度为方波,张力不变

% select = 4:速度为三角波,张力不变

% select = 5:张力突然突然变大,速度不变

% select = 6:张力突然突然变小,速度不变

% select = 7:张力为方波,速度不变

select = 1;

[w,F2] = func_signal(times,select);

Error1    = zeros(times,1);

Error2    = zeros(times,1);

x1=zeros(times,1);

x2=zeros(times,1);

x3=zeros(times,1);

x4=zeros(times,1);

x5=zeros(times,1);

output1   = zeros(times,1);

output2   = zeros(times,1);

PlantOut1   = zeros(times,1);

PlantOut2   = zeros(times,1);

load net.mat

for i = 5:times-4

    disp('循环次数');

    i

    %速度PID

    %速度PID

    Proportion1  = 9.8269;

    Integral1    = 4.0806;

    Derivative1  = 1.899;   

    input1(i)         =  (w(i) - wr1(i));

    output1(i)        = PlantOut1(i);

    Error1(i)         = input1(i) - output1(i);

    CumulateError1(i) = Error1(i)^2*dt;

    ErrorArea1(i)     = Error1(i)*dt;

    if i == 1

        dError1 = Error1(i);

    else

        dError1 = Error1(i) - Error1(i-1);

    end

    PIDout1(i) = Proportion1 * Error1(i) +  Integral1 * sum(ErrorArea1) + Derivative1 * dError1;

    %输出计算

    gs1(i) = 0.5/5*exp(-1/5*i*dt)*dt;

    PlantOut1(i+1) = PIDout1*fliplr(gs1)';

    speed(i) = output1(i);

    %张力PID

    %张力PID

    Proportion2  =  9.2269;

    Integral2    =  4.0806;

    Derivative2  =  0.399;    

    input2(i)         = 0.77*(w(i) - (F2(i) - F(i)));

    output2(i)        = PlantOut2(i);

    Error2(i)         = input2(i) - output2(i);

    CumulateError2(i) = Error2(i)^2*dt;

    ErrorArea2(i)     = Error2(i)*dt;

    if i == 1

        dError2 = Error2(i);

    else

        dError2 = Error2(i) - Error2(i-1);

    end

    PIDout2(i) = Proportion2 * Error2(i) +  Integral2 * sum(ErrorArea2) + Derivative2 * dError2;

    %输出计算

    gs2(i) = 0.5/5*exp(-1/5*i*dt)*dt;

    PlantOut2(i+1) = PIDout2*fliplr(gs2)';

    power(i) = output2(i);

    %五个输入量,通过神经网络

    x1(i) = w(i);

    x2(i) = (x1(i-2) - 8*x1(i-1) + 8*x1(i+1) -x1(i+2))/12; 

    x3(i) = F2(i);

    x4(i) = (x3(i-2) - 8*x3(i-1) + 8*x3(i+1) -x3(i+2))/12;  

    x5(i) = (x4(i-2) - 8*x4(i-1) + 8*x4(i+1) -x4(i+2))/12; 

    %直接PID控制   

    E1(i) = speed(i);

    E2(i) = power(i);

    %神经网络输出控制电机

    wr1(i+1) =  ((np1/J1)*((E1(i)-wr1(i))*(np1*Tr1*fair1*fair1/Lr1)-(TL1+r1*F(i))));

    wr2(i+1) =  ((np2/J2)*((E2(i)-wr2(i))*(np2*Tr2*fair2*fair2/Lr2)-(TL2-r2*F(i))));

    F(i+1)   =   (K/T)   *(r1*k1*wr1(i)/np1 - r2*k2*wr2(i)/np2)  -F(i)/T;

end

%效果显示

subplot(121);

plot(4.5*(wr1(1:times-100)),'b','LineWidth',2);%乘以固定系数4.5

title('响应速度');grid on

subplot(122);

plot(90*abs(F(1:times-100)),'r','LineWidth',2);%乘以固定系数90

title('响应张力');grid on

 

·motor_by_NN2.m :神经网络逆系统控制两电机仿真(通过NN控制)

clc;

clear;

close all;

%电机仿真参数

%电机仿真参数

%两电机模型的具体参数可以更改,假设两个电机除了转速,其余变量是相同的

times = 12000;    %仿真时间;

np1   = 2;      %极对数

np2   = 2;      %极对数

J1    = 0.5;    %转动惯量

J2    = 0.5;    %转动惯量

Tr1   = 0.5;    %电磁时间常数

Tr2   = 0.5;    %电磁时间常数

fair1 = 0.23;   %转子磁链

fair2 = 0.23;   %转子磁链

Lr1   = 0.5;    %转子自感

Lr2   = 0.5;    %转子自感

TL1   = 0;      %负载转矩

TL2   = 0;      %负载转矩

r1    = 0.8;    %电机轴半径

r2    = 0.8;    %电机轴半径

k1    = 1/20;   %电机速比常数

k2    = 1/20;   %电机速比常数

T     = 5  ;    %皮带张力变化常数

K     = 17.2;   %传递常数;

wr1   = zeros(times,1);

wr2   = zeros(times,1);

F     = zeros(times,1);

dt    = 0.01;

 [w,F2] = func_signal(times,3);

w=w/abs(max(w));

F2=F2/abs(max(F2));

Error1    = zeros(times,1);

Error2    = zeros(times,1);

x1=zeros(times,1);

x2=zeros(times,1);

x3=zeros(times,1);

x4=zeros(times,1);

x5=zeros(times,1);

output1   = zeros(times,1);

output2   = zeros(times,1);

PlantOut1   = zeros(times,1);

PlantOut2   = zeros(times,1);

load net.mat

for i = 5:times-4

    disp('循环次数');

    i

    %速度PID

    %速度PID

    Proportion1  = 7.8269;

    Integral1    = 4.5806;

    Derivative1  = 1.899;   

    input1(i)         = (w(i) - wr1(i));

    output1(i)        = PlantOut1(i);

    Error1(i)         = input1(i) - output1(i);

    CumulateError1(i) = Error1(i)^2*dt;

    ErrorArea1(i)     = Error1(i)*dt;

    if i == 1

        dError1 = Error1(i);

    else

        dError1 = Error1(i) - Error1(i-1);

    end

    PIDout1(i) = Proportion1 * Error1(i) +  Integral1 * sum(ErrorArea1) + Derivative1 * dError1;

    %输出计算

    gs1(i) = 0.5/5*exp(-1/5*i*dt)*dt;

    PlantOut1(i+1) = PIDout1*fliplr(gs1)';

    speed(i) = output1(i);

    %张力PID

    %张力PID

    Proportion2  =  9.2269;

    Integral2    =  6.0806;

    Derivative2  =  0.399;     

    input2(i)         = 0.18*(w(i) - (F2(i) - F(i))); 

    output2(i)        = PlantOut2(i);

    Error2(i)         = input2(i) - output2(i);

    CumulateError2(i) = Error2(i)^2*dt;

    ErrorArea2(i)     = Error2(i)*dt;

    if i == 1

        dError2 = Error2(i);

    else

        dError2 = Error2(i) - Error2(i-1);

    end

    PIDout2(i) = Proportion2 * Error2(i) +  Integral2 * sum(ErrorArea2) + Derivative2 * dError2;

    %输出计算

    gs2(i) = 0.5/5*exp(-1/5*i*dt)*dt;

    PlantOut2(i+1) = PIDout2*fliplr(gs2)';

    power(i) = output2(i);

    %五个输入量,通过神经网络

    x1(i) = speed(i);

    x2(i) = (x1(i-2) - 8*x1(i-1) + 8*x1(i+1) -x1(i+2))/12; 

    x3(i) = power(i);

    x4(i) = (x3(i-2) - 8*x3(i-1) + 8*x3(i+1) -x3(i+2))/12;  

    x5(i) = (x4(i-2) - 8*x4(i-1) + 8*x4(i+1) -x4(i+2))/12; 

    x(1:5,i) = [x1(i),x2(i),x3(i),x4(i),x5(i)];

    %整神经网络

    temp=sim(net,x);

    y1(i)=temp(1,i);

    y2(i)=temp(2,i);

    %神经网络输出控制电机

    wr1(i+1) =  ((np1/J1)*((y1(i)-wr1(i))*(np1*Tr1*fair1*fair1/Lr1)-(TL1+r1*F(i))));

    wr2(i+1) =  ((np2/J2)*((y2(i)-wr2(i))*(np2*Tr2*fair2*fair2/Lr2)-(TL2-r2*F(i))));

    F(i+1)   =   (K/T)   *(r1*k1*wr1(i)/np1 - r2*k2*wr2(i)/np2)  -F(i)/T;

end

%效果显示

subplot(121);

plot(4.35*abs(max(w))*wr1(1:times-100),'b','LineWidth',2);

title('响应速度');grid on

subplot(122);

plot(90*abs(max(F2))*F(1:times-100),'r','LineWidth',2);

title('响应张力');grid on

figure

plot(w,'b','LineWidth',2);hold on

plot(4.35*(wr1(1:times-100))+0.78,'r','LineWidth',2);hold off

title('PID跟踪效果');

legend('给定速度','响应速度');


上一篇:二维转三维~双目立体系统

版权所有: MATLAB代做|MATLAB专业代做|硕士博士代写 Copyright © 2018 All rights reserved.
微信:HuangL1121 QQ:1224848052
地址:北京市-朝阳区-双柳北街18号院

扫一扫,关注我们