色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

基于STM32定時器捕獲測量脈寬的應用示例

茶話MCU ? 來源:ST MCU 信息交流 ? 作者:ST MCU 信息交流 ? 2021-01-02 18:17 ? 次閱讀

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

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

不妨先介紹基于單個通道的輸入捕獲功能來實現對1路信號脈沖寬度及占空比的測量,并在測量過程中統計用于測量的定時器自身的溢出事件,以保障即使被測信號脈寬長于測量定時器自身的溢出周期時也能有效測量。

這里選用STM32F411 Nucleo 開發板 ,集成開發環境選用了ARM MDK IDE。

一、實現思路及步驟

1.1、使用STM32F411Nucleo板的板載芯片內的TIM3的通道1產生一個周期為5s,占空比為40%的PWM輸出信號,然后將該信號連線到TIM4的定時器輸入通道2,通過它對來自于TIM3的PWM輸出信號進行脈寬及占空比的測量。

測量過程中,TIM4的通道2對外來信號的捕捉過程是這樣的,TIM4的通道2對外來信號的一個完整周期實現 3次捕捉。每次捕捉事件時計數器的值會被裝入CCR寄存器。

d8930054-445e-11eb-8b86-12bb97331649.png

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

另外,在TIM4的更新中斷里對非初始狀態的溢出事件累加統計,放在變量【Num_OvEvent】里。

示例代碼里用到變量Measure_State來記錄和表示當前測試狀態。

d8f03f94-445e-11eb-8b86-12bb97331649.png

1.2 、測量用到的算式

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

【下面算式貌似復雜,只需把上面測試原理和那幾個數據理清自然就會計算】

d92e33da-445e-11eb-8b86-12bb97331649.png

1.3 、基本配置準備

1.3.1、 實現TIM3 通道1【PA6】PWM輸出,計數周期5s,占空比40%,用做被測信號。

A、選擇定時器內部時鐘作為時鐘源,STM32F411芯片定時器內部時鐘為100Mhz;

B、設置分頻比,選擇計數模式、設置計數脈沖個數;

對時鐘源20000分頻,PSC=20000-1;選擇向上計數模式up counting;

計數器基于分頻后的脈沖每計數設置為25000個后,發生溢出并產生更新事件及中斷。則:ARR=25000-1

按照上面參數來設計,定時器的定時周期或者說溢出周期就是5s.

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

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

使用STM32CubeMx圖形化工具進行配置:

d9508fac-445e-11eb-8b86-12bb97331649.png

d9850bd8-445e-11eb-8b86-12bb97331649.png

1.3.2、實現TIM4通道2的輸入捕獲,假定TIM4的溢出周期為20ms.

A、選擇定時器內部時鐘為時鐘源,32F411定時器內部時鐘為100Mhz;

B、設置分頻比,選擇計數模式、設置計數脈沖個數;

先對時鐘源100分頻、即PSC=100-1;選擇向上計數模式up counting;

計數器基于分頻后的脈沖每計數20000個,發生溢出并產生更新事件及中斷。

則:ARR=20000-1

按照上面參數來設計,定時計數周期或者說溢出周期就是20ms.

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

d9d265ea-445e-11eb-8b86-12bb97331649.png

da1102f0-445e-11eb-8b86-12bb97331649.png

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

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

......

Measure_State= 0x00; //測試初始態

Num_OvEvent= 0x00;//TIM4溢出次數初始值

da6b6646-445e-11eb-8b86-12bb97331649.png

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

在TIM4通道2的捕獲中斷里做3次捕捉值的獲取以及計算,在TIM4更新中斷里對溢出事件進行統計。

daa65cec-445e-11eb-8b86-12bb97331649.png

daea4614-445e-11eb-8b86-12bb97331649.png

db34f9de-445e-11eb-8b86-12bb97331649.png

db7ecc12-445e-11eb-8b86-12bb97331649.png

二、本次示例的結果驗證

實驗中tim4的時基參數保持不變,可通過調整TIM3的PWM輸出的脈寬和占空比,來看看實驗結果。下面有一個視頻剪輯,就是上面工程驗證結果的部分內容,有興趣可以觀看。

