有的傳感器會(huì)輸出脈沖信號(hào),MCU需要統(tǒng)計(jì)脈沖輸入的個(gè)數(shù),通常有如下實(shí)現(xiàn)方式:
1.GPIO中斷
原理很簡(jiǎn)單,利用GPIO的上升沿或者下降沿中斷,進(jìn)中斷的次數(shù)就是脈沖的個(gè)數(shù)。只需要在中斷服務(wù)函數(shù)里計(jì)數(shù)即可。
使用GPIO中斷需要注意:
脈沖信號(hào)的頻率不能太高,否則MCU可能處理不過來(lái)
GPIO中斷處理程序應(yīng)盡可能短,否則影響處理速度
GPIO中斷優(yōu)先級(jí)應(yīng)高,否則會(huì)延遲對(duì)脈沖信號(hào)的處理
我們先用一個(gè)板子產(chǎn)生頻率為10Khz的PWM波,時(shí)長(zhǎng)為100ms 。
下降沿的脈沖數(shù)理論為100ms/0.1ms=1000個(gè),實(shí)際上因?yàn)橛猩僭S誤差,從上面邏輯分析儀可以看到實(shí)際脈沖數(shù)為1.009k,即1009個(gè)。
然后將PWM接到另外一個(gè)板子的GPIO引腳上,開啟下降沿中斷,在中斷服務(wù)函數(shù)中計(jì)數(shù),可以看到實(shí)際值就是1009。
2.定時(shí)器輸入捕獲
輸入捕獲常用來(lái)測(cè)量脈沖寬度和頻率,它也可以用來(lái)對(duì)脈沖計(jì)數(shù)。
它的原理和上述GPIO中斷類似,只不過用的是定時(shí)器的輸入捕獲中斷。
3.定時(shí)器用作計(jì)數(shù)
定時(shí)器和計(jì)數(shù)器其實(shí)很相似,只不過定時(shí)器是對(duì)內(nèi)部的時(shí)鐘脈沖進(jìn)行計(jì)數(shù),計(jì)數(shù)到一定數(shù)值時(shí)就可以根據(jù)頻率,計(jì)算出時(shí)間。
而計(jì)數(shù)器是對(duì)外部脈沖進(jìn)行計(jì)數(shù),即外部引腳每發(fā)生一次變化,計(jì)數(shù)器就計(jì)數(shù)一次。
可以將外部脈沖信號(hào)接入到MCU的TIMx_ETR引腳,就可以使用MCU的定時(shí)器來(lái)計(jì)數(shù)。
它的使用也很簡(jiǎn)單,主要就是配置TIMx_SMCR寄存器(slave mode control register),具體可以參考芯片參考手冊(cè)。
可以看到定時(shí)器CNT的值就是脈沖的個(gè)數(shù)。
總結(jié):
1)盡量使用TIMER ETR引腳通過計(jì)數(shù)器方式來(lái)實(shí)現(xiàn)脈沖計(jì)數(shù),如果條件不允許,外部脈沖輸入頻率不是很高,也可以使用GPIO中斷來(lái)實(shí)現(xiàn),不過還是要同時(shí)考慮高頻中斷對(duì)整體系統(tǒng)的影響。比如上面MCU主頻是48Mhz,將10Khz調(diào)整為100Khz,實(shí)測(cè)GPIO中斷還可以準(zhǔn)確計(jì)數(shù),但是當(dāng)再繼續(xù)增大到1Mhz時(shí),就處理不過來(lái)了,實(shí)測(cè)發(fā)出約50000個(gè)脈沖,GPIO中斷只測(cè)出了10206個(gè),而使用計(jì)數(shù)器模式則可以準(zhǔn)確的計(jì)數(shù)。
2)如果使用GPIO中斷計(jì)數(shù),要特別注意GPIO上不能有接地的電容,否則會(huì)改變脈沖波形,導(dǎo)致錯(cuò)誤的計(jì)數(shù)。
審核編輯:劉清
-
mcu
+關(guān)注
關(guān)注
146文章
16984瀏覽量
350294 -
脈沖信號(hào)
+關(guān)注
關(guān)注
6文章
394瀏覽量
36916 -
GPIO
+關(guān)注
關(guān)注
16文章
1196瀏覽量
51914 -
PWM波
+關(guān)注
關(guān)注
0文章
99瀏覽量
16840
原文標(biāo)題:MCU如何實(shí)現(xiàn)對(duì)外部脈沖信號(hào)的計(jì)數(shù)功能?
文章出處:【微信號(hào):TopSemic,微信公眾號(hào):TopSemic嵌入式】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論