一、(180度)舵機(jī)控制要知道的知識
我們要知道,SG90舵機(jī)接收的PWM信號的參數(shù):f=50Hz,T=1/f,所以周期為20ms。
當(dāng)高電平的脈寬在0.5ms-2.5ms之間時舵機(jī)就可以對應(yīng)旋轉(zhuǎn)到不同的角度。
- 換句話說,我們要用單片機(jī)產(chǎn)生一個
周期(20ms)
的PWM波,然后獲得對應(yīng)這些時長(分別是0.5ms
、1ms
、1.5ms
、2ms
、2.5ms
)的高電平
。 - 或者說:它們是以20ms為周期的方波,分別為
2.5%
,5%
,7.5%
,10%
,12.5%
的占空比
。
二、PWM的參數(shù)要怎么計算
公式:f = SYSCLK/((TIM_Period+1)*(TIM_Prescaler+1))
- 我們已知的有:
- f=1/50Hz(舵機(jī)需要的頻率)
- sys_clk=72MHz(根據(jù)板子的系統(tǒng)時鐘頻率來取值)
- 我們要求的是
分頻值
和重裝載值
:
- TIM_Prescaler:計時器的預(yù)分頻器值,它決定了 PWM 信號的頻率,也就是每秒鐘有多少個脈沖。預(yù)分頻值越大,每秒鐘產(chǎn)生的脈沖數(shù)就越少,頻率就越低
- TIM_Period:計時器的自動重裝載寄存器(Auto-Reload Register,ARR)的值,用于確定計時器的計數(shù)周期。它決定了每個 PWM 周期的長度。重裝載值越大,每個周期的長度就越長,脈沖也會持續(xù)更久。
總之,預(yù)分頻值和重裝載值的選擇會直接影響到 PWM 信號的頻率和占空比。通過適當(dāng)?shù)卣{(diào)整這兩個值,你可以實(shí)現(xiàn)所需的 PWM 輸出效果。需要根據(jù)具體的應(yīng)用需求和硬件規(guī)格來確定適合的預(yù)分頻值和重裝載值。
用大白話說,比如倒著數(shù)數(shù),預(yù)分頻值就是你一次數(shù)幾個數(shù),裝載值是你從哪個數(shù)開始倒數(shù)。
- 1次1個就是 100、99、98…
- 1次2個就是100、98、96… 以此類推。
然后再理解一下這個Compare:
你把數(shù)的這串?dāng)?shù)字看作是一整個波形。
波形嘛,是有高、低電平的。而Compare值就是用來指出高電平在其中所占的個數(shù)的。
那么把高電平所占的個數(shù)除以數(shù)字總個數(shù),就是占空比啦?。?!
1、為什么要分頻呢?
定時器的計數(shù)有限。因?yàn)榘遄拥南到y(tǒng)時鐘頻率是72MHz,意味著1秒可以計數(shù)72M次。
- 對于16位的定時器,計數(shù)范圍是0~65536,2的16次方嘛。
- 對于32位的定時器,則為0到4294967295。但是雖然可以滿足,但是計數(shù)太快了,利用率就不行。所以通過給系統(tǒng)時鐘分頻,可以根據(jù)具體應(yīng)用需求靈活地調(diào)整定時器的計數(shù)速度。對于需要高精度和高頻率的應(yīng)用,可以選擇較高的系統(tǒng)時鐘頻率和相應(yīng)的預(yù)分頻系數(shù);對于需要較低頻率的應(yīng)用,可以選擇較低的系統(tǒng)時鐘頻率和相應(yīng)的預(yù)分頻系數(shù)。
我對它的理解是,我們通過一個生活中的數(shù)數(shù)例子來理解上面這段話。
假設(shè)你和朋友一起數(shù)數(shù),計數(shù)范圍是0到9。你們每秒鐘能夠數(shù)一次,并且使用一個計數(shù)器來記錄當(dāng)前的數(shù)字。
現(xiàn)在,假設(shè)你們使用的時鐘是系統(tǒng)時鐘,頻率為100次/秒,即每秒鐘系統(tǒng)時鐘發(fā)生100個時鐘脈沖。
如果你們直接將系統(tǒng)時鐘作為計數(shù)器的輸入時鐘,計數(shù)器每接收到一個時鐘脈沖就會加1,那么在1秒鐘內(nèi),計數(shù)器將會累加100次。由于計數(shù)范圍只有0到9,計數(shù)器的值會很快達(dá)到最大值9,并溢出回到0,無法完成較長的計數(shù)周期。
為了實(shí)現(xiàn)更長的計數(shù)周期和較低的頻率,你們決定將系統(tǒng)時鐘頻率分頻,比如分頻為10。這意味著計數(shù)器每接收到10個時鐘脈沖才會加1,也就是每秒鐘計數(shù)器只會加1次。這樣,計數(shù)器的值在1秒鐘內(nèi)只會從0增加到1,而不會溢出,可以實(shí)現(xiàn)更長的計數(shù)周期和較低的頻率。
---------------------------------------例如----------------------------------------------
stm32F103C8T6的系統(tǒng)時鐘是72MHz,
-
我給它進(jìn)行72分頻(
TIM_Prescaler=72
),也就是 72MHz / 72 = 1MHz (1秒1M個數(shù)),我們分頻以后計一個數(shù)就是1us -
一個數(shù)1us,那我們需要20ms,也是20ms = 20 000us / 1us = 20000個(
TIM_Period=20000
),也就是我們需要計20000數(shù),這很好理解吧。 -
cubeMX里是這么設(shè)置的
-
然后我們要知道下面這張圖,意思就是在這個20ms的一個周期內(nèi),如果高電平占20ms中的0.5ms(占空比嘛,高電平在一個周期內(nèi)的占比),則可以讓舵機(jī)轉(zhuǎn)到0°,后面的以此例推。
-
然后,問題來了,我們要記多少個數(shù)才可以達(dá)到0.5ms呢?
答:因?yàn)?us計數(shù)1個,0.5ms則是500us,所以對應(yīng)500個嘛。 -
然后要怎么讓單片機(jī)知道,我們這500個數(shù),計的是高電平呢?(你要是沒有設(shè)置,它肯定不知道的)
在CubeMX里
在代碼里
2、為什么選擇PWM模式1(TIM_OCMode_PWM1)呢?
按我的理解來說,pwm1的就是先輸出有效電平(高電平)再輸出無效電平(低電平)。而pwm2就是反過來,先輸出無效電平再輸出有效電平。
Hal庫__HAL_TIM_SET_COMPARE(&htim3,TIM_CHANNEL_1,500);或者是庫函數(shù)的 TIM_SetCompare3(TIM3,500);
當(dāng)配置的是pwm1模式,那這句話的意思都是,輸出計500個數(shù)的時間的有效電平(高電平),500*1us=0.5ms,剩余的(20-0.5)ms則是低電平。
若是配置pwm2模式,也是輸出的500個數(shù)的時間是低電平?!疽话愣加胮wm1】文章來源:http://www.zghlxwxcb.cn/news/detail-544108.html
如果還是不太懂的話,可以去看看江科大講的stm32入門教程。文章來源地址http://www.zghlxwxcb.cn/news/detail-544108.html
每天進(jìn)步一點(diǎn)點(diǎn) 筆記僅供自學(xué),用來回看復(fù)習(xí),不一定適合你,如有錯誤請指出。
到了這里,關(guān)于【STM32單片機(jī)】STM32控制SG90舵機(jī)的PWM部分參數(shù)的設(shè)置解答的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!