2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩15頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、<p>  自動控制原理課程設(shè)計</p><p><b>  學院: </b></p><p><b>  班級:</b></p><p><b>  學號:</b></p><p><b>  指導教師:</b></p><

2、p><b>  姓名:</b></p><p>  雙輪自平衡智能車行走伺服控制算法</p><p>  摘要:全國第八屆“飛思卡爾”智能汽車大賽已經(jīng)結(jié)束。光電組使用大賽提供的D車模,雙輪站立前進,相對于以前的四輪車,雙輪車的控制復雜度大大增加。行走過程中會遇到各種干擾,經(jīng)過多次的實驗,已經(jīng)找到了一套能夠控制雙輪車的方法。雙輪機器人已經(jīng)廣泛用于城市作戰(zhàn),排爆,反

3、恐,消防以及空間消防等領(lǐng)域。實驗使用單片機控制雙電機的轉(zhuǎn)速,達到了預期的效果。</p><p>  關(guān) 鍵 詞:自平衡;智能;控制算法</p><p>  Motion Servo Control Algorithm for Dual Wheel Intelligent Car</p><p>  Abstract: The 8th freescale cup na

4、tional Intelligent Car competition of has been end.The led team must used D car which has only 2tires.It is more difficult to control prefer to control A car which has 4tires.There is much interference on the track. A t

5、wo-wheeled robots have been widely used in urban warfare, eod, counter-terrorism, fire control and space fire control and other fields。We has searched a good ways to control it.We used MCU to control the speed of motors

6、and get our gates.</p><p>  Key Words: balance by self; intelligent; control algorithm</p><p><b>  一.引言</b></p><p>  雙輪自平衡車是智能汽車中一個重要的組成部分。由于其是兩輪站立,在很多場合有比四輪車更靈活,更方便控制的特

7、點。基于雙輪車的機器人已經(jīng)用于在城市作戰(zhàn),排爆,反恐,消防,空間探測等領(lǐng)域。</p><p>  雙輪自平衡車的控制過程與倒立擺相似。本次研究主要是對雙輪車直立的研究。由于車在前進過程中還可能遇到彎道和路障,所以本文還對整個系統(tǒng)的穩(wěn)定性做了比較深入的研究。</p><p>  在理論證明正確的前提下,再次進行仿真驗證,仿真驗證的結(jié)果與實驗結(jié)果相符合。</p><p>

8、;<b>  二.系統(tǒng)模型的建立</b></p><p>  智能汽車競賽使用的是D車模。D車模是雙電機,雙輪的車模。單電機控制雙輪時可以滿足車身保持平衡和前進的要求,而之所以使用雙電機是為了前進過程中轉(zhuǎn)彎的需要。本文只討論跟直立和干擾有關(guān)的內(nèi)容,鑒于此,本文余下內(nèi)容默認是單電機控制的車模。自平衡車在沒有電機控制的情況下屬于不穩(wěn)定系統(tǒng),在極小的干擾下,就會偏離平衡位置而失去平衡。因此,控制系

9、統(tǒng)必須使用反饋控制。圖1是站立在賽道上的雙輪車模。</p><p>  圖1 站立在賽道上的自平衡雙輪車</p><p>  自平衡雙輪車在只研究直立的情況下與倒立擺相似,因此這里將借助倒立擺的研究方式研究雙輪車的平衡控制。</p><p>  控制車模平衡的主觀經(jīng)驗。一般的人通過簡單練習就可以讓一個直木棒在手指尖上保持直立。這需要兩個條件:一個是托著木棒的手可以移

10、動;另一個是眼睛可以觀察到木棒的傾斜角度和傾斜趨勢(角速度)。通過手掌移動抵消木棒的傾斜角和趨勢,從而保持直立。這兩個條件缺一不可,實際上就是控制中的負反饋控制,見圖2。</p><p>  圖2 在手上不倒的木棍</p><p>  世界上沒有一個天才雜技演員可以蒙著雙眼使得木棒在自己指尖上直立,因為沒了雙眼就沒了負反饋的環(huán)節(jié)。經(jīng)過簡單的分析可以得到圖3所示的控制結(jié)構(gòu)圖。</p&g

