在縣城怎么做網(wǎng)站公司seo教程優(yōu)化
PID控制原理
PID控制原理是一種廣泛應(yīng)用于工業(yè)自動(dòng)化和其他領(lǐng)域的控制算法。PID控制器的名字來(lái)源于其三個(gè)主要組成部分:比例(Proportional)、積分(Integral)和微分(Derivative)。PID控制器實(shí)現(xiàn)的是輸入信號(hào)和期望信號(hào)的零誤差。比例控制就是對(duì)誤差成比例放大,讓輸出信號(hào)按照線性規(guī)律接近期望值,比例控制的目的就是讓輸出值無(wú)限接近期望值;積分控制就是對(duì)誤差隨著時(shí)間的積分值按一定比例輸出,讓輸出信號(hào)能夠到達(dá)期望值,積分控制的目的就是讓輸出值在期望值附近振蕩;微分控制就是對(duì)誤差的變化按一定比例輸出,微分控制的目的就是為了消除振蕩,讓輸出信號(hào)保持穩(wěn)定。完整的PID控制就是將比例控制的輸出值、積分控制的輸出值和微分控制的輸出值加起來(lái)。讓輸出的信號(hào)等于期望信號(hào),并保持穩(wěn)定。
位置速度環(huán)PID原理
位置速度環(huán)控制如上圖所示,輸入信號(hào)是期望的目標(biāo)位置,輸出是電機(jī)的驅(qū)動(dòng)信號(hào),控制電機(jī)的旋轉(zhuǎn)啟停、旋轉(zhuǎn)速度。通過(guò)旋轉(zhuǎn)編碼器作為傳感器獲取電機(jī)的轉(zhuǎn)動(dòng)情況,并經(jīng)過(guò)一定的計(jì)算過(guò)程得到實(shí)際轉(zhuǎn)軸的位置以及實(shí)際轉(zhuǎn)軸的速度。
內(nèi)環(huán)是速度環(huán),內(nèi)環(huán)的輸入是速度誤差,就是期望速度減去實(shí)際轉(zhuǎn)軸速度,速度誤差輸入到速度PID控制器中經(jīng)過(guò)計(jì)算得到輸出值,該輸出值就是對(duì)電機(jī)驅(qū)動(dòng)信號(hào)的控制,電機(jī)的控制一般以PWM信號(hào)來(lái)控制,于是輸出值就是PWM信號(hào)的占空比。
外環(huán)是位置環(huán),上述內(nèi)環(huán)中的期望速度其實(shí)就是外環(huán)的輸出,是通過(guò)外環(huán)計(jì)算出來(lái)的而不是固定的,外環(huán)的輸入是位置誤差,就是期望位置減去實(shí)際轉(zhuǎn)軸位置。外環(huán)的輸入就是電機(jī)最終期望達(dá)到的位置。
內(nèi)環(huán)和外環(huán)的關(guān)系有兩點(diǎn)需要注意:第一點(diǎn)是內(nèi)環(huán)的期望值,也就是輸入,是外環(huán)PID計(jì)算后得到的輸出;第二點(diǎn)是外環(huán)控制對(duì)象是內(nèi)環(huán)控制對(duì)象的積分,這里外環(huán)的控制對(duì)象是實(shí)際轉(zhuǎn)軸的位置,內(nèi)環(huán)的控制對(duì)象是實(shí)際轉(zhuǎn)軸的速度,它倆存在一個(gè)積分的關(guān)系。
代碼解析
實(shí)踐是檢驗(yàn)真理的唯一標(biāo)準(zhǔn)。下面用實(shí)際使用過(guò)的代碼來(lái)解釋一下位置速度環(huán)PID的實(shí)現(xiàn)過(guò)程。
硬件方面,主控選擇的是STM32單片機(jī),電機(jī)驅(qū)動(dòng)模塊選擇TB6612模塊還有電機(jī)及編碼器。軟件方面,選擇利用CubMX生成HAL庫(kù)的工程,具體生成過(guò)程大同小異。
首先第一步是獲取電機(jī)編碼器的脈沖數(shù),這里通過(guò)STM32內(nèi)部的計(jì)數(shù)器實(shí)現(xiàn)。在總的定時(shí)器回調(diào)函數(shù)中,htim7是20ms的定時(shí)器,如下圖所示,每20ms進(jìn)入中斷函數(shù)一次。
首先獲取電機(jī)每20ms內(nèi)電機(jī)編碼器輸出脈沖數(shù)。hitm3和htim8都設(shè)置為encoder mode,即定時(shí)器編碼器模式,獲取兩個(gè)電機(jī)編碼器的脈沖值。獲取到的脈沖值用于計(jì)算實(shí)際轉(zhuǎn)軸的位置和速度。
后再看總的位置速度環(huán)PID控制函數(shù)Location_Speed_control()??偟腜ID控制函數(shù)的關(guān)鍵部分包括位置環(huán)PID控制函數(shù)location_pid_control()和速度環(huán)PID控制函數(shù)speed_pid_control()。
有了實(shí)際速度之后,再通過(guò)速度環(huán)PID運(yùn)算函數(shù)speed_pid_realize得到PID輸出控制值。該函數(shù)通過(guò)一個(gè)結(jié)構(gòu)體傳遞目標(biāo)值、誤差、上一個(gè)偏差值、PID系數(shù)以及積分值等參數(shù),這些參數(shù)中,目標(biāo)值是通過(guò)位置環(huán)PID運(yùn)算函數(shù)計(jì)算得到的,PID系數(shù)是要提前設(shè)置好的。
速度環(huán)PID運(yùn)算函數(shù)speed_pid_realize得到PID輸出控制值其實(shí)就是PWM輸出。如下圖所示,speed_Outval和speed2outval就是速度環(huán)PID運(yùn)算函數(shù)的計(jì)算結(jié)果,它們的值傳入MotorOutput電機(jī)輸出函數(shù)中。
在MotorOutput電機(jī)輸出函數(shù)中,主要是判斷方向以及限制PWM輸出上限值。
最后我們?cè)俳榻B一下位置環(huán)PID控制函數(shù)location_pid_control()。該函數(shù)也需要通過(guò)編碼器脈沖數(shù)先獲取電機(jī)轉(zhuǎn)軸實(shí)際位置。
有了實(shí)際位置后,通過(guò)location_pid_realize函數(shù)調(diào)用位置PID結(jié)構(gòu)體和實(shí)際位置計(jì)算得到目標(biāo)速度,目標(biāo)速度輸出給速度環(huán)的輸入,這樣就完成閉環(huán)了。
其他說(shuō)明
上述介紹的代碼在電子設(shè)計(jì)競(jìng)賽中實(shí)際應(yīng)用過(guò),可以穩(wěn)定運(yùn)行,需要相關(guān)文件用于借鑒學(xué)習(xí)可以私聊。