自動控制原理課程設(shè)計說明書
基于雙閉環(huán)PID控制的一階倒立擺控制系統(tǒng)設(shè)計
1 任務(wù)概述
1.1設(shè)計概述
1.2 要完成的設(shè)計任務(wù):
2系統(tǒng)建模
2.1 對象模型
2.2 模型建立及封裝
3仿真驗證
3.1 實驗設(shè)計
3.2 建立M文件編制繪圖子程序
4 雙閉環(huán)PID控制器設(shè)計
4.1內(nèi)環(huán)控制器的設(shè)計
4.2外環(huán)控制器的設(shè)計
5 仿真實驗
5.1簡化模型
5.2 仿真實驗
6 檢驗系統(tǒng)的魯棒性
6.1 編寫程序求系統(tǒng)性能指標
6.2 改變參數(shù)驗證控制系統(tǒng)的魯棒性
7 結(jié)論
附錄
1 任務(wù)概述
1.1設(shè)計概述如圖1 所示的“一階倒立擺控制系統(tǒng)”中,通過檢測小車位置與擺桿的擺動角,來適當控制驅(qū)動電動機拖動力的大小,控制器由一臺工業(yè)控制計算機(IPC)完成。 圖1 一階倒立擺控制系統(tǒng) 這是一個借助于“SIMULINK封裝技術(shù)——子系統(tǒng)”,在模型驗證的基礎(chǔ)上,采用雙閉環(huán)PID控制方案,實現(xiàn)倒立擺位置伺服控制的數(shù)字仿真實驗。 1.2 要完成的設(shè)計任務(wù):(1)通過理論分析建立對象模型(實際模型),并在原點進行線性化,得到線性化模型;將實際模型和線性化模型作為子系統(tǒng),并進行封裝,將倒立擺的振子質(zhì)量m和倒擺長度L作為子系統(tǒng)的參數(shù),可以由用戶根據(jù)需要輸入; (2)設(shè)計實驗,進行模型驗證; (3)一階倒立擺系統(tǒng)為“自不穩(wěn)定的非最小相位系統(tǒng)”。將系統(tǒng)小車位置作為“外環(huán)”,而將擺桿擺角作為“內(nèi)環(huán)”,設(shè)計內(nèi)化與外環(huán)的PID控制器; (4)在單位階躍輸入下,進行SIMULINK仿真; (5)編寫繪圖程序,繪制階躍響應(yīng)曲線,并編程求解系統(tǒng)性能指標:最大超調(diào)量、調(diào)節(jié)時間、上升時間; (6)檢驗系統(tǒng)的魯棒性:將對象的特性做如下變化后,同樣在單位階躍輸入下,檢驗所設(shè)計控制系統(tǒng)的魯棒性能,列表比較系統(tǒng)的性能指標(最大超調(diào)量、調(diào)節(jié)時間、上升時間)。 倒擺長度L不變,倒立擺的振子質(zhì)量m從1kg分別改變?yōu)?.5kg、2kg、2.5kg、0.8kg、0.5kg; 倒立擺的振子質(zhì)量m不變,倒擺長度L從0.3m分別改變?yōu)?.5m、0.6m、0.2m、0.1m。 2系統(tǒng)建模
2.1 對象模型一階倒立擺的精確模型的狀態(tài)方程為: 若只考慮θ在其工作點 = 0附近的細微變化,這時可以將模型線性化,這時可以近似認為: 一階倒立擺的簡化模型的狀態(tài)方程為: 2.2 模型建立及封裝上邊的圖是精確模型,下邊的是簡化模型。 圖2 模型驗證原理圖 2、由狀態(tài)方程可求得: 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 = ,小車質(zhì)量M=1kg,倒擺振子質(zhì)量m,倒擺長度2L,重力加速度g=10m/ ) 將以上表達式導入函數(shù)。 3、如下圖框選后選擇create subsystem 圖3 封裝 4、封裝之后如下圖 圖4 子系統(tǒng)建立 5、將精確模型subsystem和簡化模型subsystem1組合成以下系統(tǒng)以供驗證,注意add的符號是++,不是+-,網(wǎng)上其他的課設(shè)都是錯的。(輸入信號是由階躍信號合成的脈沖,幅值為0.05,持續(xù)時間(step time)為0.1s)。 圖5 系統(tǒng)模塊封裝 6、鼠標右擊子系統(tǒng)模塊,在模塊窗口選項中選擇Mask->edit mask,則彈出如下窗口。 圖6 添加參數(shù) 7、點擊左邊菜單欄的edit,添加參數(shù)m和L,注意prompt中的m和L意思是之后對話框中的提示詞,而name中的m和L是要被prompt中輸入的值導入的變量,如果name中填錯了,那么之后的值將無法導入。 圖7 編輯參數(shù) 8、在系統(tǒng)模型中,雙擊子系統(tǒng)模塊,則會彈出一個新窗口,在新窗口中可以輸入m和L的值,之后將會輸入,如圖8所示。 圖8 輸入?yún)?shù) 3仿真驗證3.1 實驗設(shè)計假定使倒立擺在(θ=0,x=0)初始狀態(tài)下突加微小沖擊力作用,則依據(jù)經(jīng)驗知,小車將向前移動,擺桿將倒下。 3.2 建立M文件編制繪圖子程序圖9 繪圖子程序 (提示:附錄中有子程序方便大家Ctrl+c (^_^),上邊只是為了方便對照)。 - 在系統(tǒng)模型中,雙擊子系統(tǒng)模塊,則會彈出一個新窗口,在新窗口中輸入m和l值,點擊OK并運行,如圖10所示。
圖10 輸入?yún)?shù) - 如圖設(shè)置to file模塊的參數(shù),Variable name的名字就是M程序中的函數(shù)名,這里如果不是signals的話程序是無法運行的。Save format要選擇Array,因為程序是按數(shù)組形式調(diào)取變量的,沒有選擇Array的話運行程序會出現(xiàn)“索引超出矩陣維度”的錯誤。
圖11 to file參數(shù)設(shè)置 - 運行M文件程序,執(zhí)行該程序的結(jié)果如圖8所示。
圖12 模型驗證仿真結(jié)果 從中可見,在0.1N的沖擊力下,擺桿倒下(θ由零逐步增大), 小車位置逐漸增加,這一結(jié)果符合前述的實驗設(shè)計,故可以在一定程度上確認該“一階倒立擺系統(tǒng)”的數(shù)學模型是有效的。同時,由圖中也可以看出,近似模型在0.8s以前與精確模型非常接近,因此,也可以認為近似模型在一定條件下可以表達原系統(tǒng)模型的性質(zhì)。 4 雙閉環(huán)PID控制器設(shè)計一級倒立擺系統(tǒng)位置伺服控制系統(tǒng)如圖13所示。 圖13 一級倒立擺系統(tǒng)位置伺服控制系統(tǒng)方框圖 4.1內(nèi)環(huán)控制器的設(shè)計內(nèi)環(huán)采用反饋校正進行控制。 圖14 內(nèi)環(huán)系統(tǒng)結(jié)構(gòu)圖 反饋校正采用PD控制器,設(shè)其傳遞函數(shù)為 ,為了抑制干擾,在 前向通道上加上一個比例環(huán)節(jié) = K? 控制器參數(shù)的整定: 設(shè) 的增益K = -20,則內(nèi)環(huán)控制系統(tǒng)的閉環(huán)傳遞函數(shù)為 令ξ= 0.7 內(nèi)環(huán)控制器的傳遞函數(shù)為: 內(nèi)環(huán)控制系統(tǒng)的閉環(huán)傳遞函數(shù)為: 4.2外環(huán)控制器的設(shè)計外環(huán)系統(tǒng)前向通道的傳遞函數(shù)為: 圖12 外環(huán)系統(tǒng)結(jié)構(gòu)圖 對外環(huán)模型進行降階處理,若忽略 的高次項,則近似為一階傳遞函數(shù)為: 外環(huán)控制器采用PD形式,其傳遞函數(shù)為: 采用單位反饋構(gòu)成外環(huán)反饋通道,則 ,則系統(tǒng)的開環(huán)傳遞函數(shù)為: 采用基于Bode圖法的希望特性設(shè)計方法,得 ,τ= 0.87,取τ= 1,則外環(huán)控制器的傳遞函數(shù)為 圖13 系統(tǒng)仿真結(jié)構(gòu)圖 5 仿真實驗5.1簡化模型- 根據(jù)已設(shè)計好的PID控制器,可建立圖14系統(tǒng),設(shè)置仿真時間為10ms,單擊運行。這個仿真是為了便于理解。
-
圖14 SIMULINK仿真框圖 %將導入到PID.mat中的仿真試驗數(shù)據(jù)讀出 load PID.mat t=signals(1,:); q=signals(2,:); x=signals(3,:); %drawing x(t) and thera(t) response signals %畫小車位置和擺桿角度的響應(yīng)曲線 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') 執(zhí)行該程序的結(jié)果如圖15所示 圖15 仿真結(jié)果 5.2 仿真實驗注意,圖中子系統(tǒng)為簡化模型而不是精密模型(MMP網(wǎng)上的寫的精密模型,調(diào)了好久才發(fā)現(xiàn))。 圖16 SIMULINK仿真框圖 圖17系統(tǒng)仿真結(jié)果圖 6 檢驗系統(tǒng)的魯棒性檢驗系統(tǒng)的魯棒性:將對象的特性做如下變化后,同樣在單位階躍輸入下,檢驗所設(shè)計控制系統(tǒng)的魯棒性能,列表比較系統(tǒng)的性能指標(最大超調(diào)量、調(diào)節(jié)時間、上升時間)。 6.1 編寫程序求系統(tǒng)性能指標 新建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); %得到系統(tǒng)終值 y_max_overshoot=100*(max(x)-C)/C %超調(diào)量計算 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) %調(diào)整時間計算 C1=q(1,e); [max_y,k]=max(q); q_max_overshoot=max(q)-C1 %超調(diào)量計算 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) %調(diào)整時間計算 6.2 改變參數(shù)驗證控制系統(tǒng)的魯棒性 倒擺長度L不變,倒立擺的振子質(zhì)量m從1kg分別改變?yōu)?.5kg、2kg、2.5kg、0.8kg、0.5kg;倒立擺的振子質(zhì)量m 不變,倒擺長度L 從0.3m 分別改變?yōu)?.5m、0.6m、0.2m、0.1m。在單位階躍輸入下,檢驗所設(shè)計系統(tǒng)的魯棒性 。 - 改變輸入?yún)?shù)并運行,再運行pid.m文件,得到響應(yīng)曲線及性能指標,記錄表1
圖18 改變輸入?yún)?shù) 表1 性能坐標比較 圖19改變倒立桿質(zhì)量和長度時系統(tǒng)仿真結(jié)果 7 結(jié)論結(jié)論: 1、原系統(tǒng)在0.1N的沖擊力下,擺桿倒下(θ由零逐步增大), 小車位置逐漸增加,這一結(jié)果符合前述的實驗設(shè)計,故可以在一定程度上確認該“一階倒立擺系統(tǒng)”的數(shù)學模型是有效的。驗證實驗中,通過精確模型與簡化模型比較,從圖中可以看出,0.8s以前是非常接近,因此,也可以認為近似模型在一定條件下可以表達原系統(tǒng)模型的性質(zhì)。 2、經(jīng)過雙閉環(huán)PID 控制的系統(tǒng),能跟隨給定并穩(wěn)定下來,且θ終值為0使擺桿不倒。說明PID控制有效。 3、改變倒立擺的擺桿質(zhì)量m和長度L。從圖11中可以看出,在參數(shù)變化的一定范圍內(nèi)系統(tǒng)保持穩(wěn)定,控制系統(tǒng)具有一定的魯棒性。 附錄- 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格式文檔下載(內(nèi)容和本網(wǎng)頁上的一模一樣,方便大家保存)::源文件:無
|