上面簡單介紹了基于單通道的定時器捕獲實現對脈寬及占空比測量的過程,現在繼續介紹使用雙通道,基于定時器PWM輸入模式測量脈寬及占空比。同樣,在測量過程中也統計用于測量的定時器自身的溢出事件。所用開發板和開發環境跟上面一致。

dba5b6c4-445e-11eb-8b86-12bb97331649.png

三、實現原理、思路及步驟

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

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

*它是基于輸入捕獲與定時器從模式相結合的一個具體應用。

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

*用于測量的定時器配置在復位從模式,外部輸入信號的濾波信號TIxFPx作為定時器的觸發信號,令定時器復位。

*經過兩次連續的捕捉結合定時器的溢出事件統計可方便地測得信號的周期及占空比。

dbd637a4-445e-11eb-8b86-12bb97331649.png

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

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

dc02f3ac-445e-11eb-8b86-12bb97331649.png

當從通道2出現信號的上升沿時,TIM4計數器被復位清零,同時產生更新事件和觸發事件,相關標志位會被硬件置1.

dc623132-445e-11eb-8b86-12bb97331649.png

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

另外,在TIM4的更新中斷里對非初始狀態的溢出事件累加統計,放在變量【Num_OvEvent】里。

示例代碼里用到一個變量Measure_State來記錄和表示當前測試狀態,大致流程如下。

dd1e0c86-445e-11eb-8b86-12bb97331649.png

整個測量過程中,我們使用觸發脈沖產生的觸發事件作為每次開啟測量的起始。

3.3、 測量用到的算式

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

dd6159f0-445e-11eb-8b86-12bb97331649.png

dbd637a4-445e-11eb-8b86-12bb97331649.png

3.4、基本配置準備

3.4.1 、實現TIM3 通道1的PWM輸出,計數周期5s,占空比40%,用做被測信號。

A、選擇定時器內部時鐘作為時鐘源,STM32F411芯片定時器內部時鐘為100Mhz;

B、設置分頻比,選擇計數模式、設置計數脈沖個數;

對時鐘源20000分頻,PSC=20000-1;選擇向上計數模式up counting;

計數器基于分頻后的脈沖每計數25000個后,發生溢出并產生更新事件及中斷。則:ARR=25000-1

按照上面參數來設計,定時器的定時周期或者說溢出周期就是5s.

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

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

CubeMx圖形化配置界面:

d9508fac-445e-11eb-8b86-12bb97331649.png

d9850bd8-445e-11eb-8b86-12bb97331649.png

3.4.2、 實現TIM4通道2做PWM模式輸入測量,假定tim4計數器溢出周期為20ms。

先做時基參數的配置:

1、選擇定時器內部時鐘為時鐘源,32F411定時器內部時鐘為100Mhz;

2、設置分頻比,選擇計數模式、設置計數脈沖個數;

先對時鐘源100分頻、即PSC=100-1; 選擇向上計數模式up counting;

計數器基于分頻后的脈沖每計數20000個,發生溢出并產生更新事件及中斷。則:ARR=20000-1。注意:TIM4工作在復位從模式。

按照上面參數來設計,定時計數周期或者說溢出周期就是20ms.

de371342-445e-11eb-8b86-12bb97331649.png

再看看定時器TIM4的捕獲配置:

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

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

de5f87aa-445e-11eb-8b86-12bb97331649.png

de99ba7e-445e-11eb-8b86-12bb97331649.png

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

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

dec7adda-445e-11eb-8b86-12bb97331649.png

部分處理代碼簡要說明:

發生觸發事件時,進入測量狀態:

deefa81c-445e-11eb-8b86-12bb97331649.png

在TIM4通道1發生下沿捕捉事件時,將前面時間段的溢出次數記錄下來并切換測量狀態。

df19f9d2-445e-11eb-8b86-12bb97331649.png

在TIM4通道2發生上沿捕捉事件時,將整個測量周期發生的溢出次數記錄下來,并轉入計算處理狀態。

df662910-445e-11eb-8b86-12bb97331649.png

另外,在測量狀態下,基于TIM4的更新中斷對溢出次數進行統計。

df8d99a0-445e-11eb-8b86-12bb97331649.png

四、實驗結果驗證

同樣,我們保持實驗中tim4的時基參數保持不變,通過調整TIM3的PWM輸出波形的脈寬和占空比,來看看實驗結果。

