Arduino結合PID控制算法實現跟隨運動


Arduino是很火的開源硬件平台之一,今天利用Arduino結合PID控制算法來實現位置跟隨運動。

實驗初步硬件平台如下:

 

位置檢測元件使用的是一個夏普紅外傳感器,其技術規格如下所示

  • 信號類型:模擬輸出
  • 探測距離:4-30cm
  • 工作電壓:4.5~5.5V
  • 標准電流:33mA
  • 接口類型:PH2.0-3P
  • 最大尺寸:40x20x13.5 mm

由於位置傳感器輸出的是模擬量,需要在通過Arduino接收后再轉化為數字量,使用的Arduino UNO如下圖所示, 

 

傳感器的輸出量的參考轉換代碼如下

void loop ()

{

uint16_t value = analogRead (pin);       

if (value < 16) 

value = 16;

distance= 2076.0 / (value - 11.0);}

其中pin為模擬量輸入引腳號(A0-A5),distance為轉換成的數字量。

PID算法

作為一名電子從業者,應該都對PID算法不陌生,作為改變世界的十大算法之一,也許只有你自己接觸后,才會有更深的體會。筆者認為,PID算法能夠使閉環控制系統能夠更快更好的實現我們的預期功能,先介紹下我們的算法原型:

 

上面所示的是PID控制原理框圖,我們需要將其在程序中離散化

 

 

這樣看似高深的東西可以簡化為每次采樣完成后的計算輸出,我們計划采用u作為控制器的控制量,控制電機的轉動,電機的輸出速度與輸入電壓成正比例關系,擬采用電機轉動的位置來模擬最終的調節量,如果傳感器檢測到目標位置,電機將停止轉動。

基於Arduino的PID測距控制(二)

在上期的blogger中,筆者講述了如何使用Arduino和夏普紅外傳感器來檢測距離。並就PID的基本理論進行闡述。在本期blogger中,筆者將以電機的控制電壓量變化演示如何實現PID反饋閉環控制。

下圖是控制原理框圖

 

 

由於不知道控制對象具體的理論傳遞函數,我們在進行PID參數的選取時進行了若干次的嘗試,直到相對滿意時為止。

如何定義一個ms采樣周期?

Arduino的millis()函數能夠獲取arduino從開始運行到現在的程序之后的毫秒數,返回值為unsignd long型。通過設置一個timechang=now-lasttime,閾值設為100時,即表示100ms的時間間隔。

定義采樣周期計算Arduino的輸出值

那么如何將PID計算輸出呢?

   up=Kp*error;

   ud=Kd*(error-error_1)/Ts;

   ui=ui_1+Ki*error*Ts;

輸出u=up+ud+ui,Ts表示采樣周期,error為當前檢測到距離距離目標位移的差值,而error_1為上一次采樣的差值,這樣既可以將上期bloggger中的離散控制算法轉換為C語言。

監控Arduino的控制量

通過Serial.print (),通過Arduino的Serial Monitor顯示出來。

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM