日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

电机PID实验--一文让你看透PID​

發布時間:2025/4/5 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 电机PID实验--一文让你看透PID​ 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在對無人機,平衡車,智能車,倒立擺的學習過程中,我們可以常常聽到一個比較常見的詞-PID,那么PID到底是什么呢,到底它有什么作用呢?在這篇文章中我制作了一個基本的電機控制器,來探究PID的原理以及如何去使用它。


首先我們要明確一下實驗的目標,就是我要可以控制我的電機旋轉任意角度,在旋轉的過程中,電機需要保持穩定并且不會出現震蕩的情況。

電機的選擇

要想完成這個實驗,單片機需要對電機進行比較精確的控制,從電機那獲得電機的轉速以及位置等信息。所以需要使用帶有編碼器的直流電機,通過編碼器,單片機即可獲得電機的轉速以及位置信息。市面上售賣的編碼器電機一般分為霍爾或者光電編碼器的,在這里我選擇的是一款來自DFRobot減速比為120的TT編碼器電機


根據官網給出的數據手冊,他的編碼器一圈可以輸出16個脈沖信號,經過減速箱后,輸出軸旋轉一圈可以輸出16*120=1920個脈沖信號。

買回來的電機一共有六根線,左邊4根為編碼器的線,右邊兩根為電機的線


電機驅動芯片

電機驅動芯片我選擇的是L293D,這是一個雙路的H橋有刷電機驅動芯片,使用2個輸入引腳以及一個使能腳就可以控制一路電機正反轉以及調速。



單片機

單片機用的是STM32F103C8T6系列的核心板,某寶有售。對于這款單片機來說,其定時器支持編碼器信號輸入,所以我只需要把電機的編碼器輸出引腳連接到定時器的的編碼器輸入引腳即可,即可實現定時器自動計數

把這些材料準備好之后,我設計了一個電路圖

根據這個電路圖,我在一塊洞洞板上焊接好了電路


到這里,整個電路部分就制作好了,接下來是軟件部分

PID控制器

PID控制器的名稱其實就解釋了它的基本原理,PID分別是三個單詞的縮寫,P(Proportion)I(Integration)D(Differential),那么解釋成中文意思就是比例、積分、微分控制器。如下圖所示


其中,最左側作為PID控制器的輸入,最右側作為PID控制器的輸出,我們可以看到在輸出端又有一個箭頭指向了輸入端的累加器,并且其符號是負的,這也就說明了PID控制器是具有負反饋的,同時此時的誤差信號就為輸入信號減去輸出信號。通俗來說,拿我們實驗目的來舉例子就是當電機旋轉角度過多了,PID控制器會控制其轉回到原來角度。


在經過累加器之后,誤差信號就被分為了三部分,比例運算,積分運算和微分運算。其中比例運算直接將誤差信號乘以Kp值,積分運算中將每次的誤差積分之后乘以Ki值,微分運算中則是將誤差信號的導數乘以Kd。其中Kp,Ki,Kd都是常數,根據不同的系統我們需要調整這三個不同的參數,下面我來從數學的角度說明一下各個運算對于輸出的貢獻。

當誤差信號較大時,P項會積極的對輸出做出響應,貢獻最大的值,所以此時P項占據輸出的主要成分。當誤差信號處于快速變化中的時候,D項微分運算會對輸出做出較大貢獻。而I項扮演著校準的角色,當系統的每次細小誤差累積起來后,I項就會修正這個誤差。

所以總的來看,PID控制器的精髓就是三個運算過程。而在這個實驗中,我想要控制電機旋轉到特定的角度,那么我的輸入就為我想要旋轉的角度,經過使用PID控制器進行運算之后,他就會輸出一個PWM值去控制電機運動,并且在這同時編碼器會不斷反饋當前位置。經過這樣不斷的使用PID控制器進行計算,進而我的電機就可以快速穩定的轉到我指定角度。


代碼的實現

值得注意的是,對于上面PID結構圖中提到的三部分運算公式(比例,微分與積分)它都是對于連續信號來進行的操作,對于單片機來說,處理連續信號顯然是不可能的??尚械霓k法就是每隔一定時間運行一次PID算法,所以對于離散的位置PID算法來說,其公式如下


對于三個變量來說,它們的計算方法如下

那么接下來就是實現整個程序了,由于我使用的單片機小板沒有串口通信芯片,不利于后期調試,所以我使用STM32自帶的一個USB接口模擬串口通信。接下來新建一個STM32工程,并添加相關的外設初始化代碼(電機編碼器等)。


接下來我根據上文提到的PID計算公式,編寫了PID運算函數。

為了定時運行PID算法,我設置了一個5ms的定時器,這樣每次到了定時器中斷時候,就可以運行PID算法了。從定時器的中斷函數中我們可以看到,每次的處理過程就是將當前位置和目標位置送入PID運算器并且得到輸出后,送入電機的控制函數中即可。


而在電機的控制函數Output中,其內容如下

通過PID控制器輸出的值來控制電機的旋轉方向,然后對PID輸出的值進行限幅,最后賦值給PWM發生器即可。

實驗

接下來我們開始實驗,首先我們將PID控制器的I和D參數全部調節為0,將Kp設置為一個較小值,接著編譯工程并且燒錄到STM32中。


給STM32上電,STM32使用USB模擬串口需要安裝一個軟件,我會附到文末資料中。打開串口調試助手,輸入h加上回車,點擊發送,幫助信息會被打印出來??梢钥吹街С值闹噶畎ㄗx取編碼器位置,修改PID參數以及左右旋轉等等。

接著在串口調試助手中發送L90加回車,觀察到電機轉動過了九十度,但是電機出現晃動的情況,并且響應速度也較慢

接著增大Kp值,直到晃動幅度減小并且電機響應速度逐漸增快,在目標位置附近抖動時,我們開始增大Kd值去抑制在目標位置附近的抖動。當調整到Kp值為500,Kd值為900時,電機晃動情況大幅改善。

雖然抖動問題解決了,但是經過多次旋轉之后,電機的誤差逐漸顯現出來,旋轉一周后沒法回到原點。

所以接下來增加Ki值,建議Ki值增加幅度不要過大,一般在零點幾的范圍。這里我設置Ki值為0.01,以修正每次旋轉之后產生的誤差。
到這里,PID參數調整的基本就差不多了,電機可以很好的執行我的指令。

改進

我發現當我的旋轉角度設定到很大的值時候,電機會先以滿速轉動,然后會逐步減速直到我的設定位置。這就帶來一個問題,當電機滿速的時候,PWM的占空比為100%,這時候電機等于直接接在電源兩端,此時電機的轉速我們沒法控制,那么如果這時候電源電壓不穩,電機轉速勢必會產生變化,造成轉動的不穩定,這當然不是我想看到的。所以這時候就需要引入速度環了。


由于電機轉動起來之后會具有一定的慣性,那么他的速度就不可能產生突變,所以在速度環控制器中,我只采用了PI控制。速度環控制器用于控制電機在轉動過程中的速度,那么它將會處于位置環控制器的內部,最終實現的代碼如下。






點擊“閱讀原文”, ?查看完整內容獲取資料下載入口!

總結

以上是生活随笔為你收集整理的电机PID实验--一文让你看透PID​的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。