11、t;<p>  圖3 不倒的木棍的控制結(jié)構(gòu)圖</p><p>  同樣,雙輪直立車的控制也是通過負反饋來實現(xiàn)的,與上面保持木棍直立則比較簡單。因為車模有2個輪子著地,車體只會在輪子滾動的防線上發(fā)生傾斜。控制輪子轉(zhuǎn)動,抵消在一個維度上傾斜的趨勢便可以保持車體的平衡了。如圖4,5, 6所示。</p><p>  圖4 車體平衡,車輪靜止</p><p> 

12、 圖5 車體后傾,車輪向后加速</p><p>  圖6 車體前傾,車體向前加速</p><p>  將雙輪車簡化成高度為L,質(zhì)量為m的簡單倒立擺,它可以放置在左右移動的車輪上。</p><p>  與空氣中的單擺類似,車身偏離平衡位置后要想能迅速的回到平衡位置,車身應該受到與位移方向相反的的回復力。</p><p>  在平衡點附近,角度θ

13、很小,即有sinθ ≈ θ。假設(shè)車身偏離平衡角度后,將受到電機產(chǎn)生的與角度成比例的力:</p><p>  f = mk1θ(1)</p><p>  由于重力原因,車身偏離平衡位置后受到的回復力為:</p><p>  F = mgθ – mk1θ (2)</p><p>  從上式中可以看出回復力要想與位移相反,必須有k1 &g

14、t; g。假設(shè)外力干擾引起車模產(chǎn)生角速度x(t)。沿著垂直于車模底盤的方向進行受力分析,可以得到車模傾角與車輪加速度a(t)以及外力干擾加速度x(t)之間的的運動方程。受力分析如圖7所示。</p><p><b>  圖7 車模受力分析</b></p><p><b>  (4)</b></p><p>  車模靜止不向前

15、運動時,a(t) = 0,即:</p><p><b>  (5)</b></p><p>  對應車模靜止時,系統(tǒng)輸入輸出的傳遞函數(shù)為:</p><p><b>  (6)</b></p><p>  此時系統(tǒng)具有2個極。一個極點位于s平面的右半平面,車模不穩(wěn)定。在此處假設(shè),k1 = 20用mat

16、lab仿真此系統(tǒng):</p><p>  Matlab代碼如下:</p><p>  %程序目的:在沒有微分量的情況下仿</p><p><b>  %真系統(tǒng)的階躍響應</b></p><p>  %author:程順均</p><p>  %時間:2013.8.28</p><

17、p>  sys = tf([1], [1 0 100]);</p><p>  t = 0:0.01:3;</p><p><b>  figure(1)</b></p><p>  step(sys,t);grid on</p><p>  仿真截圖如圖8所示:</p><p>  圖8

18、比例控制系統(tǒng)的階躍響應</p><p>  從圖來看,與分析結(jié)果一樣,系統(tǒng)的階躍響應為等幅振蕩,不穩(wěn)定。原因是在階躍響應中沒有阻尼,也就是說實際中的車不會倒向一邊,而是在平衡位置附近來回震蕩。這顯然不是我們需要得到的效果。</p><p>  因此在系統(tǒng)中我們加入為微分量,也就是阻尼。在實際中變現(xiàn)為阻礙車模轉(zhuǎn)動的力,類似于摩擦阻力,大小方向與車身角速度有關(guān)。即阻力</p>&

19、lt;p><b>  (7)</b></p><p>  經(jīng)過拉式變換,得到帶阻尼的系統(tǒng)的控制結(jié)構(gòu)圖,如圖9所示:</p><p>  圖9 加入比例微分反饋控制的系統(tǒng)</p><p><b>  系統(tǒng)傳遞函數(shù)為:</b></p><p><b>  (8)</b><

20、;/p><p><b>  此時系統(tǒng)的極點為:</b></p><p><b>  (9)</b></p><p>  根據(jù)自動控制原理穩(wěn)定性分析知識知道,只有系統(tǒng)的2個極點都在s平面的左半平面時系統(tǒng)才是穩(wěn)定的。因此系統(tǒng)必須滿足 。 </p><p>  假設(shè)k2 = 0.5,k1 = 20。利用mat

21、lab仿真。</p><p><b>  仿真代碼如下:</b></p><p>  %程序目的:在比例微分控制的情況下仿</p><p><b>  %真系統(tǒng)的階躍響應</b></p><p>  %author:程順均</p><p>  %時間:2013.8.28<

