以前做比賽的時候初步了解過pid,但是沒事沒有仔細去學習,後面一直想學都沒時間,只是偶爾去了解下,現在終於有時間學習順便做下記錄。
stm32f103c8t6微控制器
某寶買的編碼電機
tb6612電機驅動
首先是微控制器時鐘和中斷設定,然後電機運轉需要兩個io口形成電壓差控制電機正反轉。一路pwm控制轉速。具體是
有了驅動以後還需要電機反饋。因為電機自帶了霍爾編碼器,能夠輸出兩路具有相位差的方波因此通過m/t法可以測速。
最後是整個系統控制,我開了乙個10ms的定時器1獲取此刻的電機的轉速,然後通過pid計算以後設定電機的pwm。
具體io情況是
pb12->ain1
pb13->ain2
pb1 ->pwma
pa0,pa1連線電機編碼器
下面貼出先關**
int tim1_up_irqhandler
(void
)return0;
}//獲取電機位置
int position_pid
(int encoder,int target)
最後就是引數整定,最好結合圖形這樣效果更好。 基於STM32進行電機PID調速(一)
使用stm32,l298n驅動與可編碼減速電機進行電機pid調速。為什麼要pid調速?直接接電源的電機存在執行時阻力的變化 外力等因素,通常不能維持在恆定速度,可能肉眼覺得接上恆定電源電機速度也恆定,但對於車來說,四個電機不可能做到輸入相同電壓達到相同轉速,因此通過pwm動態調整。而pid演算法就是...
stm32控制電機
使用埠gpioa來連線電機,所以給gpioa程式設計就可以控制電機。使用系統時鐘systick來週期性的給電機傳送脈衝。用四個按鈕來控制需要傳送脈衝的個數,每個按鈕被按下就設定給電機傳送脈衝的個數,如果上一次給電機傳送的脈衝沒有傳送完成,這次按鈕傳送的脈衝將不被響應。由於需要控制兩個電機,所以將gp...
STM32除錯PID心得
近來從機械轉為電子開始除錯底盤,底盤的控制程式已寫好,我要做的工作主要是調引數。看過很多pid的書,理論基本一樣響應慢就加大p值,而在速度控制中基本都不用d即微分,因為電機速度太快了,d值起不了作用的。相應的誤差較大時則增大i值。道理就是這麼個理兒。但可能很多人都不知道p值是有兩個的乙個加速用,乙個...