自動控制原理課程設計說明書
基于雙閉環PID控制的一階倒立擺控制系統設計
1 任務概述
1.1設計概述
1.2 要完成的設計任務:
2系統建模
2.1 對象模型
2.2 模型建立及封裝
3仿真驗證
3.1 實驗設計
3.2 建立M文件編制繪圖子程序
4 雙閉環PID控制器設計
4.1內環控制器的設計
4.2外環控制器的設計
5 仿真實驗
5.1簡化模型
5.2 仿真實驗
6 檢驗系統的魯棒性
6.1 編寫程序求系統性能指標
6.2 改變參數驗證控制系統的魯棒性
7 結論
附錄
1 任務概述
1.1設計概述如圖1 所示的“一階倒立擺控制系統”中,通過檢測小車位置與擺桿的擺動角,來適當控制驅動電動機拖動力的大小,控制器由一臺工業控制計算機(IPC)完成。 圖1 一階倒立擺控制系統 這是一個借助于“SIMULINK封裝技術——子系統”,在模型驗證的基礎上,采用雙閉環PID控制方案,實現倒立擺位置伺服控制的數字仿真實驗。 1.2 要完成的設計任務:(1)通過理論分析建立對象模型(實際模型),并在原點進行線性化,得到線性化模型;將實際模型和線性化模型作為子系統,并進行封裝,將倒立擺的振子質量m和倒擺長度L作為子系統的參數,可以由用戶根據需要輸入; (2)設計實驗,進行模型驗證; (3)一階倒立擺系統為“自不穩定的非最小相位系統”。將系統小車位置作為“外環”,而將擺桿擺角作為“內環”,設計內化與外環的PID控制器; (4)在單位階躍輸入下,進行SIMULINK仿真; (5)編寫繪圖程序,繪制階躍響應曲線,并編程求解系統性能指標:最大超調量、調節時間、上升時間; (6)檢驗系統的魯棒性:將對象的特性做如下變化后,同樣在單位階躍輸入下,檢驗所設計控制系統的魯棒性能,列表比較系統的性能指標(最大超調量、調節時間、上升時間)。 倒擺長度L不變,倒立擺的振子質量m從1kg分別改變為1.5kg、2kg、2.5kg、0.8kg、0.5kg; 倒立擺的振子質量m不變,倒擺長度L從0.3m分別改變為0.5m、0.6m、0.2m、0.1m。 2系統建模
2.1 對象模型一階倒立擺的精確模型的狀態方程為: 若只考慮θ在其工作點 = 0附近的細微變化,這時可以將模型線性化,這時可以近似認為: 一階倒立擺的簡化模型的狀態方程為: 2.2 模型建立及封裝上邊的圖是精確模型,下邊的是簡化模型。 圖2 模型驗證原理圖 2、由狀態方程可求得: Fcn:(4/3*u[1]+4/3*m*l*sin(u[3])*power(u[2],2)-10*m*sin(u[3])*cos(u[3]))/(4/3*(1+m)-m*power(cos(u[3]),2)) Fcn1:(cos(u[3])*u[1]+m*l*sin(u[3])*cos(u[3])*power(u[2],2)-10*(1+m)*sin(u[3]))/(m*l*power(cos(u[3]),2)-4/3*l*(1+m)) Fun2:(4*u[1]-30*m*u[3])/(4+m) Fun3:(u[1]-10*(1+m)*u[3])/(m*l-4/3*l*(1+m)) (其中J = ,小車質量M=1kg,倒擺振子質量m,倒擺長度2L,重力加速度g=10m/ ) 將以上表達式導入函數。 3、如下圖框選后選擇create subsystem 圖3 封裝 4、封裝之后如下圖 圖4 子系統建立 5、將精確模型subsystem和簡化模型subsystem1組合成以下系統以供驗證,注意add的符號是++,不是+-,網上其他的課設都是錯的。(輸入信號是由階躍信號合成的脈沖,幅值為0.05,持續時間(step time)為0.1s)。 圖5 系統模塊封裝 6、鼠標右擊子系統模塊,在模塊窗口選項中選擇Mask->edit mask,則彈出如下窗口。 圖6 添加參數 7、點擊左邊菜單欄的edit,添加參數m和L,注意prompt中的m和L意思是之后對話框中的提示詞,而name中的m和L是要被prompt中輸入的值導入的變量,如果name中填錯了,那么之后的值將無法導入。 圖7 編輯參數 8、在系統模型中,雙擊子系統模塊,則會彈出一個新窗口,在新窗口中可以輸入m和L的值,之后將會輸入,如圖8所示。 圖8 輸入參數 3仿真驗證3.1 實驗設計假定使倒立擺在(θ=0,x=0)初始狀態下突加微小沖擊力作用,則依據經驗知,小車將向前移動,擺桿將倒下。 3.2 建立M文件編制繪圖子程序圖9 繪圖子程序 (提示:附錄中有子程序方便大家Ctrl+c (^_^),上邊只是為了方便對照)。 - 在系統模型中,雙擊子系統模塊,則會彈出一個新窗口,在新窗口中輸入m和l值,點擊OK并運行,如圖10所示。
圖10 輸入參數 - 如圖設置to file模塊的參數,Variable name的名字就是M程序中的函數名,這里如果不是signals的話程序是無法運行的。Save format要選擇Array,因為程序是按數組形式調取變量的,沒有選擇Array的話運行程序會出現“索引超出矩陣維度”的錯誤。
圖11 to file參數設置 圖12 模型驗證仿真結果 從中可見,在0.1N的沖擊力下,擺桿倒下(θ由零逐步增大), 小車位置逐漸增加,這一結果符合前述的實驗設計,故可以在一定程度上確認該“一階倒立擺系統”的數學模型是有效的。同時,由圖中也可以看出,近似模型在0.8s以前與精確模型非常接近,因此,也可以認為近似模型在一定條件下可以表達原系統模型的性質。 4 雙閉環PID控制器設計一級倒立擺系統位置伺服控制系統如圖13所示。 圖13 一級倒立擺系統位置伺服控制系統方框圖 4.1內環控制器的設計內環采用反饋校正進行控制。 圖14 內環系統結構圖 反饋校正采用PD控制器,設其傳遞函數為 ,為了抑制干擾,在 前向通道上加上一個比例環節 = K? 控制器參數的整定: 設 的增益K = -20,則內環控制系統的閉環傳遞函數為 令ξ= 0.7 內環控制器的傳遞函數為: 內環控制系統的閉環傳遞函數為: 4.2外環控制器的設計外環系統前向通道的傳遞函數為: 圖12 外環系統結構圖 對外環模型進行降階處理,若忽略 的高次項,則近似為一階傳遞函數為: 外環控制器采用PD形式,其傳遞函數為: 采用單位反饋構成外環反饋通道,則 ,則系統的開環傳遞函數為: 采用基于Bode圖法的希望特性設計方法,得 ,τ= 0.87,取τ= 1,則外環控制器的傳遞函數為 圖13 系統仿真結構圖 5 仿真實驗5.1簡化模型- 根據已設計好的PID控制器,可建立圖14系統,設置仿真時間為10ms,單擊運行。這個仿真是為了便于理解。
-
圖14 SIMULINK仿真框圖 %將導入到PID.mat中的仿真試驗數據讀出 load PID.mat t=signals(1,:); q=signals(2,:); x=signals(3,:); %drawing x(t) and thera(t) response signals %畫小車位置和擺桿角度的響應曲線 figure(1) hf=line(t,q(:)); grid on xlabel ('Time (s)') axis([0 10 -0.3 1.2]) ht=line(t,x,'color','r'); axis([0 10 -0.3 1.2]) title('\theta(t) and x(t) Response to a step input') gtext('\leftarrow x(t)'),gtext('\theta(t) \uparrow') 執行該程序的結果如圖15所示 圖15 仿真結果 5.2 仿真實驗注意,圖中子系統為簡化模型而不是精密模型(MMP網上的寫的精密模型,調了好久才發現)。 圖16 SIMULINK仿真框圖 圖17系統仿真結果圖 6 檢驗系統的魯棒性檢驗系統的魯棒性:將對象的特性做如下變化后,同樣在單位階躍輸入下,檢驗所設計控制系統的魯棒性能,列表比較系統的性能指標(最大超調量、調節時間、上升時間)。 6.1 編寫程序求系統性能指標 新建pid.m文件,輸入以下命令并保存 load PID.mat clc t=signals(1,:); x=signals(2,:); q=signals(3,:); figure(1) hf=line(t,q(:)); grid on axis([0 10 -0.3 1.2]) ht=line(t,x,'color','r'); r=size(signals); e=r(1,2); C=x(1,e); %得到系統終值 y_max_overshoot=100*(max(x)-C)/C %超調量計算 r1=1; while (x(r1)<0.1*C) r1=r1+1; end r2=1; while (x(r2)<0.9*C) r2=r2+1; end x_rise_time=t(r2)-t(r1) %上升時間計算 s=length(t); while x(s)>0.98*C&&x(s)<1.02*C s=s-1; end x_settling_time=t(s) %調整時間計算 C1=q(1,e); [max_y,k]=max(q); q_max_overshoot=max(q)-C1 %超調量計算 q_rise_time=t(k) %上升時間計算 s=length(t); while q(s)>-0.02&&q(s)<0.02 s=s-1; end q_settling_time=t(s) %調整時間計算 6.2 改變參數驗證控制系統的魯棒性 倒擺長度L不變,倒立擺的振子質量m從1kg分別改變為1.5kg、2kg、2.5kg、0.8kg、0.5kg;倒立擺的振子質量m 不變,倒擺長度L 從0.3m 分別改變為0.5m、0.6m、0.2m、0.1m。在單位階躍輸入下,檢驗所設計系統的魯棒性 。 - 改變輸入參數并運行,再運行pid.m文件,得到響應曲線及性能指標,記錄表1
圖18 改變輸入參數 表1 性能坐標比較 圖19改變倒立桿質量和長度時系統仿真結果 7 結論結論: 1、原系統在0.1N的沖擊力下,擺桿倒下(θ由零逐步增大), 小車位置逐漸增加,這一結果符合前述的實驗設計,故可以在一定程度上確認該“一階倒立擺系統”的數學模型是有效的。驗證實驗中,通過精確模型與簡化模型比較,從圖中可以看出,0.8s以前是非常接近,因此,也可以認為近似模型在一定條件下可以表達原系統模型的性質。 2、經過雙閉環PID 控制的系統,能跟隨給定并穩定下來,且θ終值為0使擺桿不倒。說明PID控制有效。 3、改變倒立擺的擺桿質量m和長度L。從圖11中可以看出,在參數變化的一定范圍內系統保持穩定,控制系統具有一定的魯棒性。 附錄- q=signals(4,: ); %讀取精確模型中倒擺擺角信號
- xx=signals(5,: ); %讀取簡化模型中的小車位置信號
- qq=signals(6,: ); %讀取簡化模型中倒立擺擺角信號
- figure(1) %定義第一個圖形
- hf=line(t,f(:)); %連接時間-作用力曲線
- grid on;
- xlabel('Time(s)') %定義橫坐標
- ylabel('Force(N)') %定義縱坐標
- axis([0 1 0 0.12]) %定義坐標范圍
- axet=axes('Position',get(gca,'Position'),...
- 'XAxisLocation','bottom',...
- 'YAxisLocation','right','color','none',...
- 'XColor','k','YColor','k');
- %定義曲線屬性
- ht=line(t,x,'color','r','parent',axet);
- %連接時間-小車位置曲線
- ht=line(t,xx,'color','r','parent',axet);
- %連接時間-小車速度曲線
- ylabel('Evolution of the xposition(m)') %定義坐標名稱
- axis([0 1 0 0.1]) %定義坐標范圍
- title('Response x and x''in meter to a f(t) pulse of 0.1 N' )
- %定義曲線標題名稱
- gtext ('\leftarrow f (t)'),gtext ('x (t) \rightarrow') , gtext (' \leftarrow x''(t)')
- figure (2)
- hf=line(t,f(:));
- grid on
- xlabel('Time')
- ylabel('Force(N)')
- axet=axes('Position',get(gca,'Position'),...
- 'XAxisLocation','bottom',...
- 'YAxisLocation','right','color','none',...
- 'XColor','k','YColor','k');
- ht=line(t,q,'color','r','parent',axet);
- ht=line(t,qq,'color','r','parent',axet);
- ylabel('Angle evolution (rad)')
- axis([0 1 -0.3 0])
- title('Response \theta(t)and \theta'' in rad to a f(t) pulse of 0.1 N' )
復制代碼
以上圖文的Word格式文檔下載(內容和本網頁上的一模一樣,方便大家保存)::源文件:無
|