有的傳感器會輸出脈沖信號,MCU需要統(tǒng)計(jì)脈沖輸入的個(gè)數(shù),通常有如下實(shí)現(xiàn)方式:
1.GPIO中斷
原理很簡單,利用GPIO的上升沿或者下降沿中斷,進(jìn)中斷的次數(shù)就是脈沖的個(gè)數(shù)。只需要在中斷服務(wù)函數(shù)里計(jì)數(shù)即可。
使用GPIO中斷需要注意:
脈沖信號的頻率不能太高,否則MCU可能處理不過來
GPIO中斷處理程序應(yīng)盡可能短,否則影響處理速度
GPIO中斷優(yōu)先級應(yīng)高,否則會延遲對脈沖信號的處理
我們先用一個(gè)板子產(chǎn)生頻率為10Khz的PWM波,時(shí)長為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í)器輸入捕獲
輸入捕獲常用來測量脈沖寬度和頻率,它也可以用來對脈沖計(jì)數(shù)。
它的原理和上述GPIO中斷類似,只不過用的是定時(shí)器的輸入捕獲中斷。
3.定時(shí)器用作計(jì)數(shù)
定時(shí)器和計(jì)數(shù)器其實(shí)很相似,只不過定時(shí)器是對內(nèi)部的時(shí)鐘脈沖進(jìn)行計(jì)數(shù),計(jì)數(shù)到一定數(shù)值時(shí)就可以根據(jù)頻率,計(jì)算出時(shí)間。
而計(jì)數(shù)器是對外部脈沖進(jìn)行計(jì)數(shù),即外部引腳每發(fā)生一次變化,計(jì)數(shù)器就計(jì)數(shù)一次。
可以將外部脈沖信號接入到MCU的TIMx_ETR引腳,就可以使用MCU的定時(shí)器來計(jì)數(shù)。
它的使用也很簡單,主要就是配置TIMx_SMCR寄存器(slave mode control register),具體可以參考芯片參考手冊。
可以看到定時(shí)器CNT的值就是脈沖的個(gè)數(shù)。
總結(jié):
1)盡量使用TIMER ETR引腳通過計(jì)數(shù)器方式來實(shí)現(xiàn)脈沖計(jì)數(shù),如果條件不允許,外部脈沖輸入頻率不是很高,也可以使用GPIO中斷來實(shí)現(xiàn),不過還是要同時(shí)考慮高頻中斷對整體系統(tǒng)的影響。比如上面MCU主頻是48Mhz,將10Khz調(diào)整為100Khz,實(shí)測GPIO中斷還可以準(zhǔn)確計(jì)數(shù),但是當(dāng)再繼續(xù)增大到1Mhz時(shí),就處理不過來了,實(shí)測發(fā)出約50000個(gè)脈沖,GPIO中斷只測出了10206個(gè),而使用計(jì)數(shù)器模式則可以準(zhǔn)確的計(jì)數(shù)。
2)如果使用GPIO中斷計(jì)數(shù),要特別注意GPIO上不能有接地的電容,否則會改變脈沖波形,導(dǎo)致錯(cuò)誤的計(jì)數(shù)。
審核編輯:劉清
-
mcu
+關(guān)注
關(guān)注
147文章
18387瀏覽量
378916 -
脈沖信號
+關(guān)注
關(guān)注
6文章
404瀏覽量
38089 -
GPIO
+關(guān)注
關(guān)注
16文章
1300瀏覽量
55279 -
PWM波
+關(guān)注
關(guān)注
0文章
101瀏覽量
17562
原文標(biāo)題:MCU如何實(shí)現(xiàn)對外部脈沖信號的計(jì)數(shù)功能?
文章出處:【微信號:TopSemic,微信公眾號:TopSemic嵌入式】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
MCU可以正常工作但是端口輸入脈沖信號后,讀值不準(zhǔn)確大幅度變化是為什么?
labview 脈沖個(gè)數(shù)測量
循環(huán)輸出不同頻率,不同個(gè)數(shù)的脈沖串
用matlab統(tǒng)計(jì)有效信號的個(gè)數(shù)
如何測輸入脈沖個(gè)數(shù)
linux統(tǒng)計(jì)文件個(gè)數(shù)
如何控制波形脈沖的個(gè)數(shù)呢
使用STM32芯片統(tǒng)計(jì)某外部信號脈沖個(gè)數(shù)
STM32脈沖計(jì)數(shù)低頻時(shí)不準(zhǔn)這個(gè)是為什么呢?
有哪些方法可以實(shí)習(xí)MCU對外部脈沖信號的計(jì)數(shù)功能呢?
數(shù)組一維中相同元素個(gè)數(shù)統(tǒng)計(jì)
脈沖編碼器輸入信號有哪幾種 | 編碼器輸出的脈沖信號有電壓嗎 | 脈沖編碼器輸入信號怎么調(diào)

評論