PID詳解3(攝像頭循跡分析)
PID詳解3(攝像頭循跡分析)
看了那么多成功的案例和大佬們的分享、講解,終于輪到我們自己來(lái)設(shè)計(jì)PID了。
首先需要分析的是,想要用PID,我們得先知道,我們需要通過(guò)傳感器拿到哪些參數(shù),我們處理后要得到的是什么參數(shù),然后才是設(shè)計(jì)PID控制器。這個(gè)很重要,畢竟“方向”才是最重要的。在很多以后的工作中,也一定要先弄明白方向和目的,避免犯迷糊。
分析:
- 我們通過(guò)PWM波控制車輪速度,通過(guò)兩輪差速完成轉(zhuǎn)向,所以我們需要的參數(shù)是賦給兩輪的車速,但又不是速度本身,而是 T I M S e t C o m p a r e x ( T I M x , a x 1 ) TIM_SetComparex(TIMx,ax1) TIMS?etComparex(TIMx,ax1)中的這個(gè)ax1的值。它與車速之間的關(guān)系并不是很明確。這里我們來(lái)計(jì)算一下具體的關(guān)系,不然就是一個(gè)隱患:
ps:今天是見識(shí)到CSDN的魚龍混雜了。。。看到好多個(gè)概念錯(cuò)誤還寫的賊自信,到處查資料,去偽存真,得到我下面的結(jié)論,應(yīng)該是沒什么問(wèn)題了。
PWM在初始化時(shí),需要兩個(gè)參數(shù)自主設(shè)定:
1.TIM_Period:=ARR 定時(shí)器周期,
也就是當(dāng)計(jì)數(shù)器內(nèi)的值變化到該值時(shí),相關(guān)事件標(biāo)志位。
2.TIM_Prescaler:定時(shí)器預(yù)分頻,
時(shí)鐘源內(nèi)部時(shí)鐘經(jīng)過(guò)這個(gè)分頻處理才是定時(shí)器的時(shí)鐘
在通用定時(shí)器中,內(nèi)部時(shí)鐘72MHZ,所以定時(shí)器內(nèi)部時(shí)鐘
CLK = 72M / (TIM_Prescaler + 1) Hz
也就是計(jì)數(shù)器每1s該時(shí)鐘增加CLK次
然后計(jì)數(shù)器內(nèi)數(shù)字變化成為TIM_Period后,結(jié)束。
For example:
if TIM_Prescaler = (7200 - 1)
=> CLK = 72M / 7200 = 10K
if TIM_Period = 5000-1 (from 0 to 5000 = 5000-1)
==>> 定時(shí)為0.5s(周期)的定時(shí)器(5000*(1/10KHz))
周期: T = ( T I M P e r i o d + 1 ) ? ( T I M P r e s c a l e r + 1 ) 72 M T = \frac{(TIM_Period + 1)*(TIM_Prescaler+1)}{72M} T=72M(TIMP?eriod+1)?(TIMP?rescaler+1)?
在此給定的定時(shí)器之上,我們?cè)僬{(diào)用
function:TIM_SetComparex(TIMx,CCRx)
來(lái)看看波形:
首先了解一下兩個(gè)參數(shù):
TIM_OCPolarity 和TIM_OCInitTypeDef.TIM_OCMode :
2 .1 TIM_OCPolarity = TIM_OCPolarity_High,
高電位為有效電平。
2 .2 TIM_OCPolarity = TIM_OCPolarity_low,
低電位為有效電平。
1 .1 若TIM_OCInitTypeDef.TIM_OCMode = TIM_OCMode_PWM1時(shí):
在向上計(jì)數(shù)時(shí),一旦TIMx_CNT<TIMx_CCR1時(shí)通道1為有效電平,否則為無(wú)效電平;
在向下計(jì)數(shù)時(shí),一旦TIMx_CNT>TIMx_CCR1時(shí)通道1為無(wú)效電平(OC1REF=0),否則為有效電平
1 .2 若TIM_OCInitTypeDef.TIM_OCMode = TIM_OCMode_PWM2時(shí):
在向上計(jì)數(shù)時(shí),一旦TIMx_CNT<TIMx_CCR1時(shí)通道1為無(wú)效電平,否則為有效電平;
在向下計(jì)數(shù)時(shí),一旦TIMx_CNT>TIMx_CCR1時(shí)通道1為有效電平,否則為無(wú)效電平
這里我找到一個(gè)圖:顯然這里是
TIM_OCPolarity_High、TIM_OCMode_PWM2;
和
TIM_OCPolarity_low、TIM_OCMode_PWM1
初始為低電平,未到設(shè)定值時(shí)時(shí)低電平
這個(gè)圖很容易讓我們知道PWM的形成了,以及占空比的概念也很形象了。
占空比D = (t2 - t1)/t2 ,但這里我們并不能直接得到時(shí)間軸上的值,因此我們從比例相同的角度,用計(jì)數(shù)值來(lái)表示這個(gè)量。
D
=
1
?
(
C
C
R
/
(
A
R
R
+
1
)
D = 1 - (CCR/(ARR+1)
D=1?(CCR/(ARR+1)
~~~~
若采用High PWM1或Low 2,圖有所變化
D = C C R / ( A R R + 1 ) D = CCR/(ARR+1) D=CCR/(ARR+1)
D的作用:
很多人抓到PWM都知道,我靠控制占空比控制車速,但其實(shí)很多人都不知道為什么可以控制,都是似懂非懂罷了。
這里其實(shí)要從電機(jī)角度來(lái),其實(shí)占空比最終的目的是改變電機(jī)的電樞電壓。
V
l
=
V
?
D
V_l= V * D
Vl?=V?D
所以到底這個(gè)compare值和車速的數(shù)學(xué)表達(dá)式關(guān)系到底是什么很難確定,不同的電機(jī)、不同的環(huán)境都有影響,所以大家還是借助自己手上的電機(jī)實(shí)體進(jìn)行測(cè)試吧。。。
設(shè)計(jì)PID控制器
磨磨蹭蹭這么久,總算到了設(shè)計(jì)PID的時(shí)候,為了上面這一段PID真的是花了不少時(shí)間。。其實(shí)一開始就看手冊(cè)反倒不會(huì)這么麻煩,都怪我太相信博文了。。。
分析
我們來(lái)分析這個(gè)攝像頭傳感器的PID巡線:
err是什么:巡線為目標(biāo),則軌跡下起點(diǎn)與圖像中線的距離可以作為err。
P控制器
V = K P ? e r r ( t ) V =K_P*err(t) V=KP??err(t)
D控制器
V V V+= K D ? ( e r r [ t ] ? e r r [ t ? 1 ] ) K_D*(err[t]-err[t-1]) KD??(err[t]?err[t?1])
I控制器
A
L
L
e
r
r
ALLerr
ALLerr+=err(t)$$
V
V
V+=
K
I
?
(
A
L
L
e
r
r
)
K_I*(ALLerr)
KI??(ALLerr)
最后的
TIM_sercmparex(TIMx,compare1)
TIM_sercmparey(TIMx,compare2)
compare1 = fixed + V
compare2 = fixed - V
具體實(shí)操
xxx-4.1
完成理論分析
4.1-
完成理論分析下一步我們就要開始實(shí)際設(shè)計(jì)編程了。
這里我們采用的是OV7725攝像頭作為傳感器。

浙公網(wǎng)安備 33010602011771號(hào)