當(dāng)前位置:首頁 > 公眾號(hào)精選 > 嵌入式大雜燴
[導(dǎo)讀]關(guān)注「嵌入式大雜燴」,星標(biāo)公眾號(hào),一起進(jìn)步!來源:茶話MCU我們知道,利用單片機(jī)定時(shí)器捕獲功能測量脈沖信號(hào)寬度及占空比是種很常見的做法。這里以STM32的定時(shí)器為例來介紹基于其捕獲功能實(shí)現(xiàn)對(duì)脈寬的測量的思路及過程。一般來講,使用STM32定時(shí)器的捕獲功能來實(shí)現(xiàn)脈寬測量,我們可以選...

關(guān)注「嵌入式大雜燴」,星標(biāo)公眾號(hào),一起進(jìn)步!

來源:茶話MCU


我們知道,利用單片機(jī)定時(shí)器捕獲功能測量脈沖信號(hào)寬度及占空比是種很常見的做法。這里以STM32的定時(shí)器為例來介紹基于其捕獲功能實(shí)現(xiàn)對(duì)脈寬的測量的思路及過程。

一般來講,使用STM32定時(shí)器的捕獲功能來實(shí)現(xiàn)脈寬測量,我們可以選用一個(gè)通道、也可以使用兩個(gè)通道。使用1個(gè)通道時(shí),只需使用定時(shí)器基本的輸入捕獲功能結(jié)合中斷或DMA即可實(shí)現(xiàn);若使用兩個(gè)通道時(shí)可以將捕獲功能與定時(shí)器的從模式來相結(jié)合完成。這里就兩種方案的實(shí)現(xiàn)示例都做個(gè)簡單介紹。


不妨先介紹基于單個(gè)通道的輸入捕獲功能來實(shí)現(xiàn)對(duì)1路信號(hào)脈沖寬度及占空比的測量,并在測量過程中統(tǒng)計(jì)用于測量的定時(shí)器自身的溢出事件,以保障即使被測信號(hào)脈寬長于測量定時(shí)器自身的溢出周期時(shí)也能有效測量。


這里選用STM32F411 Nucleo 開發(fā)板 ,集成開發(fā)環(huán)境選用了ARM MDK IDE。

一、實(shí)現(xiàn)思路及步驟

1.1、使用STM32F411Nucleo板的板載芯片內(nèi)的TIM3的通道1產(chǎn)生一個(gè)周期為5s,占空比為40%的PWM輸出信號(hào),然后將該信號(hào)連線到TIM4的定時(shí)器輸入通道2,通過它對(duì)來自于TIM3的PWM輸出信號(hào)進(jìn)行脈寬及占空比的測量。?


?測量過程中,TIM4的通道2對(duì)外來信號(hào)的捕捉過程是這樣的,TIM4的通道2對(duì)外來信號(hào)的一個(gè)完整周期實(shí)現(xiàn) 3次捕捉。每次捕捉事件時(shí)計(jì)數(shù)器的值會(huì)被裝入CCR寄存器。



初始狀態(tài)0基于上升沿發(fā)起第一次捕捉,記錄下第1次的捕捉值【Capture_1st】,并對(duì)TIM4定時(shí)器溢出事件計(jì)數(shù)器清零,同時(shí)將捕獲極性切換為下沿捕捉。之后進(jìn)入狀態(tài)1,等待后續(xù)的下沿捕獲。當(dāng)發(fā)生下沿捕獲時(shí),記下第2次的捕捉值【Capture_2nd】,并將前面這段時(shí)間的定時(shí)器溢出次數(shù)也記錄下來【Front_Num_OvEvent】,再次將極性切換為上沿捕捉,進(jìn)入狀態(tài)2,等待第3次捕獲。在狀態(tài)2的情況下,當(dāng)發(fā)生上沿捕獲時(shí),記錄下第3次的捕捉值【Capture_3rd】,并將整個(gè)測試周期內(nèi)發(fā)生的定時(shí)器溢出次數(shù)記錄下來【Total_Num_OvEvent】,然后進(jìn)入狀態(tài)3進(jìn)行占空比【Signal_Duty】和脈寬【Signal_Cycle】的計(jì)算。完畢后回到初始狀態(tài),準(zhǔn)備下次的測量。

