0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

STM32定時器同步啟動示例及應(yīng)用提醒

茶話MCU ? 來源:茶話MCU ? 2023-11-09 10:49 ? 次閱讀

我們有時會利用STM32片內(nèi)的多個TIMER進(jìn)行級聯(lián),實(shí)現(xiàn)同步啟動。不過有人會遇到?jīng)]法同步啟動的情況;或者說基于相同的配置,某次可以成功,下次再來又不行了;或者說同樣的芯片、同樣的代碼,別人的可以,而自己卻不行云云。所謂不行、不成功就是指基于同步啟動后,主從TIMER的PWM輸出相位肉眼可見的不同步,明顯存在啟動時間差。

我這里不妨先以STM32G4芯片內(nèi)TIM1/TIM2/TIM3為例來演示下實(shí)現(xiàn)過程??纯吹降啄芊駥?shí)現(xiàn),會不會碰到無法同步的情形。如果有,可否解決。

根據(jù)該系列參考手冊有關(guān)TIMER內(nèi)部互聯(lián)關(guān)系圖可知TIM1/TIM2/TIM3就可以建立起主從關(guān)系。下圖便是其中的一部分TIMER信號互聯(lián)觸發(fā)關(guān)系圖。

93ebfe7c-7eaa-11ee-939d-92fbcf53809c.png

我將TIM1/TIM2/TIM3按照下面的方式前后主從級聯(lián)。

940b22ca-7eaa-11ee-939d-92fbcf53809c.png

TIM1的觸發(fā)輸出TRGO作為TIM2的觸發(fā)輸入【ITR0】,TIM2的觸發(fā)輸出TRGO作為TIM3的觸發(fā)輸入【ITR1】,其中TIM2/TIM3均配置在Trigger從模式。至于TIM1和TIM2的觸發(fā)輸出【TRGO】信號均選擇各自計(jì)數(shù)器的使能動作,即對定時器的TIMx_CR1@CEN位置1。對于處在Trigger從模式的定時器,外來觸發(fā)信號具有對TIMER計(jì)數(shù)器使能的同等效果。TIM3的TRGO不必關(guān)注,因?yàn)門IMER級聯(lián)應(yīng)用時,TRGO信號是給下一級TIMER用的。

使用CubeMx對STM32G431進(jìn)行配置。配置過程中將主從模式控制位MSM使能,具體參考下面配置?!咀ⅲ?個定時器的時基參數(shù)及PWM配置都一樣。未對計(jì)數(shù)時鐘做分頻。最后希望輸出3路完全同頻同相的波形?!?/p>

94467fc8-7eaa-11ee-939d-92fbcf53809c.png

9468bf0c-7eaa-11ee-939d-92fbcf53809c.png

947ff03c-7eaa-11ee-939d-92fbcf53809c.png

利用CubeMx完成配置后,基于STM32 HAL庫添加用戶代碼進(jìn)行驗(yàn)證測試。經(jīng)測試,發(fā)現(xiàn)3路輸出同步與否 跟 3個定時器的初始化代碼順序有明顯的關(guān)系。

94ab6708-7eaa-11ee-939d-92fbcf53809c.png

比如,基于上面初始配置順序的3路輸出就沒有做到同步啟動,貌似互不理睬。

94cd9f4e-7eaa-11ee-939d-92fbcf53809c.png

同樣,基于上面初始配置順序的3路輸出也沒有做到完美同步啟動,中間那路明顯異類。

94e7ee08-7eaa-11ee-939d-92fbcf53809c.png

然而,基于上面初始化順序的3路輸出倒是同步完美。

現(xiàn)在3個TIMER,初始化配置代碼擺放先后順序共6種組合,我把6種組合的實(shí)現(xiàn)結(jié)果集中在下面表格里一起來看。

9510f442-7eaa-11ee-939d-92fbcf53809c.png

我們發(fā)現(xiàn)上面6種組合中,僅表格里最后一組可以實(shí)現(xiàn)完美同步輸出,符合預(yù)期。

