我想要TIM定時(shí)器輸出的PWM波形:0.1%精度占空比, 頻率范圍:200Hz - 10KHz。請(qǐng)問(wèn)能實(shí)現(xiàn)嗎?
Ⅰ寫(xiě)在前面
如果有朋友下載了上一篇文章我提供的例程,在“bsp_timer.h”文件下,你就會(huì)發(fā)現(xiàn)有如下一段被我注釋了的【說(shuō)明性文字】。
這個(gè)工程是我從之前項(xiàng)目中提取出來(lái)(復(fù)制部分代碼),從新整理的一個(gè)的工程。里面的這個(gè)被注釋了的描述文字是之前整理的,今天重新對(duì)其說(shuō)明一下。
這里句題外話:
我一般都是注重讓大家明白其原理,提供的工程代碼以簡(jiǎn)單為原則。比如:沒(méi)有添加系統(tǒng),沒(méi)有添加參數(shù)越界檢查等額外的代碼。不是讓你直接拷貝過(guò)去就用,一般需要結(jié)合你實(shí)際工程,對(duì)其修改。
Ⅱ解讀那段文字
想要認(rèn)真掌握定時(shí)器輸出PWM的朋友,可以品味一下那段文字。
1.定時(shí)器的位數(shù)
在STM32中,定時(shí)器分16位和32位,這個(gè)好理解。簡(jiǎn)單的來(lái)說(shuō),就是16位定時(shí)器相關(guān)的寄存器包含計(jì)數(shù)器是16位的,計(jì)數(shù)的范圍是0 ~ 0xFFFF。同理,32位計(jì)數(shù)范圍為0 ~ 0xFFFF FFFF。
當(dāng)然,上面提到的相關(guān)的寄存器,其實(shí)只有幾個(gè),計(jì)數(shù)器、自動(dòng)重載寄存器、捕獲/比較寄存器等,具體請(qǐng)參看手冊(cè)中關(guān)于TIM寄存器章節(jié)。
截圖中,頻率的范圍,其實(shí)說(shuō)明了32位定時(shí)器的優(yōu)勢(shì)。但是,在STM32中,有些型號(hào)的MCU是沒(méi)有32位的定時(shí)器的(具體請(qǐng)見(jiàn)選型手冊(cè),或數(shù)據(jù)手冊(cè))。
2.占空比,周期(頻率)
PWM占空比是指在一個(gè)脈沖循環(huán)內(nèi),通電時(shí)間相對(duì)于總時(shí)間所占的比例。
比如:拿1KHz波形來(lái)說(shuō),占空比為20%,即高電平0.2ms。
在STM32定時(shí)器中,占空比其實(shí)是對(duì)應(yīng)【捕獲/比較寄存器】的值,你可看見(jiàn)我提供的代碼:
#define PWM_TIM_SetComparex TIM_SetCompare1
捕獲/比較寄存器有1,2,3,4,對(duì)應(yīng)的其實(shí)是你輸出的通道。
占空比的數(shù)值,需要結(jié)合PWM的頻率,所以代碼中是:
pwm_pulse = (pwm_period + 1)*Dutycycle / 100;
pwm_period:是PWM周期值;
/100代表:占空比的大小。
周期值:其實(shí)就是【自動(dòng)重載寄存器 (TIMx_ARR)】是值;
看見(jiàn)我標(biāo)記為紅色的文字沒(méi)有?這兩個(gè)值決定了PWM的周期和占空比。
3.計(jì)算頻率和占空比
頻率 = 1/周期; 1KHz的周期 = 0.001秒,即1ms.
波形頻率(周期)案例:
假如計(jì)數(shù)時(shí)鐘CK_CNT(看上圖)一秒鐘計(jì)數(shù)10M次:
我們需要1KHz波形,即1ms(波形1K)CNT計(jì)數(shù)個(gè)數(shù)為10K個(gè),自動(dòng)重載寄存器ARR設(shè)定值為10K。
我們需要10KHz波形,同理:自動(dòng)重載寄存器設(shè)定值為100K。
占空比(1KHz波形)案例:
假如CK_CNT一秒鐘計(jì)數(shù)1M次:
我們需要1KHz,0.1占空比波形:同上分析,ARR的值為1K,則捕獲/比較寄存器 1 (TIMx_CCR1)值為1。(為什么是1? 1KHz * 0.1%就等于1)
我們需要10KHz,0.1占空比波形:同理計(jì)算CCR1值:等于1KHz * 0.1%就等于0.1。顯然
兩案例的結(jié)論:
1.100K > 65535,對(duì)于16位定時(shí)器來(lái)說(shuō),肯定不行啊。對(duì)于32位定時(shí)器就行。
2.CCR1的值不可能為0.1。
3.我們就需要改變計(jì)數(shù)時(shí)鐘CK_CNT來(lái)達(dá)到要求,也就是分頻。
4.自己設(shè)定邊界值,通過(guò)修改TIMx_PSC、TIMx_ARR和TIMx_CCR三個(gè)寄存器參數(shù),來(lái)滿足自己要求。如果不能滿足,那么選擇32位定時(shí)器。如果32位都還不能滿足,那就······
-
PWM
+關(guān)注
關(guān)注
114文章
5119瀏覽量
213176 -
STM32
+關(guān)注
關(guān)注
2264文章
10854瀏覽量
354305 -
定時(shí)器
+關(guān)注
關(guān)注
23文章
3232瀏覽量
114332
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論