另外,在TIM4的更新中斷里對(duì)非初始狀態(tài)的溢出事件累加統(tǒng)計(jì),放在變量【Num_OvEvent】里。


示例代碼里用到變量Measure_State來記錄和表示當(dāng)前測試狀態(tài)。


1.2 、測量用到的算式

根據(jù)上面的介紹,一次完整的測量下來,測得的周期和占空比可以用下面算式求得。

【下面算式貌似復(fù)雜,只需把上面測試原理和那幾個(gè)數(shù)據(jù)理清自然就會(huì)計(jì)算】


1.3 、基本配置準(zhǔn)備

1.3.1、 實(shí)現(xiàn)TIM3 通道1【PA6】PWM輸出,計(jì)數(shù)周期5s,占空比40%,用做被測信號(hào)。

A、選擇定時(shí)器內(nèi)部時(shí)鐘作為時(shí)鐘源,STM32F411芯片定時(shí)器內(nèi)部時(shí)鐘為100Mhz;

B、設(shè)置分頻比,選擇計(jì)數(shù)模式、設(shè)置計(jì)數(shù)脈沖個(gè)數(shù);

對(duì)時(shí)鐘源20000分頻,PSC=20000-1;選擇向上計(jì)數(shù)模式up counting;

計(jì)數(shù)器基于分頻后的脈沖每計(jì)數(shù)設(shè)置為25000個(gè)后,發(fā)生溢出并產(chǎn)生更新事件及中斷。則:ARR=25000-1

按照上面參數(shù)來設(shè)計(jì),定時(shí)器的定時(shí)周期或者說溢出周期就是5s.

C、它需做PWM輸出,這里選擇PWM 模式1,占空比為40%,

CCR=(ARR 1)*0.40 =10,000


使用STM32CubeMx圖形化工具進(jìn)行配置:


1.3.2?、實(shí)現(xiàn)TIM4通道2的輸入捕獲,假定TIM4的溢出周期為20ms.

A、選擇定時(shí)器內(nèi)部時(shí)鐘為時(shí)鐘源,32F411定時(shí)器內(nèi)部時(shí)鐘為100Mhz;

B、設(shè)置分頻比,選擇計(jì)數(shù)模式、設(shè)置計(jì)數(shù)脈沖個(gè)數(shù);

先對(duì)時(shí)鐘源100分頻、即PSC=100-1;選擇向上計(jì)數(shù)模式up counting;

計(jì)數(shù)器基于分頻后的脈沖每計(jì)數(shù)20000個(gè),發(fā)生溢出并產(chǎn)生更新事件及中斷。

則:ARR=20000-1

按照上面參數(shù)來設(shè)計(jì),定時(shí)計(jì)數(shù)周期或者說溢出周期就是20ms.

另外,通道2配置為輸入捕捉,初始捕捉極性位選擇上升沿。



1.4 、工程代碼的生成、添加和整理

通過STM32CUBEMX依據(jù)上述參數(shù)完成配置,并開啟TIM4的中斷使能,然后生成工程。再在工程里添加應(yīng)用戶代碼。

? ? ? ? ? ? ? ?? ......

? ? ?Measure_State= 0x00;? ?//測試初始態(tài)

???? Num_OvEvent= 0x00;???//TIM4溢出次數(shù)初始值

部分處理代碼的簡要說明:

在TIM4通道2的捕獲中斷里做3次捕捉值的獲取以及計(jì)算,在TIM4更新中斷里對(duì)溢出事件進(jìn)行統(tǒng)計(jì)。

二、本次示例的結(jié)果驗(yàn)證