22、;/p><p>  sys = tf([1],[1,5,100]);</p><p>  t = 0:0.01:3;</p><p><b>  figure(1)</b></p><p>  step(sys,t);grid on;</p><p>  title('比例微分控制時的階躍響應

23、');</p><p><b>  階躍響應曲線如下:</b></p><p>  圖10 比例微分控制的階躍響應曲線</p><p>  從響應的曲線來看比例—微分控制曲線能夠比較收斂下來。在宏觀看來,就是車身能夠很快到我們需要的角度,而不是一直在設(shè)定角度的前后震蕩。</p><p>  研究到此也智能算是解決

24、了直立控制的問題。在實際中往往有很多干擾因素,例如飛思卡爾競賽中賽道上就設(shè)有比賽道高的路障。如果穩(wěn)定性較差的直立車在通過路障的時候,會直接倒下。假設(shè)干擾信號為D(s),D(s)與的關(guān)系為:</p><p><b>  (10) </b></p><p>  這里我們把路障一類的干擾看成是脈沖干擾,D(s) = 1。仿真參數(shù)不變,對干擾進行一次仿真。</p>

25、<p><b>  仿真代碼如下:</b></p><p>  %程序目的:僅在干擾下的輸出響應</p><p>  %author:程順均</p><p>  %時間:2013.8.28</p><p>  sys = tf([0.1 0 -10],[0.1 0.2 10]);</p>&l

26、t;p>  t = 0:0.2:10;</p><p>  figure(1);</p><p>  impulse(sys,t);</p><p><b>  gird on;</b></p><p>  仿真截圖如圖11所示:</p><p>  圖11 系統(tǒng)對脈沖干擾的響應</

27、p><p>  從仿真的圖來看,脈沖干擾會讓本來已經(jīng)穩(wěn)定的系統(tǒng)來回的震蕩,在多次震蕩后才回到比較穩(wěn)定的狀態(tài)。因此比例-微分控制的方式能夠滿足我們的要求。對于一個系統(tǒng)來講,能夠穩(wěn)定下來并不是我們追求的最終目標。接下來將詳細研究系統(tǒng)的優(yōu)化和穩(wěn)定性。</p><p><b>  三.系統(tǒng)控制的優(yōu)化</b></p><p>  飛思卡爾智能汽車競賽中評比成

28、績是以在賽道上跑一圈的時間為唯一依據(jù)的。這要求車在保持穩(wěn)定的前提下以最大的速度前進。系統(tǒng)的響應時間,抗干擾能力都是需要反復調(diào)整的。快的調(diào)整時間,小的超調(diào)量,高的穩(wěn)定性都是我們期望的結(jié)果。</p><p>  3.1 PID調(diào)節(jié)參數(shù)的優(yōu)化</p><p>  一般的系統(tǒng)我們都需要短的調(diào)節(jié)時間,小的超調(diào)量。往往我們是不能兩方面做到極限,但是通過PID參數(shù)的調(diào)節(jié),我們可以得到一個滿意的調(diào)節(jié)過程。

29、</p><p>  為了研究每個參數(shù)的意義,先進行單參數(shù)的研究。P一般是作為比例項,決定了系統(tǒng)的部分響應速度。在這里我們使用一個仿真代碼完成這個仿真。</p><p><b>  仿真代碼見附件1:</b></p><p><b>  Kp的研究</b></p><p>  通過改變系統(tǒng)的Kp,可

30、以得到一系列的仿真圖。這里選取4組做研究。分別為100,400,1000,2000。仿真圖如圖12,13,14,15所示。</p><p>  圖12 Kp = 100時的階躍響應</p><p>  圖13 Kp = 400時的階躍響應</p><p>  圖14 Kp = 1000時的階躍響應</p><p>  圖15 Kp =

31、2000時的階躍響應</p><p>  為了方便對比出他們的不同,這里將他們的響應特征列表出來,如表1所示。</p><p>  表1 Kp對系統(tǒng)性能的影響</p><p>  從表的的數(shù)據(jù)和調(diào)整圖像來看,Kp的值很小的時候,系統(tǒng)的第一次上升達不到我們需要的值,需要積分項才能彌補。這不是我們需要的結(jié)果。而當Kp值很大的時候,上升時間縮短,超調(diào)量也會增大。因此Kp

32、值得選擇主要影響了系統(tǒng)的響應能力。</p><p><b>  Ki的研究</b></p><p>  PID中的I是積分項,主要是消除穩(wěn)態(tài)誤差。下面通過4組不同的參數(shù)的測試研究其作用。Ki的值為100,400,1000,2000的時候的值仿真圖如圖15,16,17,18所示。</p><p>  圖16 Ki=100的穩(wěn)態(tài)誤差</p&

33、gt;<p>  圖17 Ki=400的穩(wěn)態(tài)誤差</p><p>  圖18 Ki=1000的穩(wěn)態(tài)誤差</p><p>  圖19 Ki=2000的穩(wěn)態(tài)誤差</p><p>  從圖像可以看出來,其上升速度和超調(diào)量并無太大的差異。他們的差異主要體現(xiàn)在穩(wěn)態(tài)誤差上了。將四組仿真的穩(wěn)態(tài)誤差在1.5S時取值列表得表2。</p><p&

34、gt;  表2 Ki對系統(tǒng)性能的影響</p><p>  從表的數(shù)據(jù)很明顯的可以看出,增大Ki值可以減小穩(wěn)態(tài)誤差。但是由于系統(tǒng)會受到一些小的干擾,所以Ki的值也并不是越大越好!</p><p><b>  Kd的研究</b></p><p>  在PID調(diào)節(jié)中微分項起預見作用,在系統(tǒng)靠近預期值時可以減小控制輸入量,進而減小超調(diào)量,增強系統(tǒng)的性

35、能。下面同樣通過4組數(shù)據(jù)研究Kd值對系統(tǒng)的影響。Ki分別為10,20,40,60時的仿真圖如圖20,21,22,23所示。</p><p>  圖20 Kd=10的穩(wěn)態(tài)誤差</p><p>  圖21 Kd=20的穩(wěn)態(tài)誤差</p><p>  圖22 Kd=40的穩(wěn)態(tài)誤差</p><p>  圖23 Kd=60的穩(wěn)態(tài)誤差</p&

36、gt;<p>  從圖上我們已經(jīng)可以清晰地看出,Kd值的增大可以減小超調(diào)量,減少進入穩(wěn)態(tài)前的振蕩次數(shù)。下表列出了超調(diào)量和進入穩(wěn)態(tài)前的振蕩次數(shù)表,如表3所示。</p><p>  從表的數(shù)據(jù)可以看出,kd的值過小的時候,系統(tǒng)的超調(diào)量很大,振蕩加劇。Kd的值越大,系統(tǒng)的超調(diào)量越小。但是由于微分量的對高頻噪聲具有放大作用。所以,Kp的值也不是越大越好!</p><p><b&

37、gt;  優(yōu)化的結(jié)果</b></p><p>  前面研究了每個參數(shù)對系統(tǒng)的影響,下面進行一個綜合仿真實驗,從各方面綜合考慮得到一個好的參數(shù)組合。</p><p>  經(jīng)過反復實驗,得到一組參數(shù)Kp = 1500,Ki = 4000.Kd = 100。仿真截圖如圖24所示。</p><p>  圖24 經(jīng)過優(yōu)化的系統(tǒng)的階躍響應</p>&l

38、t;p>  從圖24可以看出,系統(tǒng)的響應速度很快,超調(diào)量小,穩(wěn)態(tài)誤差基本為0。</p><p>  3.2 積分分離PID的應用</p><p>  在普通的PID控制中引入積分環(huán)節(jié)的目的,主要是為了消除靜態(tài)誤差,提高控制精度。但是在過程的啟動,結(jié)束或大幅度增減設(shè)定時,短時間內(nèi)系統(tǒng)輸出有很大的偏差,會造成PID運算的積分積累,致使控制量超時執(zhí)行機構(gòu)可能允許的最大動作范圍內(nèi)對應的極限控

39、制量,引起系統(tǒng)較大的超調(diào),甚至引起系統(tǒng)較大的震蕩,這在實際控制中是不允許的。</p><p>  在車模實際運行過程中,單片機控制系統(tǒng)需要不停地的改變輸入量,以滿足對循跡和調(diào)速的要求。在車模啟動和遇到障礙時,積分量都會飽和,這給車模的控制帶來了麻煩。為此,將要研究優(yōu)化后的PID調(diào)節(jié)器。為了防止積分量對系統(tǒng)控制的影響,有積分分離PID調(diào)節(jié),抗積分飽和PID調(diào)節(jié)等。</p><p>  積分分

40、離PID調(diào)節(jié)的基本思路是:當被控量與設(shè)定量值偏差較大時,取消積分作用,以避免由于積分作用使使系統(tǒng)穩(wěn)定性降低,超調(diào)量增大;當被控量與設(shè)定量接近設(shè)定值時,引入積分控制,以便消除靜態(tài)誤差,提供控制精度。其具體實現(xiàn)步驟如下:</p><p>  根據(jù)實際情況,認為設(shè)定閾值ε;</p><p>  當|error(k) > ε|時,采用PD控制,可避免產(chǎn)生過大的超調(diào),又使系統(tǒng)有較快的響應;&l

41、t;/p><p>  當|error(k) < ε|時,采用PID調(diào)節(jié)控制,以保證系統(tǒng)的控制精度。</p><p>  即積分分離的控制算法可表示為</p><p><b>  (11)</b></p><p>  式中,T為采樣時間,β為積分項的開關(guān)系數(shù)。</p><p>  β =

42、 (12)</p><p>  為了清晰的對比出普通PID調(diào)節(jié)和積分分離PID調(diào)節(jié)的不同,下面用m語言進行仿真,仿真代碼見附件1。</p><p>  為了得到兩者之間的區(qū)別,在程序加了一個變量M,這個變量M 為0的時候使用積分分離,變量M為1的時候使用積分分離。在這里,為了得到好的效果,當誤差大于或等于6的時候取消積分項,即beta = 0;只有當誤差值小于1的時候才使用完全的

43、積分項,即beta = 1;</p><p>  積分分離法主要在有干擾的時候起作用,在無干擾的時候,作用并不明顯。為此,在程序里添加了一個干擾項:</p><p>  if k < 120 & k > 100</p><p>  yd(k) = 200; %輸出期望值</p><p><b>  else<

44、;/b></p><p>  yd(k) = 40;</p><p><b>  end</b></p><p>  此干擾項是一個脈沖形式的干擾,在時間運行到100到120的時候,期望輸出值突然變得很大yd(k)。這個干擾是為了模仿一些路障而設(shè)置的。在小車突然撞到一個路障上時小車的傾角發(fā)生明顯的變化。</p><p&

45、gt;  由于電機等驅(qū)動都有極限,所以為了保護器件,我們在控制程序里面一般會加上保護。為了接近真實的仿真,在這里我們也加入了保護程序,也就是限制控制輸入。限制保護程序如下:</p><p>  if u(k) >= 20000</p><p>  u(k) = 20000;</p><p><b>  end</b></p>

46、<p>  if u(k) <= -20000</p><p>  u(k) = -20000;</p><p>  如果使用普通PID,誤差在這個時間段內(nèi)累積很明顯,在干擾結(jié)束后,誤差過很久才能消失。在真是的系統(tǒng)中,可能系統(tǒng)早已崩潰。仿真如圖12所示。</p><p>  圖12 普通PID系統(tǒng)對干擾的響應</p><p>

47、;  從仿真圖中可以看出,系統(tǒng)在遇到干擾時響應很迅速,在干擾結(jié)束后,需要很長的過渡時間才能過渡。在普通PID的調(diào)節(jié)過程中,遇到干擾時,誤差項會累積起來,影響系統(tǒng)歸正,系統(tǒng)需要花大量的時間來進行調(diào)整。但是長的調(diào)整時間會導致系統(tǒng)直接崩潰。例如,直立車在長時間的電機猛轉(zhuǎn)的情況下,雙輪車的速度很快,不能直立。從這個實驗我們看出,普通PID應對干擾的能力很弱。為此我們將進行積分分離PID的研究。</p><p>  在上面

48、的仿真程序中,只需要將M改為1,即可使用積分分離PID,仿真截圖如圖13所示。</p><p>  圖13 積分分離PID對干擾的響應</p><p>  與圖12進行對比,可以得到表1。</p><p>  表1 普通PID與積分分離PID抗干擾能力的對比</p><p>  在響應峰值上,兩者并無明顯差異,這是因為程序中添加保護程序,限制

49、控制輸入。因此2個系統(tǒng)的峰值輸出相差不大。但是從原理來講,由于普通PID積累了比較大的誤差,所以如果不添加保護,普通PID的響應更迅速。干擾后回歸原位的時間上,兩者相差很大,這說明積分分離PID在抗干擾的能力上強于普通PID。在應用與實際系統(tǒng)中的效果也很好,不至于使系統(tǒng)崩潰。</p><p><b>  四,結(jié)語</b></p><p>  雙輪自平衡智能車的控制屬于

50、典型的自動控制系統(tǒng)。本文研究了雙輪自平衡機器人的系統(tǒng)模型,PID參數(shù)的優(yōu)化以及使用積分分離PID用來抵抗干擾。總體說來,得到了一個很好的控制方式。經(jīng)過實驗室的實踐,得到了很好的實際效果。車模能在賽道上快速的前進,能越過障礙,能上下橋。雙輪智能車的控制可以為雙輪機器人打下基礎(chǔ)。</p><p><b>  參考文獻</b></p><p>  [1] 孫亮,雙輪自平衡機

51、器人行走伺服控制算法[J],控制工程,2009,16(3): 1。</p><p>  [2]胡壽松,自動控制原理簡明教程(第二版)[M],北京:科學出版社,2008.2。</p><p>  [3]劉金琨,先進PID控制matlab仿真(第三版)[M],北京:電子工業(yè)出版社,2011,.3。</p><p>  [4]飛思卡爾競賽秘書處,電磁組直立行車參考設(shè)計方案

52、[J],2012,3。</p><p><b>  附件1:</b></p><p>  PID參數(shù)研究m程序:</p><p>  %程序目的:研究PID參數(shù)的作用</p><p>  %author:程順均</p><p>  %時間:2013.8.31</p><p>

53、;  %積分分離式PID仿真</p><p>  clear all;</p><p>  clear all;</p><p>  ts = 0.005; %控制周期為5ms</p><p>  sys = tf([1],[1 5 100]);%建立系統(tǒng)</p><p>  dsys = c2d(sys,ts

54、,'z');</p><p>  %添加'v'可以讓輸出的值由元胞數(shù)組改為數(shù)組直接輸出</p><p>  [num, den] = tfdata(dsys,'v'); </p><p>  u1 = 0;u2 = 0; %控制器的輸出</p><p>  y1 = 0;y2 = 0; %實際

55、的輸出值</p><p>  error1 = 0; %上次上次誤差</p><p>  ei = 0; %誤差積累</p><p><b>  Kp = 100;</b></p><p>  Ki = 1500;</p><p><b>  Kd = 50;<

56、/b></p><p>  for k=1:1:500</p><p>  time(k) = k * ts;</p><p>  yd(k) = 1;</p><p>  y(k) = - den(2)*y1 - den(3)*y2 + num(2)*u1 + num(3)*u2;</p><p>  err

57、or(k) = yd(k) - y(k); %變化率的計算</p><p>  ei = ei + error(k)*ts; %誤差累積計算</p><p>  u(k) = Kp * error(k) + Ki * ei + Kd * (error(k) - error1)/ts; %PID控制</p><p>  if u(k) >= 20000<

58、/p><p>  u(k) = 20000;</p><p><b>  end</b></p><p>  if u(k) <= -20000</p><p>  u(k) = -20000;</p><p><b>  end</b></p><p&

59、gt;  u2 = u1;u1 = u(k);%記錄上次的值</p><p>  y2 = y1;y1 = y(k);</p><p>  error1 = error(k);</p><p><b>  end</b></p><p>  figure(1);</p><p>  plot(ti

60、me,yd,'r',time,y,'b');</p><p><b>  grid on;</b></p><p>  legend('理想輸出','位置跟蹤');</p><p><b>  附件2:</b></p><p>  路障

61、干擾仿真m程序:</p><p>  %程序目的:對比積分分離PID和普通PID</p><p><b>  %的不同</b></p><p>  %author:程順均</p><p>  %時間:2013.8.31</p><p>  %積分分離式PID仿真</p><p&

62、gt;  clear all;</p><p>  clear all;</p><p>  ts = 0.005; %控制周期為5ms</p><p>  sys = tf([1],[1 5 100]);%建立系統(tǒng)</p><p>  dsys = c2d(sys,ts,'z');</p><p&

63、gt;  %添加'v'可以讓輸出的值由元胞數(shù)組改為數(shù)組直接輸出</p><p>  [num, den] = tfdata(dsys,'v'); </p><p>  u1 = 0;u2 = 0; %控制器的輸出</p><p>  y1 = 0;y2 = 0; %實際的輸出值</p><p>  error

64、1 = 0; %上次上次誤差</p><p>  ei = 0; %誤差積累</p><p>  M = 1; %選擇是否使用積分分離</p><p>  Kp = 1000;</p><p>  Ki = 3000;</p><p><b>  Kd = 50;</

65、b></p><p>  for k=1:1:500</p><p>  time(k) = k * ts;</p><p>  if k < 120 & k > 100</p><p>  yd(k) = 200; %輸出期望值</p><p><b>  else</b&g

66、t;</p><p>  yd(k) = 40;</p><p><b>  end</b></p><p>  y(k) = - den(2)*y1 - den(3)*y2 + num(2)*u1 + num(3)*u2;</p><p>  error(k) = yd(k) - y(k); %變化率的計算</

67、p><p>  ei = ei + error(k)*ts; %誤差累積計算</p><p>  if 1 == M %使用積分分離</p><p>  if abs(error(k)) >= 6 </p><p>  beta = 0; %積分分離 </p><p>  elseif abs(e

68、rror(k)) >= 2 & abs(error(k)) < 4</p><p>  beta = 0.2; %積分分離 </p><p><b>  else</b></p><p>  beta = 1.0;</p><p><b>  end</b>&l

69、t;/p><p>  elseif 0 == M</p><p>  beta = 1.0;</p><p><b>  end</b></p><p>  u(k) = Kp * error(k) + beta * Ki * ei + Kd * (error(k) - error1)/ts; %PID控制</p>

70、;<p>  if u(k) >= 20000</p><p>  u(k) = 20000;</p><p><b>  end</b></p><p>  if u(k) <= -20000</p><p>  u(k) = -20000;</p><p><b

71、>  end</b></p><p>  u2 = u1;u1 = u(k);%記錄上次的值</p><p>  y2 = y1;y1 = y(k);</p><p>  error1 = error(k);</p><p><b>  end</b></p><p>  fig

72、ure(1);</p><p>  plot(time,yd,'r',time,y,'b');</p><p><b>  grid on;</b></p><p>  legend('理想輸出','位置跟蹤');</p><p><b>  附件

73、3:</b></p><p>  普通PID 算法C語言實現(xiàn)代碼:</p><p>  #include "common.h"</p><p>  #include "pid.h"</p><p>  int VV_MAX =4400; //電機PID輸出上限 </p>&

74、lt;p>  int VV_MIN =2000; //電機PID輸出下限</p><p><b>  PID sPID;</b></p><p>  void v_PIDInit ()</p><p><b>  {</b></p><p>  sPID.vi_Ref = 0 ;

75、 //速度設(shè)定值</p><p>  sPID.vi_FeedBack = 0 ;//速度反饋值</p><p>  sPID.vi_PreError = 0 ; //前一次,速度誤差,,vi_Ref - vi_FeedBack</p><p>  sPID.vi_PreDerror = 0 ; //前一次,速度誤差之差,d_error-Pr

76、eDerror;</p><p>  sPID.v_Kp =20; //d_error 第一次偏差 500</p><p>  sPID.v_Ki =14; // error 最初反饋值 600</p><p>  sPID.v_Kd =10; //dd_error 第二次偏差 100</p><p

77、>  sPID.motor_PreU = 2400;//電機控制輸出值</p><p><b>  }</b></p><p>  int v_PIDCalc( PID *pp )</p><p><b>  { </b></p><p>  int error,d_error

78、,dd_error; </p><p>  error =(int)(pp->vi_Ref) - ( int)(pp->vi_FeedBack) ;// 偏差計算</p><p>  d_error = error - (int)(pp->vi_PreError);</p><p>  dd_error = d_error - (int)

79、pp->vi_PreDerror;</p><p>  pp->vi_PreError = error;//存儲當前偏差</p><p>  pp->vi_PreDerror = d_error; </p><p>  if( ( error < VV_DEADLINE ) && ( error > -VV_DEA

80、DLINE ) );//設(shè)置調(diào)節(jié)死區(qū)</p><p>  else//速度PID計算</p><p><b>  { </b></p><p>  pp->motor_PreU += (int)(pp -> v_Kp * d_error+ pp -> v_Ki * error+ pp->v_Kd*dd_

81、error)/10;</p><p><b>  }</b></p><p>  if( pp->motor_PreU >= VV_MAX ) //速度PID,防止調(diào)節(jié)最高溢出</p><p><b>  {</b></p><p>  pp->motor_PreU = VV_

82、MAX;</p><p><b>  }</b></p><p>  else if( pp->motor_PreU <= VV_MIN)//速度PID,防止調(diào)節(jié)最低溢出 </p><p><b>  {</b></p><p>  pp->motor_PreU =VV_MIN;

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論