<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 模擬技術 > 設計應用 > 基于模型的嵌入式PID控制器設計

          基于模型的嵌入式PID控制器設計

          作者: 時間:2016-10-29 來源:網(wǎng)絡 收藏

          摘要:在嵌入式控制系統(tǒng)中,PID控制器應用廣泛。鑒于實時性和同步性的要求,傳統(tǒng)的PID控制器通常采用手工編程來實現(xiàn)。該種實現(xiàn)方式,費時費力,可靠性低,后期的驗證測試過程繁雜。為解決該方法不足,本文研究了基于模型的高安全性應用程序開發(fā)環(huán)境-,按照的軟件程序設計流程,完成了PID控制器的設計、開發(fā)與性能測試,并通過代碼的效率測試,驗證了進行嵌入式軟件開發(fā)的優(yōu)越性。

          本文引用地址:http://www.ex-cimer.com/article/201610/307824.htm

          關鍵詞:SCADE;PID;建模;;

          在過程控制和運動控制系統(tǒng)中,特別是在嵌入式控制系統(tǒng)中,PID(比例-微分-積分)控制器因其結構簡單,物理意義明確,使用中不需精確的系統(tǒng)模型等先決條件應用廣泛。鑒于嵌入式控制系統(tǒng)設計的嚴格要求,傳統(tǒng)的嵌入式PID控制器通常采用手工編程來實現(xiàn)。該種實現(xiàn)方式費時費力,可靠性低。為解決傳統(tǒng)設計方法不足,本文研究了基于模型的高安全性應用程序開發(fā)環(huán)境-SCADE的技術特點,在該環(huán)境下完成了PID控制器的設計與仿真,并對生成的代碼進行了分析和效率測試。最終表明,該設計方法切實有效。

          1 SCADE軟件設計流程

          SCADE(Safety-Critical Application Develooment Environment)是Esterel Teclmologies公司研制的一套高安全性的嵌入式軟件開發(fā)環(huán)境,針對嵌入式軟件的特點,運用Correct By Construction的設計理念,提供了一種基于模型的圖形化開發(fā)方式,覆蓋了從需求分析到代碼實現(xiàn)的整個軟件開發(fā)流程。

          SCADE提供了一系列的開發(fā)工具套件,實現(xiàn)了直觀的圖形化需求建模,基于模型的仿真驗證,標準C代碼自動生成、開發(fā)文檔自動生成等多種功能。其嚴謹?shù)慕@碚摵徒?jīng)過高安全性標準鑒定器KCG,保證了軟件需求到產品代碼的高度同步。軟件設計流程如圖1所示。

          2 PID控制器設計

          在模擬控制系統(tǒng)中,控制器最常用的規(guī)律是PID控制。常規(guī)PID控制系統(tǒng)由PID控制器和被控對象組成,具體如圖2所示。

          PID控制器是一種線性控制器,它根據(jù)給定值與實際輸出值構成控制偏差,將偏差的比例(P),積分(I)和微分(D)通過線性組合,構成控制量對被控對象進行控制。其控制規(guī)律為

          式中,u(t)為進入受控對象的控制變量;e(t)為誤差信號,e(t)=r(t)-y(t),r(t)為給定參考輸入值。由于計算機控制是一種采樣控制,根據(jù)采樣時刻的偏差值直接計算控制量,必須進行離散處理,用求和的形式代替積分,用增量的形式代替微分。式(1)離散化得:

          由式(2)在SCADE中構造PID控制器,其結果如圖3所示,其中控制參數(shù)Kp、Ki、Kd和誤差ek為輸入,uk為輸出,t為采樣時間。

          3 PID控制系統(tǒng)實現(xiàn)

          本控制系統(tǒng)中,被控制對象傳遞函數(shù)

          ,其中J=0.0067,D=0.10經(jīng)離散化后得:

          由式(3)在SCADE中構造控制對象如圖4所示,Uk為輸入,Yk為輸出。

          最后,由PID控制器和被控制對象,按照圖2所示的結構圖,構造閉環(huán)控制系統(tǒng)。

          4 仿真分析

          利用SCADE Editor完成系統(tǒng)建模后,進入到模型的仿真分析階段。SCADE提供了一系列的驗證機制,來確保軟件需求模型描述的正確性和安全性,包括模型靜態(tài)檢查,、覆蓋率分析,形式驗證等等。本文首先利用SCADE模型靜態(tài)檢查功能,確保模型無基本語語義錯誤后,使用SCADESimulator進行仿真分析驗證控制率,然后通過SCADE內置的器生成C代碼,進一步對代碼進行效率分析測試。

          4.1 模型仿真

          根據(jù)PID的特性,Kp影響系統(tǒng)的響應速度和精度,Ki影響系統(tǒng)的穩(wěn)態(tài)精度,Kd會對系統(tǒng)的動態(tài)特性有影響。據(jù)此,對PID控制參數(shù)進行整定,得到Kp=8.0,Ki=0.0,Kd= 0.5。設階躍響應r=1.0,采樣時間為0.005秒。輸入相應的控制參數(shù),調用SCADE Simulator仿真環(huán)境,得到的系統(tǒng)階躍響應仿真曲線如圖5所示(橫坐標單位ms)。

          i.jpg

          4.2 代碼測試

          SCADE內置的代碼生成器KCG可以自動生成ANSI C的嵌入式產品代碼,且代碼是完全面向工程的產品代碼,可以直接嵌入到產品中去而不需要做任何修改。因為SCADE模型基于嚴格的數(shù)學理論,它能保證代碼運行的結果和仿真結果完全一致,并且該代碼生成器通過了軍工及航空業(yè)及能源業(yè)相關標準的鑒定。

          此前軟件設計人員手工編寫代碼,在后期驗證階段要花費大量的時間來驗證程序的正確性和規(guī)范性。使用SCADE之后,只要模型級別仿真測試無誤,那么后續(xù)該部分的代碼單元測試可以省略。另外,SCADE提供了模型級別的覆蓋率分析,對于代碼的覆蓋率分析也可以在模型級別完成。這樣,勢必能在很大程度地節(jié)省驗證工作和驗證時間。

          為了完成代碼的效率測試分析,在前面系統(tǒng)仿真結果正確的基礎上,通過SCADE KCG自動生成C代碼。生成的軟件代碼可以直接在VC等C語言開發(fā)工具下進行正確編譯,添加主函數(shù)后,代碼即可直接運行。此處,在主函數(shù)內添加clock 函數(shù),用以計算程序執(zhí)行一定步數(shù)所消耗的時間。主函數(shù)如下:

          j.jpg

          k.jpg

          對代碼進行編譯運行,在相同環(huán)境下,將生成的代碼與手寫代碼進行比較,得到結果如表1所示:

          l.jpg

          通過表1可以看出,SCADE生成的代碼與手寫代碼在運行相同步數(shù)的情況下,所耗費的時間基本一致,代碼執(zhí)行效率略高。

          通過分析SCADE生成代碼發(fā)現(xiàn),代碼中每個變量在作用域內僅賦值一次,代碼內無遞歸調用,無死循環(huán),無動態(tài)指針,無動態(tài)內存分配。因此,在同樣的測試標準下,SCADE生成的代碼失效率比手寫代碼要小很多,相應安全性也更高。

          5 結論

          本文研究了基于模型的軟件開發(fā)環(huán)境SCADE的技術特點和開發(fā)流程,在SCADE下完成了PID控制系統(tǒng)的設計、仿真、測試。通過案例研究表明,采用SCADE進行嵌入式軟件開發(fā),將軟件開發(fā)流程的重點由編碼階段提前到設計階段,這樣更易于在設計早期發(fā)現(xiàn)不足。模型設計完成后,通過代碼生成器自動生成代碼,可在很大程度上減少開發(fā)時間和可發(fā)成本,提高開發(fā)效率。而且,SCADE生成的代碼滿足一系列的安全特性,可讀性良好,和手寫代碼效率相當。因此,SCADE在高可靠性的嵌入式軟件設計領域,應用前景廣泛。



          評論


          相關推薦

          技術專區(qū)

          關閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();