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

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

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

STM32定時器做PWM輸出時的電平話題

茶話MCU ? 來源:ST MCU 信息交流 ? 2019-11-20 14:51 ? 次閱讀

經(jīng)常有人問起STM32定時器做PWM輸出時的電平話題,這里就聊聊該話題。

對于STM32常規(guī)定時器,其比較輸出模式除了強制輸出模式以外,還有匹配切換模式、PWM輸出模式,不論是匹配切換模式還是PWM輸出模式,最終的輸出電平由計數(shù)器的值與比較寄存器的值之比較結(jié)果,并結(jié)合極性選擇位來決定。

當(dāng)極性選擇位為0時,OCx端的輸出跟比較輸出控制器的輸出信號OCxREF保持同相,當(dāng)極性選擇位為1時,OCx端的輸出跟比較輸出控制器的輸出信號OCxREF保持反相關(guān)系。

下圖是一常規(guī)定時器的通道4的輸出結(jié)構(gòu)框圖.

我們在使用TIMER的pwm過程中,當(dāng)通過關(guān)閉計數(shù)器停止PWM輸出時,由于停止時間點的隨機性導(dǎo)致計數(shù)器的值不定,進而引起CNT的值與CCR的值出現(xiàn)不定的比較結(jié)果,最終體現(xiàn)在OC輸出端呈現(xiàn)不確定的電平。有些時候,我們停止或暫停PWM輸出時往往希望OC輸出端呈現(xiàn)我們所期望的電平。

這個怎么辦呢?方法一般可以有下面幾種。

第一種,將相關(guān)PWM輸出的GPIO口的復(fù)用功能取消,對其進行GPIO的高低控制。這種方法簡單可行,有點粗暴。但不影響定時器的現(xiàn)有輸出配置。要恢復(fù)功能的話,需重新對GPIO做復(fù)用配置。

第二種,采用定時器輸出模式中的強制輸出,將相應(yīng)的OC端輸出指定的高低電平。

這種方法,同樣簡單有效。不影響GPIO配置,但影響了定時器的現(xiàn)有輸出配置。要恢復(fù)PWM功能時需重新對定時器的輸出功能做配置。

第三種,通過修改CCR為特別的值,將CCR的值與CNT的比較結(jié)果固定下來,從而得到所期望的輸出電平。

第一種、第二種方式,可行但稍顯繁瑣了點。除非不需要PWM輸出了,不然還得重新配置回去。這里重點介紹第三種,簡單地修改CCR寄存器地值而鎖定OC腳的輸出電平,要繼續(xù)輸出PWM的話,只需修改CCR值即可,無須其它配置。

下圖是定時器某通道的PWM輸出波形示意圖。采用PWM1輸出模式,計數(shù)器采用向上計數(shù)模式。極性選擇為高有效,即極性控制位CCxP=0。此時OCx輸出將與中間參考信號OCxREF同相輸出。其中ARR=8。

從上圖中我們看到,當(dāng)CCR的值取0或比ARR值還大時,OCxREF將保持固定電平輸出,相應(yīng)地OCx端也會結(jié)合極性選擇位輸出固定電平?;谶@個特性,我們可以隨時修改某通道的CCR值來取消其PWM輸出。【嚴格上講,不能說取消了它的PWM輸出,只是輸出了一個固定電平,占空比為100%或0】

上面是針對非互補通道停止PWM輸出的確定電平的實施方案。有人會問那對于互補通道的PWM輸出的中途停止,電平如何確定呢?這個問題其實有點怪,但偏偏常有人問起。

通常情況下,對于互補輸出通道不同狀態(tài)下的輸出特性,在STM32參考手冊中高級定時器的寄存器描述中有個表格都羅列出來了。下圖是STM32F4參考手冊中TIM1的互補通道輸出特性表【只是完整表格中的一部分,主輸出使能的情況下】。

對于PWM互補輸出的停止,可能是停止1個通道,也可能停止一對互補通道,即2個通道。

如果只需停止1個通道的輸出,我們可以參考上述表格來配置。

若希望停止了PWM輸出的OCx端輸出低電平,我們可以選擇上圖中橙色欄的配置。

若希望停止了PWM輸出的OCx端輸出高電平,這時情況稍微復(fù)雜些。