五、小結

上面介紹了兩種測量信號脈寬及占空比的方案,都用了捕獲中斷和更新中斷。其中,在第2種方案中用觸發事件作為每次測量的起始,這算是個關鍵點。順便說下,我們在利用定時器測量脈寬涉及到更新事件次數統計時,比較容易出現多統計一次的問題。因為定時器初始化完成后會軟件產生一次更新事件,所以建議在啟動定時器更新中斷前對該標志位做個清零操作。不過,在我上面兩個方案的示例代碼的初始化階段,這個操作倒是可有可無,因為我的代碼里對更新事件計數還要結合狀態機,并非一有更新中斷就累加。

上面提到的實現思路及代碼僅供參考,旨在拋磚引玉。當你對原理把握得越清晰時,應用就越靈活。最后,就上面提到的兩種測量方案基于個人的理解做個簡單比較。

dfb7b3ac-445e-11eb-8b86-12bb97331649.png

【注:2個通道并不意味著需要2個物理管腳,其實1個腳就夠了。另外基于定時器捕獲功能配合DMA,解碼方面也能有很好的發揮?!?/p>

原文標題:基于定時器捕獲測量脈寬的應用示例

文章出處:【微信公眾號:ST MCU 信息交流】歡迎添加關注!文章轉載請注明出處。

責任編輯:haq

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 單片機
    +關注

    關注

    6042

    文章

    44617

    瀏覽量

    637520
  • STM32
    +關注

    關注

    2270

    文章

    10923

    瀏覽量

    357072
  • 定時器
    +關注

    關注

    23

    文章

    3255

    瀏覽量

    115174

原文標題:基于定時器捕獲測量脈寬的應用示例