也就是說,只有初始化時遵循先主后從的配置順序才可能實(shí)現(xiàn)完美同步啟動。

95387562-7eaa-11ee-939d-92fbcf53809c.png

在正確的配置順序下,我們不妨看看啟動后三個定時器的計(jì)數(shù)情況:【下圖是兩次隨機(jī)暫停程序讀到的3個計(jì)數(shù)器的值,見紅線下劃線標(biāo)示的】

954ddd26-7eaa-11ee-939d-92fbcf53809c.png

我們可以清晰地看到任意兩次暫停得到的三個計(jì)數(shù)器的值,兩兩主從定時器的計(jì)數(shù)值相差1個定時器外設(shè)時鐘單位,注意是TIMER外設(shè)時鐘,并不是計(jì)數(shù)時鐘,具體到這里就是1us/170?!疽虼丝虥]有對時鐘源分頻,計(jì)數(shù)時鐘剛好等于TIMER外設(shè)時鐘】

957a4e56-7eaa-11ee-939d-92fbcf53809c.png

一般來講,主從間的這1個TIMER外設(shè)時鐘的延時不該對應(yīng)用構(gòu)成影響,若覺得有影響,大概率是您選錯芯片了,或許該選個主頻更高的。何況當(dāng)對計(jì)數(shù)時鐘做分頻后,計(jì)數(shù)器往往沒法感覺和區(qū)分這個細(xì)小延時的。當(dāng)然,實(shí)在有強(qiáng)迫癥或其它想法,如果計(jì)數(shù)時鐘跟TIMER外設(shè)時鐘相同,即未做分頻前提下,我們還可以通過修改計(jì)數(shù)器初始值保證啟動后保持相同計(jì)數(shù)值或預(yù)期值。比方,在正確初始配置順序下,啟動前將三個計(jì)數(shù)器的初始值稍作調(diào)整,見下圖紅線方框里的代碼。

959626d0-7eaa-11ee-939d-92fbcf53809c.png

這樣調(diào)整后,每次暫停程序運(yùn)行時,三個計(jì)數(shù)器的值總是保持高度一致,不差分毫。

提醒:剛才通過調(diào)整計(jì)數(shù)初值實(shí)現(xiàn)徹底的計(jì)數(shù)器同步計(jì)數(shù)僅限于計(jì)數(shù)時鐘源沒有做分頻的前提下,若計(jì)數(shù)時鐘有被分頻是不需要這么做的,也不能這么做。因?yàn)槟?個主從啟動硬件延時是跟著外設(shè)時鐘走的,不是跟著計(jì)數(shù)時鐘走的。當(dāng)計(jì)數(shù)時鐘被分頻后,計(jì)數(shù)器往往感受不到那個延時了,顯然分頻系數(shù)越大越感覺不到主從間的那個延時。如果此時手動額外在計(jì)數(shù)器初值上加1或加2就弄巧成拙了,本來可以忽略的延時被你這么一加反而加大延時了。當(dāng)然,為產(chǎn)生啟動相差而有意調(diào)整計(jì)數(shù)初始值又是另外一回事了。

到此,我們也順便看看像下面級聯(lián)的情形,主從級聯(lián),從級并列多個定時器被同一觸發(fā)信號觸發(fā)。

95c1dde8-7eaa-11ee-939d-92fbcf53809c.png

95dbfdc2-7eaa-11ee-939d-92fbcf53809c.png

具體到這里,TIM1的觸發(fā)輸出同時接到TIM2/TIM3/TIM4的內(nèi)部觸發(fā)輸入。內(nèi)部信號接法見上圖。

我們照樣使用cubeMx配置4個TIMER。

9600a8a2-7eaa-11ee-939d-92fbcf53809c.png

962585c8-7eaa-11ee-939d-92fbcf53809c.png

9643114c-7eaa-11ee-939d-92fbcf53809c.png

966796ac-7eaa-11ee-939d-92fbcf53809c.png

