20.4-使用兩個(gè)通道進(jìn)行PID電磁循跡
面我們沒有使用PID完成了循跡
循跡部分代碼如下、我們是利用計(jì)算的差比和值 根據(jù)差比和大小和正負(fù)數(shù)控制電機(jī),那么我們用PID循跡也是利用這個(gè)值,非PID循跡中我們目標(biāo)是讓g_fVoltageOuter 值等于零 ,所以我們每當(dāng) g_fVoltageOuter 大于0.5或者小于-0.5時(shí)候電機(jī)就會(huì)發(fā)生反應(yīng),想做或者右邊運(yùn)動(dòng),
PID中也是我們的
目標(biāo): 讓g_fVoltageOuter變量等于零
輸入: 當(dāng)前g_fVoltageOuter 值
輸出: 兩個(gè)輪子的要控制速度 這里輸出一個(gè)差速值,兩個(gè)電機(jī)一個(gè)加 另一個(gè)電機(jī)減 這個(gè)差速值 就可以控制電機(jī)趨向 正確方向運(yùn)動(dòng)。
先按照筆記講解說明,然后按照講解已經(jīng)改好的代碼,然后教一下如何改代碼。比較難理解,大家結(jié)合之前篇章多理解學(xué)習(xí)。
復(fù)制一下20.3 的代碼 然后再這基礎(chǔ)修改。
定義保存PID計(jì)算結(jié)果的變量
float g_fVoltagePidOut;//電磁循跡PID計(jì)算輸出
定義一個(gè)用于電磁循跡PID參數(shù)的結(jié)構(gòu)體
tPid pidVoltage;//電磁循跡PID代碼
然后初始化一下PID的參數(shù),給PID參數(shù)賦值。這里說一下如何計(jì)算PID參數(shù)
首先我們先看P I D 的計(jì)算函數(shù),這個(gè)是我們?cè)?a target="_blank">電機(jī)控制時(shí)候?qū)懙?/strong>
我們做電磁循跡 ,循跡不需要關(guān)歷史累計(jì)誤差結(jié)果,所以我們只用 P D 參數(shù) I=0可以
然后我們做一個(gè)假設(shè),假設(shè)兩次程序第一次g_fVoltageOuter 值是0 、第二次g_fVoltageOuter 是0.5 并且我們知道我們的目標(biāo)值是零。
然后分析先定P -3 、D 比P 小很多定 -1 。后面我們?cè)谡{(diào)整。
所以我們的PID初始化先這么寫
pidVoltage.actual_val=0.0;
pidVoltage.target_val=0.00;//電磁循跡PID 的目標(biāo)值為0
pidVoltage.err=0.0;
pidVoltage.err_last=0.0;
pidVoltage.err_sum=0.0;
pidVoltage.Kp=-3.00;
pidVoltage.Ki=0;
pidVoltage.Kd=-1.00;
聲明一下變量
extern tPid pidVoltage;//電磁循跡PID代碼
編寫PID控制部分代碼
PID輸出控制部分代碼
g_fVoltagePidOut = PID_realize(&pidVoltage,g_fVoltageOuter);//PID計(jì)算輸出偏差目標(biāo)速度 這個(gè)速度,會(huì)和基礎(chǔ)速度加減
?
g_fHW_PID_Out1 = 1 + g_fVoltagePidOut;//電機(jī)1速度=基礎(chǔ)速度+電磁PID輸出速度
g_fHW_PID_Out2 = 1 - g_fVoltagePidOut;//電機(jī)1速度=基礎(chǔ)速度-電磁PID輸出速度
if(g_fHW_PID_Out1 >5) g_fHW_PID_Out1 =5;//進(jìn)行限幅 限幅速度在0-5之間
if(g_fHW_PID_Out1 < 0) g_fHW_PID_Out1 =0;
if(g_fHW_PID_Out2 >5) g_fHW_PID_Out2 =5;//進(jìn)行限幅 限幅速度在0-5之間
if(g_fHW_PID_Out2 < 0) g_fHW_PID_Out2 =0;
motorPidSetSpeed(g_fHW_PID_Out1,g_fHW_PID_Out2);//通過計(jì)算的速度控制電機(jī)
搖擺十分嚴(yán)重 我們把PD 縮小一些,然后提高基礎(chǔ)速度到1.5
PID參數(shù)調(diào)整如下
pidVoltage.actual_val=0.0;
pidVoltage.target_val=0.00;//電磁循跡PID 的目標(biāo)值為0
pidVoltage.err=0.0;
pidVoltage.err_last=0.0;
pidVoltage.err_sum=0.0;
pidVoltage.Kp=-1.0; //電磁循跡P參數(shù)
pidVoltage.Ki=0;
pidVoltage.Kd=-0.2;//電磁D參數(shù)
如果更改了電感,電感的最大電壓值可能會(huì)變化,需要修改
這個(gè)變量
float g_fVoltageMax[4]={2.89,2.89,2.89,2.89};//用于歸一化的最大ADC電壓采集值 不同賽道要獲得更好循跡效果 需要重新采集這個(gè)值
審核編輯 黃宇
-
電磁
+關(guān)注
關(guān)注
15文章
1139瀏覽量
51992 -
智能車
+關(guān)注
關(guān)注
21文章
405瀏覽量
77075 -
循跡
+關(guān)注
關(guān)注
0文章
14瀏覽量
13107
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
【TG401_EVB開發(fā)板申請(qǐng)】智能小車單線高速算法電磁循跡
PID循跡模塊原理
電磁循跡智能車是由哪些模塊組成的
智能車控制之電磁循跡介紹
智能車的電磁循跡相關(guān)資料下載
節(jié)能組電磁循跡部分電路設(shè)計(jì)分享
基于51單片機(jī)的智能循跡小車的設(shè)計(jì)
循跡小車的資料合集免費(fèi)下載
![<b class='flag-5'>循跡</b><b class='flag-5'>小車</b>的資料合集免費(fèi)下載](https://file.elecfans.com/web1/M00/B9/73/pIYBAF6C9X-AI8ZgAAK_PgqSHpg321.png)
基于CW32的遙控循跡小車
![基于CW32的遙控<b class='flag-5'>循跡</b><b class='flag-5'>小車</b>](https://file1.elecfans.com/web2/M00/AE/E3/wKgaomVXM2KANyt4AAIaHx8b4hU424.jpg)
20.0-電磁桿的組裝和實(shí)物介紹“這個(gè)是就是你想要的“-智能車電磁組 電磁循跡小車
![20.0-<b class='flag-5'>電磁</b>桿的組裝和實(shí)物介紹“這個(gè)是就是你想要的“-<b class='flag-5'>智能車</b><b class='flag-5'>電磁</b>組 <b class='flag-5'>電磁</b><b class='flag-5'>循跡</b><b class='flag-5'>小車</b>](https://file1.elecfans.com/web2/M00/02/F8/wKgZoma-7pOAIMfMAA5D0ea0gkE311.png)
評(píng)論