實(shí)驗(yàn)中tim4的時(shí)基參數(shù)保持不變,可通過調(diào)整TIM3的PWM輸出的脈寬和占空比,來看看實(shí)驗(yàn)結(jié)果。下面有一個(gè)視頻剪輯,就是上面工程驗(yàn)證結(jié)果的部分內(nèi)容,有興趣可以觀看。


上面簡單介紹了基于單通道的定時(shí)器捕獲實(shí)現(xiàn)對(duì)脈寬及占空比測量的過程,現(xiàn)在繼續(xù)介紹使用雙通道,基于定時(shí)器PWM輸入模式測量脈寬及占空比同樣,在測量過程中也統(tǒng)計(jì)用于測量的定時(shí)器自身的溢出事件。所用開發(fā)板和開發(fā)環(huán)境跟上面一致。

? ? ? ? ? ? ? ? ?

三、實(shí)現(xiàn)原理、思路及步驟

3.1、同樣,利用板載芯片內(nèi)的TIM3的通道1產(chǎn)生一個(gè)周期為5s,占空比為40%的PWM輸出信號(hào),然后將該信號(hào)連線到TIM4的定時(shí)器通道2【TI2】,作為其直接輸入。基于PWM輸入模式對(duì)來自于TIM3的PWM輸出信號(hào)進(jìn)行脈寬及占空比的測量。


這里先簡單介紹下PWM輸入模式工作原理。

*它是基于輸入捕獲定時(shí)器從模式相結(jié)合的一個(gè)具體應(yīng)用。

*?同一外部輸入引腳【僅限于定時(shí)器的TI1/TI2】的輸入濾波信號(hào)【TIxFPx】映射到內(nèi)部2個(gè)捕捉通道【僅限于IC1/IC2】,且配置為相反的捕捉極性,即一個(gè)通道捕捉上沿,另一通道捕捉下沿。

*用于測量的定時(shí)器配置在復(fù)位從模式,外部輸入信號(hào)的濾波信號(hào)TIxFPx作為定時(shí)器的觸發(fā)信號(hào),令定時(shí)器復(fù)位。

*經(jīng)過兩次連續(xù)的捕捉結(jié)合定時(shí)器的溢出事件統(tǒng)計(jì)可方便地測得信號(hào)的周期及占空比。

具體到這里,觸發(fā)信號(hào)來自待測信號(hào),即TIM3的PWM輸出,與TIM4的TI2相連,經(jīng)過邊沿檢測和濾波后的TI2FP2做為IC2的輸入信號(hào)的同時(shí)擔(dān)當(dāng)TIM4的觸發(fā)輸入信號(hào),其觸發(fā)極性可以軟件配置,此處配置為上沿觸發(fā)。當(dāng)TIM4收到觸發(fā)信號(hào)時(shí),定時(shí)器的計(jì)數(shù)器會(huì)被復(fù)位更新。當(dāng)計(jì)數(shù)器配置為UP計(jì)數(shù)模式時(shí),計(jì)數(shù)器會(huì)被清零并重新開始計(jì)數(shù)。


3.2、大致測量過程是這樣的:TIM4配置在復(fù)位從模式。待測信號(hào)從TI2輸入。



當(dāng)從通道2出現(xiàn)信號(hào)的上升沿時(shí),TIM4計(jì)數(shù)器被復(fù)位清零,同時(shí)產(chǎn)生更新事件觸發(fā)事件,相關(guān)標(biāo)志位會(huì)被硬件置1.