文章出處:【微信號:stmcu832,微信公眾號:茶話MCU】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    STM32CUBEMX(5)--自定義紅外NEC解碼,定時器TIM捕獲方式

    (TIM_HandleTypeDef *htim) { uint32_t fallingCount = 0 ; // 下降沿計數 uint8_t temp = 0 ; // 判斷是否是定時器1的外部捕獲口2
    發表于 09-05 16:19

    定時器的基本組成和工作模式

    定時器是計算機或電子設備中常見的一個硬件或軟件組件,其主要功能是測量和控制時間的流逝。它在各種應用中起著至關重要的作用,如操作系統調度、多媒體播放、網絡通信、工業自動化控制以及家電設備的定時功能等。
    的頭像 發表于 08-19 18:28 ?1580次閱讀

    定時器的工作方式介紹

    定時器是計算機和嵌入式系統中常見的一種硬件模塊,用于實現定時和計數功能。定時器的工作方式通常由一組寄存來控制,這些寄存定義了
    的頭像 發表于 07-12 10:29 ?1088次閱讀

    STM32G4系列芯片定時器的延時輸出問題

    有人使用STM32G4系列芯片內部的多個定時器做PWM輸出,輸出頻率一樣,占空比也一樣,均為50%。可是,當他中途調整各個定時器以相同的工作參數,即改變ARR的值和CCR值后,會發現TIM2和TIM5兩個
    的頭像 發表于 07-01 09:45 ?1865次閱讀
    <b class='flag-5'>STM32</b>G4系列芯片<b class='flag-5'>定時器</b>的延時輸出問題

    鴻蒙開發系統基礎能力:Timer定時器

    設置一個定時器,該定時器定時器到期后執行一個函數。
    的頭像 發表于 06-28 11:33 ?1058次閱讀
    鴻蒙開發系統基礎能力:Timer<b class='flag-5'>定時器</b>

    STM8怎么測量?

    在做STM8測量,思路不清楚(計算的方法),望大神指點。
    發表于 05-16 08:24

    stm32 tim1輸入捕獲+DMA,如果長時間無信號,輸出報警信號怎么解決?

    要求:實現測量外部脈沖寬度,讀取后,清除數據,如果長時間無
    發表于 05-11 06:08

    stm32定時器的如何外部啟動?

    我想利用stm32定時器精確定時一個信號從發生到結束的時間,想讓定時器通過外部觸發開啟,一般有什么方法。
    發表于 05-10 06:40

    求助,關于STM32定時器級聯做計數的問題求解

    最近在做一個設計,使用STM32L1的定時器做一個大的計數,每當外部PPS信號進來后,利用捕獲功能來計算捕獲值。這個計數
    發表于 05-10 06:15

    stm32的一個定時器可以同時計算兩個光柵編碼嗎?

    使用另一個配置在捕獲模式的定時器,測量兩個編碼事件的間隔,可以獲得動態的信息(速度,加速度,減速度)。”那樣的話用來測速一個電機就需要兩個定時器
    發表于 05-07 06:40

    如何實現一個軟件定時器?

    在Linux,uC/OS,FreeRTOS等操作系統中,都帶有軟件定時器,原理大同小異。典型的實現方法是:通過一個硬件定時器產生固定的時鐘節拍,每次硬件定時器中斷到,就對一個全局的時間標記加一,每個軟件
    的頭像 發表于 04-29 11:00 ?726次閱讀

    ?PLC定時器介紹

    定時器是PLC中重要的編程元件,是累計時間增量的內部器件。大部分自動控制領域都需要定時器進行延時控制,靈活地使用定時器可以編制出復雜的控制程序。
    發表于 03-22 12:36 ?2541次閱讀
    ?PLC<b class='flag-5'>定時器</b>介紹

    如果STM32定時器外接了正交編碼,該剩余通道是否能做PWM輸出呢?

    其實,對于STM32芯片,編碼輸入信號就是定時器的計數時鐘源之一。定時器外接了編碼輸入,若還有剩余通道的話,剩余通道依然可以實現輸入捕獲或輸出比較功能。
    的頭像 發表于 03-21 09:06 ?1954次閱讀
    如果<b class='flag-5'>STM32</b><b class='flag-5'>定時器</b>外接了正交編碼<b class='flag-5'>器</b>,該剩余通道是否能做PWM輸出呢?

    stm32G4 H7系列的HRTIM高分辨率定時器可以做捕獲輸入嗎?

    stm32G4,H7系列的HRTIM高分辨率定時器可以做捕獲輸入嗎,如果可以輸入引腳在哪。想測量外部脈沖頻率600-800KHz,誤差盡量小(±10Hz) 有什么方案給推薦一下。謝謝!
    發表于 03-15 07:33

    使用555定時器的可調雙定時器電路

    定時器 IC 555 是最通用和最常用的 IC 之一,因為它的應用范圍更廣,如 PWM放大器、延遲定時器、開關電路、占空比選擇、時鐘脈沖發生等。這也可用于各種應用,如精確
    的頭像 發表于 02-25 15:16 ?2369次閱讀
    使用555<b class='flag-5'>定時器</b>的可調雙<b class='flag-5'>定時器</b>電路
    主站蜘蛛池模板: 亚洲欧美日韩另类精品一区二区三区 | 一本道高清无码v | 九九热精品在线 | 日韩欧美三区 | 欧美熟妇VIVOE精品 | 欧美另类极品videosbest | 国产不卡无码高清视频 | 色四房播播 | 51xx午夜影视福利 | 成人免费肉动漫无遮网站 | 日本特黄的免费大片视频 | 五月丁香啪啪. | 曰产无码久久久久久精品 | 国产高清亚洲 | 欧美激情一区二区三区AA片 | 国产高清视频免费在线观看 | 欧美一区二区影院 | 9位美女厕所撒尿11分 | 综合一区无套内射中文字幕 | 野花4在线观看 | 国产免费麻传媒精品国产AV | 夜色福利院在线观看免费 | 秋霞成人午夜鲁丝一区二区三区 | 丰满的大白屁股ass 丰满大屁俄罗斯肥女 | 戳女人屁股流水羞羞漫画 | 伊人久久综合成人亚洲 | 香港日本三级亚洲三级 | 久久精品视频uu | 拔萝卜在线高清观看视频 | 色婷婷国产精品视频一区二区 | 亚洲午夜一区二区电影院 | xxx日本免费 | 97久久伊人精品影院 | 国产精品自产拍在线观看网站 | 国产精品一国产AV麻豆 | 久久黄色片| 无码不卡中文字幕在线观看 | 俄罗斯6一12呦女精品 | 囯产免费久久久久久国产免费 | 全部免费特黄特色大片看片 | 十八禁肉动漫无修在线播放 |