完成配置后,添加用戶代碼、稍加整理 。注意各定時器的初始化順序,必須按照先主后從的順序進(jìn)行,同級并聯(lián)的無所謂先后。至于各定時器的啟動函數(shù)順序,原則上要求跟初始化順序反過來,即按照先從后主的順序來啟動。

運(yùn)行代碼,可以看到4個TIMER輸出的PWM輸出同步得很完美。同樣,我們也可以通過隨機(jī)暫停程序查看4個定時器的計(jì)數(shù)值的情況。下圖就是任意時刻暫停程序后得到的4個計(jì)數(shù)器的數(shù)據(jù)。詳見下面截圖底部表格說明。

9695d4fe-7eaa-11ee-939d-92fbcf53809c.png

顯然,在初始計(jì)數(shù)值相同情況下,主從定時器的計(jì)數(shù)值相差1個定時外設(shè)時鐘,這點(diǎn)跟上面的測試是一致的。另外,基于一個觸發(fā)信號下的同級定時器沒有計(jì)數(shù)差值。

總的說來,STM32芯片內(nèi)多個TIMER實(shí)現(xiàn)同步啟動完全可以實(shí)現(xiàn),而且可以做到很好的同步,配置也簡單。通常使用計(jì)數(shù)器的使能信號作為觸發(fā)信號。應(yīng)用中最常見的問題莫過于定時器初始化順序不當(dāng),記得按照先主后從的順序進(jìn)行,否則會導(dǎo)致無法實(shí)現(xiàn)整體同步啟動及預(yù)期輸出,這里特作提醒。

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • 芯片
    +關(guān)注

    關(guān)注

    450

    文章

    49636

    瀏覽量

    417196
  • PWM
    PWM
    +關(guān)注

    關(guān)注

    114

    文章

    5059

    瀏覽量

    212204
  • STM32
    +關(guān)注

    關(guān)注

    2258

    文章

    10828

    瀏覽量

    352499
  • 定時器
    +關(guān)注

    關(guān)注

    23

    文章

    3218

    瀏覽量

    113688