初始狀態(tài)下,將定時(shí)器從模式觸發(fā)沿配置為上沿觸發(fā),捕捉通道1配置下沿捕捉,捕捉通道2配置為上沿捕捉。初始狀態(tài)下,待測信號(hào)的上升沿使得TIM4的計(jì)數(shù)器被復(fù)位清零,并進(jìn)入測量狀態(tài)1,并開啟定時(shí)器的溢出事件實(shí)時(shí)統(tǒng)計(jì),代碼里用到的變量是Num_OvEvent。當(dāng)發(fā)生通道1的下沿捕捉時(shí),記錄下第1次的捕捉值【Vaule_1stCap】,并記錄下自復(fù)位以來到下沿捕捉這段事件的溢出次數(shù),放在變量Front_Num_OvEvent里。然后進(jìn)入狀態(tài)2。在狀態(tài)2的情況下當(dāng)發(fā)生通道2的上沿捕獲時(shí),記錄下第2次的捕捉值【Vaule_2ndCap】,并將整個(gè)測試周期內(nèi)定時(shí)器溢出次數(shù)記錄在【Total_Num_OvEvent】,然后進(jìn)入狀態(tài)3進(jìn)行占空比【Signal_Duty】和脈寬【Signal_Cycle】的計(jì)算。完畢后回到初始狀態(tài),準(zhǔn)備下次的測量。

另外,在TIM4的更新中斷里對(duì)非初始狀態(tài)的溢出事件累加統(tǒng)計(jì),放在變量【Num_OvEvent】里。


示例代碼里用到一個(gè)變量Measure_State來記錄和表示當(dāng)前測試狀態(tài),大致流程如下。


整個(gè)測量過程中,我們使用觸發(fā)脈沖產(chǎn)生的觸發(fā)事件作為每次開啟測量的起始。


3.3、 測量用到的算式

根據(jù)上面的介紹,1次完整的測量下來,測得的周期和占空比可以用下面算式求得:



?

3.4、基本配置準(zhǔn)備

3.4.1 、實(shí)現(xiàn)TIM3 通道1的PWM輸出,計(jì)數(shù)周期5s,占空比40%,用做被測信號(hào)。

A、選擇定時(shí)器內(nèi)部時(shí)鐘作為時(shí)鐘源,STM32F411芯片定時(shí)器內(nèi)部時(shí)鐘為100Mhz;

B、設(shè)置分頻比,選擇計(jì)數(shù)模式、設(shè)置計(jì)數(shù)脈沖個(gè)數(shù);

對(duì)時(shí)鐘源20000分頻,PSC=20000-1;選擇向上計(jì)數(shù)模式up counting;

計(jì)數(shù)器基于分頻后的脈沖每計(jì)數(shù)25000個(gè)后,發(fā)生溢出并產(chǎn)生更新事件及中斷。則:ARR=25000-1

按照上面參數(shù)來設(shè)計(jì),定時(shí)器的定時(shí)周期或者說溢出周期就是5s.

C、它需做PWM輸出,這里選擇PWM 模式1,占空比為40%,

則CCR=(ARR 1)*0.40 =10,000

CubeMx圖形化配置界面:

3.4.2、 實(shí)現(xiàn)TIM4通道2做PWM模式輸入測量,假定tim4計(jì)數(shù)器溢出周期為20ms。


先做時(shí)基參數(shù)的配置:

1、選擇定時(shí)器內(nèi)部時(shí)鐘為時(shí)鐘源,32F411定時(shí)器內(nèi)部時(shí)鐘為100Mhz;

2、設(shè)置分頻比,選擇計(jì)數(shù)模式、設(shè)置計(jì)數(shù)脈沖個(gè)數(shù);

先對(duì)時(shí)鐘源100分頻、即PSC=100-1; 選擇向上計(jì)數(shù)模式up counting;

計(jì)數(shù)器基于分頻后的脈沖每計(jì)數(shù)20000個(gè),發(fā)生溢出并產(chǎn)生更新事件及中斷。則:ARR=20000-1。注意:TIM4工作在復(fù)位從模式。

按照上面參數(shù)來設(shè)計(jì),定時(shí)計(jì)數(shù)周期或者說溢出周期就是20ms.


再看看定時(shí)器TIM4的捕獲配置:

TIM4輸入捕捉通道2配置為直接輸入捕捉,捕捉極性選擇上升沿。