此時我們可以考慮選擇淺藍色欄的配置。不過,此時的OCx輸出跟極性選擇位一致,如果極性選擇位為0,則輸出低電平;如果極性選擇位為1,則輸出高電平。也就是說,這種情況下,所選擇通道停止輸出時的電平跟極性選擇位有關(guān)。

如果覺得自己的應(yīng)用有這方面的需求,事先規(guī)劃PWM功能時就要考慮極性選擇位安排問題。當(dāng)然,由于極性選擇位影響到最終OCx輸出端,可能會遇到極性選擇位和PWM輸出波形在應(yīng)用上兼顧不過來的情形,這時可以考慮對所選擇通道的PWM復(fù)用功能取消,直接操作GPIO來控制OCx腳的輸出電平。

?若希望暫停一對互補通道的PWM輸出呢?這里有幾種情況:

1、暫停PWM輸出后,希望OCx/OCxN端輸出低電平,這點好辦。參照上圖中紅色欄配置即可。即令CCXE=CCXNE=0。

2、?暫停PWM輸出后,希望OCX/OCXN端輸出一高一低呢?

如果該互補通道的極性選擇位一樣,參照上面單個非互補通道的作法,修改CCR寄存器的值比ARR大或者等于0,一定可以實現(xiàn)輸出一高一低的電平。

如果如果該互補通道的極性選擇位不一樣,參照上面單個非互補通道的作法,修改CCR寄存器的值比ARR大或者等于0,這時OCX/OCXN端的電平一定一致的,要么同高要么同低。這時可以嘗試回頭重新規(guī)劃下互補通道的輸出與極性選擇,看看能否做調(diào)整而不影響應(yīng)用功能。不行的話,考慮將其中某個通道的PWM輸出復(fù)用功能取消,直接操作GPIO。

3、暫停PWM輸出后,希望OCX/OCXN端輸出同為高呢?這在上面第2點已經(jīng)提到了。如果互補通道的輸出極性選擇位不一樣,通過調(diào)整CCR寄存器的值一定可以實現(xiàn)雙通道同時輸出高電平。如果說互補通道的輸出極性選擇位是一致的,同樣可以嘗試重新規(guī)劃互補通道的輸出與極性選擇位的安排。不行的話,考慮取消其中某個通道的GPIO復(fù)用功能,直接操作寄存器來控制該輸出端的電平。

好,關(guān)于停止STM32定時器PWM輸出后電平的確定話題,就聊這么多。供君參考。最后提醒一點,關(guān)于修改CCR值后的生效時間點跟是否開啟了其預(yù)裝載功能有關(guān)。

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

    關(guān)注

    114

    文章

    5059

    瀏覽量

    212214
  • STM32
    +關(guān)注

    關(guān)注

    2258

    文章

    10828

    瀏覽量

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

    關(guān)注

    23

    文章

    3218

    瀏覽量

    113690

原文標(biāo)題:STM32定時器停止PWM輸出時的電平話題

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