收藏 人收藏

    評論

    相關(guān)推薦

    定時器的使用方法 MM32主/從定時器同步與精準(zhǔn)定時操作實(shí)例

    。這里所謂某一個條件可以是定時到時、定時器超時、比較成功等許多條件。這種通過一個定時器觸發(fā)另一個定時器的工作方式稱為定時器
    發(fā)表于 01-11 11:25 ?4221次閱讀

    STM32F1通用定時器示例詳解--TIM15_Compleme

    STM32F1通用定時器示例詳解--TIM15_ComplementarySignals
    發(fā)表于 12-07 18:15 ?0次下載

    STM32F1通用定時器示例講解_Timebase

    STM32F1通用定時器示例詳解—Timebase
    發(fā)表于 12-07 18:14 ?0次下載

    stm32定時器中斷程序

    STM32定時器是個強(qiáng)大的模塊,定時器使用的頻率也是很高的,定時器可以做一些基本的定時,還可以做PWM輸出或者輸入捕獲功能。 以下是進(jìn)行
    發(fā)表于 10-12 16:59 ?1.3w次閱讀

    如何進(jìn)行多個定時器主從級聯(lián)同步輸出詳細(xì)配置示例說明

    有些應(yīng)用場合,我們需要使用多個定時器主從級聯(lián),然后讓各個定時器同時啟動并做同頻同相的PWM波形輸出。要完成這個功能,有時發(fā)現(xiàn)實(shí)現(xiàn)起來似乎并沒有那么順暢,這里基于STM32F1系列芯片做
    的頭像 發(fā)表于 02-03 12:27 ?4.4w次閱讀
    如何進(jìn)行多個<b class='flag-5'>定時器</b>主從級聯(lián)<b class='flag-5'>同步</b>輸出詳細(xì)配置<b class='flag-5'>示例</b>說明

    關(guān)于STM32定時器觸發(fā)SPI逐字收發(fā)之應(yīng)用示例

    STM32定時器觸發(fā)SPI逐字收發(fā)之應(yīng)用示例
    的頭像 發(fā)表于 01-14 16:35 ?5363次閱讀

    基于STM32定時器捕獲測量脈寬的應(yīng)用示例

    我們知道,利用單片機(jī)定時器捕獲功能測量脈沖信號寬度及占空比是種很常見的做法。這里以STM32定時器為例來介紹基于其捕獲功能實(shí)現(xiàn)對脈寬的測量的思路及過程。 一般來講,使用STM32
    的頭像 發(fā)表于 01-02 18:17 ?1.2w次閱讀
    基于<b class='flag-5'>STM32</b><b class='flag-5'>定時器</b>捕獲測量脈寬的應(yīng)用<b class='flag-5'>示例</b>

    [STM32]通用定時器的使用

    STM32的通用定時器定時、輸出PWM功能的使用本次還是使用發(fā)光二極管來驗(yàn)證定時器的使用目錄STM32的通用
    發(fā)表于 11-22 19:06 ?24次下載
    [<b class='flag-5'>STM32</b>]通用<b class='flag-5'>定時器</b>的使用

    STM32定時器-基本定時器

    目錄定時器分類基本定時器功能框圖講解基本定時器功能時鐘源計(jì)數(shù)時鐘計(jì)數(shù)自動重裝載寄存
    發(fā)表于 11-23 18:21 ?31次下載
    <b class='flag-5'>STM32</b><b class='flag-5'>定時器</b>-基本<b class='flag-5'>定時器</b>

    STM32——高級定時器、通用定時器、基本定時器的區(qū)別

    STM32——高級定時器、通用定時器、基本定時器的區(qū)別
    發(fā)表于 11-26 15:21 ?110次下載
    <b class='flag-5'>STM32</b>——高級<b class='flag-5'>定時器</b>、通用<b class='flag-5'>定時器</b>、基本<b class='flag-5'>定時器</b>的區(qū)別

    STM32定時器學(xué)習(xí)---基本定時器

    STM32F1系列的產(chǎn)品,除了互聯(lián)網(wǎng)產(chǎn)品外,工作8個,3種定時器,其中一種就是基本定時器。那么STM32單片機(jī)的基本定時器如何操作以及編程呢
    發(fā)表于 12-02 14:06 ?27次下載
    <b class='flag-5'>STM32</b><b class='flag-5'>定時器</b>學(xué)習(xí)---基本<b class='flag-5'>定時器</b>

    ???STM32之玩轉(zhuǎn)定時器TIMX???

    TIM8是STM32的高級定時器,TIM6,TIM7為基本定時器,其他為通用定時器基本定時器TIM6和TIM7
    發(fā)表于 12-28 19:08 ?18次下載
    ???<b class='flag-5'>STM32</b>之玩轉(zhuǎn)<b class='flag-5'>定時器</b>TIMX???

    STM32各類系列定時器概覽

    時鐘源;介紹了如何使用各種可用模式與功能;介紹了如何計(jì)算各種配置下的時基;除基本定時器模式外,還介紹了定時器同步序列以及用于電機(jī)控制應(yīng)用的高級功能。本文檔針對各模式提供了典型配置以及使用方法的
    發(fā)表于 08-31 10:49 ?0次下載

    定時器定時啟動信號特點(diǎn)

    定時器定時啟動信號特點(diǎn)? 定時器是一種常用的計(jì)時,可以在指定的時間后發(fā)出信號。它們在各種電器、儀器和控制系統(tǒng)中被廣泛應(yīng)用。
    的頭像 發(fā)表于 10-24 11:49 ?715次閱讀

    STM32H7芯片系列中定時器同步啟動并輸出PWM波形的實(shí)現(xiàn)方法

    本文主要研究了STM32H7芯片系列中定時器同步啟動并輸出PWM波形的實(shí)現(xiàn)方法。
    的頭像 發(fā)表于 10-24 14:56 ?1381次閱讀
    <b class='flag-5'>STM32</b>H7芯片系列中<b class='flag-5'>定時器</b><b class='flag-5'>同步</b><b class='flag-5'>啟動</b>并輸出PWM波形的實(shí)現(xiàn)方法