TIM4輸入捕捉通道1配置為間接輸入捕捉,捕捉極性選擇為下降沿。

3.5、工程代碼的生成、添加和整理

通過STM32CUBEMX依據(jù)上述參數(shù)完成配置,并開啟TIM4的中斷使能,然后生成工程。再在工程里添加應(yīng)用戶代碼?!局涣谐霾糠种苯佑嘘P(guān)的】


部分處理代碼簡要說明:

? 發(fā)生觸發(fā)事件時(shí),進(jìn)入測量狀態(tài):

在TIM4通道1發(fā)生下沿捕捉事件時(shí),將前面時(shí)間段的溢出次數(shù)記錄下來并切換測量狀態(tài)。

在TIM4通道2發(fā)生上沿捕捉事件時(shí),將整個(gè)測量周期發(fā)生的溢出次數(shù)記錄下來,并轉(zhuǎn)入計(jì)算處理狀態(tài)。

? ??

另外,在測量狀態(tài)下,基于TIM4的更新中斷對(duì)溢出次數(shù)進(jìn)行統(tǒng)計(jì)。

四、實(shí)驗(yàn)結(jié)果驗(yàn)證

同樣,我們保持實(shí)驗(yàn)中tim4的時(shí)基參數(shù)保持不變,通過調(diào)整TIM3的PWM輸出波形的脈寬和占空比,來看看實(shí)驗(yàn)結(jié)果。


五、小結(jié)

上面介紹了兩種測量信號(hào)脈寬及占空比的方案,都用了捕獲中斷和更新中斷。其中,在第2種方案中用觸發(fā)事件作為每次測量的起始,這算是個(gè)關(guān)鍵點(diǎn)。順便說下,我們在利用定時(shí)器測量脈寬涉及到更新事件次數(shù)統(tǒng)計(jì)時(shí),比較容易出現(xiàn)多統(tǒng)計(jì)一次的問題。因?yàn)槎〞r(shí)器初始化完成后會(huì)軟件產(chǎn)生一次更新事件,所以建議在啟動(dòng)定時(shí)器更新中斷前對(duì)該標(biāo)志位做個(gè)清零操作。不過,在我上面兩個(gè)方案的示例代碼的初始化階段,這個(gè)操作倒是可有可無,因?yàn)槲业拇a里對(duì)更新事件計(jì)數(shù)還要結(jié)合狀態(tài)機(jī),并非一有更新中斷就累加。


上面提到的實(shí)現(xiàn)思路及代碼僅供參考,旨在拋磚引玉。當(dāng)你對(duì)原理把握得越清晰時(shí),應(yīng)用就越靈活。最后,就上面提到的兩種測量方案基于個(gè)人的理解做個(gè)簡單比較。



【注:2個(gè)通道并不意味著需要2個(gè)物理管腳,其實(shí)1個(gè)腳就夠了。另外基于定時(shí)器捕獲功能配合DMA,解碼方面也能有很好的發(fā)揮。


?下方的小視頻,是基于單通道模式測量信號(hào)占空比的驗(yàn)證部分的視頻剪輯,有興趣可以打開看下。

==================================

往期話題閱讀鏈接[點(diǎn)擊即可閱讀]:

1、IAP代碼與APP代碼合并燒錄示例

2、基于STM32 GUI應(yīng)用的選型推薦

3、STM32H743從RAM啟動(dòng)異常的案例

4、PCB板邊緣的敏感線為何容易ESD干擾

5、一個(gè)關(guān)于CAN出錯(cuò)中斷重復(fù)出現(xiàn)的話題




本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉(zhuǎn)型技術(shù)解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關(guān)鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對(duì)日本游戲市場的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對(duì)環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競爭力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競爭優(yōu)勢...

關(guān)鍵字: 通信 BSP 電信運(yùn)營商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺(tái)與中國電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場 NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡稱"軟通動(dòng)力")與長三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