功能介紹放開頭, 使用便捷無(wú)需愁
這是全網(wǎng)最詳細(xì)、性價(jià)比最高的STM32實(shí)戰(zhàn)項(xiàng)目入門教程,通過(guò)合理的硬件設(shè)計(jì)和詳細(xì)的視頻筆記介紹,硬件使用STM32F103主控資料多方便學(xué)習(xí),通過(guò)3萬(wàn)字筆記、12多個(gè)小時(shí)視頻、20多章節(jié)代碼手把手教會(huì)你如何開發(fā)和調(diào)試。讓你更快掌握嵌入式系統(tǒng)開發(fā)。
V3.3.0-STM32智能小車
視頻: https://www.bilibili.com/video/BV16x4y1M7EN/?spm_id_from=333.337.search-card.all.click
V3:HAL庫(kù)開發(fā)、功能:PID速度控制、PID循跡、PID跟隨、遙控、避障、PID角度控制、視覺控制、電磁循跡、RTOS等功能。
第九章-PID整定方法
9.1-調(diào)整合適的采樣周期和PID調(diào)參方法
正如之前所說(shuō),現(xiàn)在我們PID控制函數(shù)是在主函數(shù)中循環(huán)調(diào)用,這樣的調(diào)用方式并不能保證實(shí)時(shí)性,不能保證周期得到調(diào)用
所以我們要把PID控制函數(shù)放到中斷里面定時(shí)執(zhí)行,那么如何放到中斷里面執(zhí)行,執(zhí)行的周期是多少合適那?
if(TimerCount %10 ==0)//每20ms一次
{
Motor_Set(PID_realize(&pidMotor1Speed,Motor1Speed),0);
TimerCount=0;
}
}
燒錄測(cè)試一下,是否可以改變波形和調(diào)整參數(shù)
借助上位機(jī)調(diào)節(jié)PID
- 調(diào)節(jié)P 把I=0、D=0先給正值或負(fù)值值測(cè)試P 正負(fù)、然后根據(jù)PID函數(shù)輸入和輸出估算P 大小,然后I=0 D=0去測(cè)試,調(diào)節(jié)一個(gè)較大值
- 調(diào)節(jié)I 把P等于前面的值 然后測(cè)試I給較大正值和負(fù)值 測(cè)試出I正負(fù),然后I從小值調(diào)節(jié),直到?jīng)]有偏差存在
- 一般系統(tǒng)不使用D
然后當(dāng)前系統(tǒng)特點(diǎn) :I 對(duì)于系統(tǒng)更重要
下面我們調(diào)節(jié)I
給一個(gè)較小的i 發(fā)現(xiàn) 有一個(gè)大的超調(diào),我們就減少p 、減小一半p
下面是減少一半p 的效果
這個(gè)效果還可以
整理雙電機(jī)速度控制
首先我們的需要是控制兩個(gè)電機(jī),那么這兩個(gè)電機(jī)的特點(diǎn)不同,他們的P I D 參數(shù)不同,要控制不同的目標(biāo)速度,那么他們的目標(biāo)值、實(shí)際值、偏差等都會(huì)不同,所以我們的PID函數(shù)就要能夠根據(jù)輸入?yún)?shù)控制電機(jī)
我們?cè)黾觮Pid 類型函數(shù)的定義用于控制電機(jī)
tPid pid1_speed;//電機(jī)1的轉(zhuǎn)速控制
tPid pid2_speed;//電機(jī)2的轉(zhuǎn)速控制
//初始化PID參數(shù)
void PID_init()
{
pid1_speed.actual_val=0.0;//初始化電機(jī)1轉(zhuǎn)速PID 結(jié)構(gòu)體
pid1_speed.target_val=0.0;
pid1_speed.err=0.0;
pid1_speed.err_last=0.0;
pid1_speed.err_sum=0.0;
pid1_speed.Kp=0.0;
pid1_speed.Ki=0.0;
pid1_speed.Kd=0.0;
pid2_speed.actual_val=0.0;//初始化電機(jī)2轉(zhuǎn)速PID 結(jié)構(gòu)體
pid2_speed.target_val=0.0;
pid2_speed.err=0.0;
pid2_speed.err_last=0.0;
pid2_speed.err_sum=0.0;
pid2_speed.Kp=0.0;
pid2_speed.Ki=0.0;
pid2_speed.Kd=0.0;
}
更改一下PID函數(shù),這里我們使用結(jié)構(gòu)體作為函數(shù)地址
訪問因?yàn)槭堑刂?,訪問結(jié)構(gòu)體變量要用->
float PID_realize(tPid * pid,float actual_val)
{
pid- >actual_val = actual_val;//傳遞真實(shí)值
pid- >err = pid- >target_val - pid- >actual_val;//目標(biāo)值減去實(shí)際值等于誤差值
pid- >err_sum += pid- >err;//誤差累計(jì)求和
//使用PID控制
pid- >actual_val = pid- >Kp*pid- >err + pid- >Ki*pid- >err_sum + pid- >Kd*(pid- >err - pid- >err_last);
//保存上次誤差:最近一次 賦值給上次
pid- >err_last = pid- >err;
return pid- >actual_val;
}
更改主函數(shù),對(duì)PID函數(shù)的使用
然后可以分別調(diào)節(jié)電機(jī)1的參數(shù)和電機(jī)二的參數(shù)
把測(cè)試好的PID 參數(shù)分別寫在PID_init里面
以上是入門篇
通過(guò)上面的學(xué)習(xí)與實(shí)操,大家對(duì):PWM、電機(jī)驅(qū)動(dòng)、PID閉環(huán)控制、串口通信等有了一定掌握,如果上面那個(gè)章節(jié)掌握不好,一定要多看兩遍視頻,多敲邊代碼,還有疑惑可以百度查找或者留言問題。
后面的內(nèi)容就是偏應(yīng)用比較簡(jiǎn)單了。
這樣咱們第九章就結(jié)束了,PID就完成了,后面的章節(jié)利用PID做小車控制。
審核編輯 黃宇
-
編碼器
+關(guān)注
關(guān)注
45文章
3638瀏覽量
134419 -
PID
+關(guān)注
關(guān)注
35文章
1472瀏覽量
85475 -
電機(jī)轉(zhuǎn)速
+關(guān)注
關(guān)注
0文章
63瀏覽量
11367
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論