<form id="dlljd"></form>
        <address id="dlljd"><address id="dlljd"><listing id="dlljd"></listing></address></address>

        <em id="dlljd"><form id="dlljd"></form></em>

          <address id="dlljd"></address>
            <noframes id="dlljd">

              聯系我們 - 廣告服務 - 聯系電話:
              您的當前位置: > 關注 > > 正文

              關注:單擺控制教程 matlab仿真單擺控制-狀態反饋

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

              1. 單擺模型

              為使得單擺在  處保持平衡,力矩必須有一個穩態分量滿足

              選擇狀態變量為, 控制變量為,則狀態方程變為


              (資料圖片)

              2. 線性化控制

              將系統在原點線性化得:

              取,容易驗證當

              -\frac{acos{\delta}}{c},k_2>\frac{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仿真代碼

              %=========== 單擺控制-狀態反饋 ===========%clear all;clc;close all;%% 參數設置g = 9.8; % 重力加速度l = 1;   % 擺長k = 0.5; % 摩擦系數m = 1;   % 擺球質量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)%% 狀態變化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 坐標y0=-l*cos(theta(1));% 初始 y 坐標axis([-0.75,0.75,-1.25,1.25]);axis off%創建擺錘%擦除模式為 xor% head=line(x0,y0,"color","r","linestyle",".",...% "erasemode","xor","markersize",40);hold on%創建擺桿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);% 改變擦除對象的坐標數據    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. 積分控制

              積分控制中,不用尋找計算為保持平衡位置所需要的穩態力矩。此時的反饋控制率為:

              加入積分控制后,即不需要再尋找平衡力矩就可以實現穩態控制

              6. 仿真結果

              %=========== 單擺控制-線性化狀態反饋 ===========%clear all;clc;close all;%% 參數設置g = 9.8; % 重力加速度l = 1;   % 擺長k = 0.5; % 摩擦系數m = 1;   % 擺球質量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;%% 狀態變化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 坐標y0=-l*cos(theta(1));% 初始 y 坐標axis([-1,1,-1.25,1.25]);axis off%創建擺錘%擦除模式為 xor% head=line(x0,y0,"color","r","linestyle",".",...% "erasemode","xor","markersize",40);hold on%創建擺桿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);% 改變擦除對象的坐標數據    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

              責任編輯:

              標簽:

              相關推薦:

              精彩放送:

              新聞聚焦
              Top 中文字幕在线观看亚洲日韩