收藏 人收藏

    評論

    相關(guān)推薦

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

    有人使用STM32G4系列芯片內(nèi)部的多個定時器PWM輸出輸出頻率一樣,占空比也一樣,均為50
    的頭像 發(fā)表于 07-01 09:45 ?1026次閱讀
    <b class='flag-5'>STM32</b>G4系列芯片<b class='flag-5'>定時器</b>的延時<b class='flag-5'>輸出</b>問題

    定時器PWM輸出時,定時器回調(diào)函數(shù)只能執(zhí)行一次,是什么原因?

    定時器PWM輸出時,初始化定時器時執(zhí)行HAL_TIM_PWM_Init( TIM1_Handl
    發(fā)表于 05-30 07:15

    如何用STM32定時器實現(xiàn)一個周期輸出PWM2的波形?

    請教各位如何用STM32定時器實現(xiàn)一個周期輸出PWM2的波形呢(低-高-低-高-低)?萬分感謝您的解答!
    發(fā)表于 04-03 06:39

    STM32同一定時器PWM輸出定時,會影響我的PWM輸出嗎?

    求助各位大佬 ,我用定時器2通道1輸出PWM 定時器設(shè)置為TIM2_PERIODE (1000-1) TIM2_PRESCALER 36,現(xiàn)在還想開啟2的中斷用
    發(fā)表于 03-26 07:23

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

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

    STM32G030C8T6要輸出8~12路PWM,每個定時器可以輸出4路,那如何讓兩個定時器輸出PWM同步呢?

    STM32G030C8T6要輸出8~12路PWM,每個定時器可以輸出4路,那如何讓兩個定時器
    發(fā)表于 03-08 08:19

    STM32定時器時間計算方法

    STM32微控制定時器模塊在嵌入式系統(tǒng)中非常常見,它被用于產(chǎn)生精確的時間延遲,或者用于實時時鐘(RTC)等功能。為了充分利用STM32定時器
    的頭像 發(fā)表于 12-19 11:31 ?9480次閱讀

    基于STM32CUBEMX驅(qū)動低壓步進電機驅(qū)動STSPIN220(3)----定時器中斷產(chǎn)生指定數(shù)量脈沖

    在步進電機控制過程中,為了實現(xiàn)精確的位置和速度控制,經(jīng)常需要輸出指定數(shù)量的脈沖。這就需要使用定時器功能來生成PWM脈沖信號。本文將詳細介紹如何利用STM32CUBEMX配置
    的頭像 發(fā)表于 12-01 15:26 ?956次閱讀
    基于<b class='flag-5'>STM32</b>CUBEMX驅(qū)動低壓步進<b class='flag-5'>器</b>電機驅(qū)動<b class='flag-5'>器</b>STSPIN220(3)----<b class='flag-5'>定時器</b>中斷產(chǎn)生指定數(shù)量脈沖

    STM32如何使用定時器實現(xiàn)微秒(us)級延時?

    STM32如何使用定時器實現(xiàn)微秒(us)級延時? 在STM32微控制中,可以使用定時器實現(xiàn)微秒級延時。具體來說,可以使用
    的頭像 發(fā)表于 11-06 11:05 ?5238次閱讀

    STM32CubeIDE下配置STM32F103輸出帶死區(qū)的互補PWM

    STM32F103的TIM1和TIM8是高級定時器,可以產(chǎn)生嵌入死區(qū)時間的互補PWM波,使用STM32CubeIDE完成相關(guān)配置,可以直接生成代碼,
    的頭像 發(fā)表于 11-01 09:41 ?5810次閱讀
    <b class='flag-5'>STM32</b>CubeIDE下配置<b class='flag-5'>STM32</b>F103<b class='flag-5'>輸出</b>帶死區(qū)的互補<b class='flag-5'>PWM</b>波

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

    本文主要研究了STM32H7芯片系列中定時器同步啟動并輸出PWM波形的實現(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'>PWM</b>波形的實現(xiàn)方法

    555定時器的工作模式

    (monostable)和雙穩(wěn)態(tài)(astable)模式。 單穩(wěn)態(tài)模式 單穩(wěn)態(tài)模式也叫單觸發(fā)模式,是555定時器最基本且最常用的工作模式之一。它的原理是:當(dāng)555定時器的TRIG引腳接收到電壓信號時,其內(nèi)部的比較
    的頭像 發(fā)表于 10-24 10:10 ?1232次閱讀

    STM32速成筆記(6)—定時器

    關(guān)于什么是定時器,簡單來講,就是是用來定時的。STM32F103ZET6有兩個基本定時器TIM6和TIM7,四個通用定時器TIM2~TIM5
    的頭像 發(fā)表于 10-24 09:41 ?3762次閱讀
    <b class='flag-5'>STM32</b>速成筆記(6)—<b class='flag-5'>定時器</b>

    高精度定時器與高級控制定時器 PWM 封波后再恢復(fù)的區(qū)別

    高精度定時器與高級控制定時器 PWM 封波后再恢復(fù)的區(qū)別
    的頭像 發(fā)表于 10-17 16:52 ?597次閱讀
    高精度<b class='flag-5'>定時器</b>與高級控制<b class='flag-5'>定時器</b> <b class='flag-5'>PWM</b> 封波后再恢復(fù)的區(qū)別

    使用MM32F0270 定時器DMA方式輸出PWM

    使用MM32F0270 定時器DMA方式輸出PWM
    的頭像 發(fā)表于 10-17 14:47 ?730次閱讀
    使用MM32F0270 <b class='flag-5'>定時器</b>DMA方式<b class='flag-5'>輸出</b><b class='flag-5'>PWM</b>