聯(lián)系我們 - 廣告服務(wù) - 聯(lián)系電話:
您的當(dāng)前位置: > 關(guān)注 > > 正文

關(guān)注:單擺控制教程 matlab仿真單擺控制-狀態(tài)反饋

來源:CSDN 時間:2023-02-17 09:03:51

1. 單擺模型

為使得單擺在  處保持平衡,力矩必須有一個穩(wěn)態(tài)分量滿足

選擇狀態(tài)變量為, 控制變量為,則狀態(tài)方程變?yōu)?/p>


(資料圖片)

2. 線性化控制

將系統(tǒng)在原點(diǎn)線性化得:

取,容易驗(yàn)證當(dāng)

-\frac{acos{\delta}}{c},k_2>\frac{b}{c}" class="mathcode" src="https://private.codecogs.com/gif.latex?k_1%3E-%5Cfrac%7Bacos%7B%5Cdelta%7D%7D%7Bc%7D%2Ck_2%3E%5Cfrac%7Bb%7D%7Bc%7D">

時,A-BK是赫爾維茨矩陣,力矩為

3. matlab仿真代碼

%=========== 單擺控制-狀態(tài)反饋 ===========%clear all;clc;close all;%% 參數(shù)設(shè)置g = 9.8; % 重力加速度l = 1;   % 擺長k = 0.5; % 摩擦系數(shù)m = 1;   % 擺球質(zhì)量a = g/l; b = k/m; c = 1/(m*l^2);theta(1) = 0;delta = -pi/5;dtheta(1) = 0.2;interval = 0.05;t = 0:interval:40;k1 = -a*cos(delta)+5;k2 = -b/c + 5;A = [0 1; -a*cos(delta) -b]; B = [0;c];K = [k1 k2];eig(A - B*K)%% 狀態(tài)變化for i = 2:1:length(t)   T = a*sin(delta)/c - k1*(theta(i-1)-delta) - k2*dtheta(i-1);%   T =  0;  ddtheta = -a*sin(theta(i-1)) - b*dtheta(i-1) +c*T;  dtheta(i) = dtheta(i-1) + ddtheta*interval;  theta(i) = theta(i-1) + dtheta(i)*interval;endfigure plot(t,theta,"r")figure%繪制橫梁colordef blackplot([-0.2;0.2],[0;0],"-y","LineWidth",20);x0=l*sin(theta(1));% 初始 x 坐標(biāo)y0=-l*cos(theta(1));% 初始 y 坐標(biāo)axis([-0.75,0.75,-1.25,1.25]);axis off%創(chuàng)建擺錘%擦除模式為 xor% head=line(x0,y0,"color","r","linestyle",".",...% "erasemode","xor","markersize",40);hold on%創(chuàng)建擺桿body=line([0;x0],[-0.05;y0],"color","g","linestyle","-","erasemode","xor","LineWidth",2);head = [];for i = 2:1:length(t)    x=l*sin(theta(i));    y=-l*cos(theta(i));%     set(head,"xdata",x,"ydata",y);% 改變擦除對象的坐標(biāo)數(shù)據(jù)    set(body,"xdata",[0;x],"ydata",[-0.05;y]);    delete(head);    head = plot(x,y,"m.","MarkerSize",40);        drawnow;% 刷新屏幕    pause(0.1)        F = getframe(gcf);    I = frame2im(F);    [I,map] = rgb2ind(I,256);    if (i == 2)       imwrite(I,map,"single.gif","gif","Loopcount",inf,"Delaytime",0.2);    else       imwrite(I,map,"single.gif","gif","WriteMode","append","DelayTime",0.2);     end    end

4. 控制效果

5. 積分控制

積分控制中,不用尋找計(jì)算為保持平衡位置所需要的穩(wěn)態(tài)力矩。此時的反饋控制率為:

加入積分控制后,即不需要再尋找平衡力矩就可以實(shí)現(xiàn)穩(wěn)態(tài)控制

6. 仿真結(jié)果

%=========== 單擺控制-線性化狀態(tài)反饋 ===========%clear all;clc;close all;%% 參數(shù)設(shè)置g = 9.8; % 重力加速度l = 1;   % 擺長k = 0.5; % 摩擦系數(shù)m = 1;   % 擺球質(zhì)量a = g/l; b = k/m; c = 1/(m*l^2);theta(1) = -pi/2;delta = pi/4;dtheta(1) = 0.2;interval = 0.05;t = 0:interval:40;k1 = -a*cos(delta)+5;k2 = -b/c + 5;A = [0 1; -a*cos(delta) -b]; B = [0;c];K = [k1 k2];k3 = 3;eig(A - B*K)alpha(1) = 0;%% 狀態(tài)變化for i = 2:1:length(t)%    T = a*sin(delta)/c - k1*(theta(i-1)-delta) - k2*dtheta(i-1);%   T =  0;  dalpha = theta(i-1) - delta;  alpha(i) =  alpha(i-1) + dalpha*interval;  T = - k1*(theta(i-1)-delta) - k2*dtheta(i-1) -k3*alpha(i);  ddtheta = -a*sin(theta(i-1)) - b*dtheta(i-1) +c*T;  dtheta(i) = dtheta(i-1) + ddtheta*interval;  theta(i) = theta(i-1) + dtheta(i)*interval;endfigure plot(t,theta,"y","LineWidth",2)figure%繪制橫梁colordef blackplot([-0.2;0.2],[0;0],"-y","LineWidth",20);x0=l*sin(theta(1));% 初始 x 坐標(biāo)y0=-l*cos(theta(1));% 初始 y 坐標(biāo)axis([-1,1,-1.25,1.25]);axis off%創(chuàng)建擺錘%擦除模式為 xor% head=line(x0,y0,"color","r","linestyle",".",...% "erasemode","xor","markersize",40);hold on%創(chuàng)建擺桿body=line([0;x0],[-0.05;y0],"color","g","linestyle","-","erasemode","xor","LineWidth",2);head = [];for i = 2:1:length(t)    x=l*sin(theta(i));    y=-l*cos(theta(i));%     set(head,"xdata",x,"ydata",y);% 改變擦除對象的坐標(biāo)數(shù)據(jù)    set(body,"xdata",[0;x],"ydata",[-0.05;y]);    delete(head);    head = plot(x,y,"m.","MarkerSize",40);        drawnow;% 刷新屏幕    pause(0.1)    %     F = getframe(gcf);%     I = frame2im(F);%     [I,map] = rgb2ind(I,256);%     if (i == 2)%        imwrite(I,map,"single.gif","gif","Loopcount",inf,"Delaytime",0.2);%     else%        imwrite(I,map,"single.gif","gif","WriteMode","append","DelayTime",0.2); %     end    end

責(zé)任編輯:

標(biāo)簽:

相關(guān)推薦:

精彩放送:

新聞聚焦
Top