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

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

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

使用STM32定時(shí)器PWM功能時(shí)的小問(wèn)題

麥辣雞腿堡 ? 來(lái)源:茶話(huà)MCU ? 作者:茶話(huà)MCU ? 2023-06-21 16:26 ? 次閱讀

有人使用STM32定時(shí)器的PWM功能,遇到點(diǎn)小疑問(wèn),這里一起看看。

他先將STM32某定時(shí)器計(jì)數(shù)周期設(shè)為0xff,單向遞增計(jì)數(shù)模式,OC比較值設(shè)為0x7F。在某時(shí)刻將新的計(jì)數(shù)周期0x7F與比較值0x3F加載到影子寄存器。當(dāng)正在進(jìn)行的一個(gè)周期結(jié)束后,經(jīng)示波器測(cè)量確實(shí)可以看到其下一個(gè)周期發(fā)生變化,但其周期明顯與預(yù)設(shè)值對(duì)應(yīng)不上!再次經(jīng)過(guò)一個(gè)周期,定時(shí)器才會(huì)按照預(yù)設(shè)值穩(wěn)定輸出。

以上是咨詢(xún)者不算很清晰的描述【其實(shí)咨詢(xún)TIMER問(wèn)題最好配上時(shí)序圖】,但可以了解到他要做的事情就是在ARR=0xff,ccr=0x7F的PWM輸出狀態(tài)下,于某時(shí)刻賦予ARR和CCR新值以改變輸出波形。

圖片

事情不算復(fù)雜,疑點(diǎn)就是為什么需要2個(gè)周期延時(shí)后才能有基于新配置的穩(wěn)定輸出。【他這里說(shuō)的2個(gè)周期顯然不清楚到底指的前后哪個(gè)周期值】

這個(gè)問(wèn)題主要涉及到定時(shí)器寄存器的預(yù)裝功能。有些時(shí)候我們需要保證輸出波形完整性、連續(xù)性,開(kāi)啟ARR及CCR的預(yù)裝功能就比較合適,使用CubeMx配置時(shí)做些勾選即可。開(kāi)啟預(yù)裝后,修改ARR及CCR的值,生效時(shí)間點(diǎn)最長(zhǎng)可能延后1個(gè)舊計(jì)數(shù)周期。不過(guò)這里要注意,我們修改ARR及CCR的值若不是特別需求,建議在一個(gè)計(jì)數(shù)周期內(nèi)完成修改,不要一個(gè)值在更新事件之前完成賦值,另一個(gè)則發(fā)生在該更新事件之后。

我也將上面提醒告知咨詢(xún)者,他反饋問(wèn)題依然沒(méi)能解決,準(zhǔn)確說(shuō)是疑惑依然沒(méi)能解除。他這里的確只是提出疑惑,并未提出具體需求。另外,他還將問(wèn)題的復(fù)現(xiàn)過(guò)程做了如下補(bǔ)充:

第一步:

1 - 關(guān)閉預(yù)裝載(ARR/CCR)

2 - 設(shè)定ARR=CCR=0xFF

3 - 開(kāi)啟輸出比較功能(連接到示波器查看波形)

第二步:

1 - 設(shè)置示波器觸發(fā)(延遲一段時(shí)間拉高某個(gè)IO引腳以觸發(fā)示波器采集)

2 - 立即清空CNT

3 - 使能預(yù)裝載

4 - 設(shè)定ARR=0X7F,CCR=0X3F

現(xiàn)象:本周期結(jié)束后其計(jì)數(shù)周期確實(shí)會(huì)相應(yīng)改變,但改變之后的前兩個(gè)周期明顯與設(shè)定值不符,即經(jīng)過(guò)2個(gè)周期后才可穩(wěn)定輸出。

復(fù)現(xiàn)過(guò)程表述得比較清晰了,他也再次明確了疑惑點(diǎn)。同時(shí)還強(qiáng)調(diào)說(shuō)網(wǎng)上很多人碰到類(lèi)似問(wèn)題或疑惑。他在STM32L4系列和STM32H7系列上都遇到了同樣問(wèn)題。既然這樣,現(xiàn)在我們使用STM32L4系列的TIM1來(lái)進(jìn)行驗(yàn)證,參照他的操作步驟來(lái)組織代碼,看看來(lái)龍去脈。

我是這樣測(cè)試驗(yàn)證的。

在關(guān)閉ARR/CCR的預(yù)裝前提下給二者分別賦值0xff和0x7f,啟動(dòng)CH1的PWM輸出并使能該通道的輸出比較中斷。在第一個(gè)脈沖的比較中斷里按照咨詢(xún)者的做法修改ARR/CCR值。為了便于觀察效果,我也開(kāi)啟了更新中斷,通過(guò)更新中斷記錄脈沖個(gè)數(shù),輸出幾個(gè)脈沖后就將定時(shí)器及輸出都關(guān)閉掉。【選擇PWM模式1,極性為高有效】

編寫(xiě)代碼、編譯除錯(cuò)后,運(yùn)行得到如下結(jié)果:【黃色波形結(jié)尾的4個(gè)脈沖是基于新參數(shù)的輸出。綠色波形的上升沿指示修改數(shù)據(jù)的時(shí)間點(diǎn),這里輔助顯示下,重點(diǎn)在黃色波形?!?/p>

圖片

上面輸出波形應(yīng)該說(shuō)跟客戶(hù)反饋的是一致的。我們來(lái)一起看看。

在第一個(gè)脈沖的比較中斷處,也是第一個(gè)脈沖的正中央【紅色箭頭所指位置】處做參數(shù)修改。修改步驟按照咨詢(xún)者提供的來(lái)實(shí)現(xiàn)。

圖片

即按照上面的3小步操作【第1小步是咨詢(xún)者設(shè)置示波器的動(dòng)作,不用理它】。

這里是開(kāi)啟預(yù)裝功能后才修改ARR/CCR值,這兩個(gè)新值目前只能暫居預(yù)裝寄存器,實(shí)際起作用的ARR/CCR值仍是之前的0xff和0x7f。而且,還在此處對(duì)計(jì)數(shù)器做了清零,即從此刻起PWM輸出脈沖重頭來(lái)。這樣從上圖紅色箭頭到藍(lán)色箭頭之間的波形依然是基于ARR=0xff,CCR=0x7f參數(shù)運(yùn)行的。定時(shí)器于藍(lán)色箭頭所指位置處發(fā)生更新事件,新數(shù)據(jù)【0x7f,0x3f】生效起作用。

顯然從修改時(shí)刻算起到數(shù)據(jù)生效 剛好延時(shí)1個(gè)舊周期,結(jié)合到這里,恰好是新周期的2倍。修改數(shù)據(jù)后整整花了2個(gè)周期的時(shí)間才生效就是這么來(lái)的。

如果在上面操作步驟的基礎(chǔ)上拿掉對(duì)計(jì)數(shù)器清零操作,其它不變,輸出結(jié)果又不一樣了。見(jiàn)下面截圖:

圖片

同樣,紅色箭頭所指位置為修改數(shù)據(jù)的時(shí)刻。由于此時(shí)沒(méi)有對(duì)計(jì)數(shù)器清零,計(jì)數(shù)器按部就班計(jì)數(shù),PWM輸出按預(yù)定配置輸出,繼續(xù)運(yùn)行半個(gè)舊周期后計(jì)數(shù)器溢出產(chǎn)生更新事件于藍(lán)色箭頭所指位置。藍(lán)色箭頭所指位置以后PWM輸出按新參數(shù)運(yùn)行。不難看出,這次新數(shù)據(jù)的生效從修改時(shí)刻算起僅延時(shí)半個(gè)舊周期,相當(dāng)于后續(xù)的1個(gè)新周期。

這里強(qiáng)調(diào)下,我這里測(cè)試時(shí)選擇的剛好是舊周期的中間點(diǎn),所以延時(shí)生效為半個(gè)舊周期。具體應(yīng)用時(shí)的延時(shí)跟我們修改參數(shù)所選的時(shí)間點(diǎn)有關(guān),一般來(lái)講,它最長(zhǎng)不會(huì)超過(guò)1個(gè)舊周期,最短極限為0。

當(dāng)然,如果說(shuō)我們不關(guān)心修改數(shù)據(jù)前后波形的完整性,直接關(guān)閉預(yù)裝功能也行,或者手動(dòng)產(chǎn)生更新事件也可以??傊?,我們根據(jù)實(shí)際應(yīng)用需求來(lái)定。

聊到這里,關(guān)于咨詢(xún)者的疑惑基本解釋得差不多了。

或許眼尖的人看到上面第一種操作輸出的PWM波形里面有個(gè)非常細(xì)窄的尖脈沖,它是怎么回事呢?示波器問(wèn)題?非也!【見(jiàn)下圖橢圓形框住的細(xì)長(zhǎng)線(xiàn)】

圖片

此處尖脈沖產(chǎn)生的原因是------

當(dāng)發(fā)生比較中斷時(shí)我們才去做修改參數(shù)動(dòng)作,在做計(jì)數(shù)器清零操作前,計(jì)數(shù)器的值已經(jīng)大于設(shè)置的CCR值【0x7f】,按照當(dāng)前PWM輸出模式及極性選擇,輸出則變?yōu)榈碗娖搅?。但是,在中斷里我們很快又將?jì)數(shù)器值做了個(gè)清零,此時(shí)計(jì)數(shù)器值又小于CCR值【0x7f】了。同樣,按照當(dāng)前PWM配置,輸出又變回高電平,最終就產(chǎn)生了這么個(gè)一下一上的尖脈沖?!咀ⅲ哼@里涉及PWM輸出原理,需要的自行補(bǔ)課。】

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

    關(guān)注

    2270

    文章

    10918

    瀏覽量

    356821
  • 控制
    +關(guān)注

    關(guān)注

    4

    文章

    1013

    瀏覽量

    122711
  • 定時(shí)器
    +關(guān)注

    關(guān)注

    23

    文章

    3254

    瀏覽量

    115104
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    STM32定時(shí)器(一)PWM輸出

    STM32定時(shí)器分類(lèi)眾多,按照內(nèi)核、外核標(biāo)準(zhǔn)分為兩部分:核內(nèi)定時(shí)器+核外定時(shí)器
    的頭像 發(fā)表于 07-21 14:51 ?4984次閱讀
    <b class='flag-5'>STM32</b><b class='flag-5'>定時(shí)器</b>(一)<b class='flag-5'>PWM</b>輸出

    STM32有哪幾種定時(shí)器 STM32高級(jí)定時(shí)器有哪些功能

    SysTick定時(shí)器功能比較單一,主要是供給系統(tǒng)使用的,系統(tǒng)默認(rèn)設(shè)置為1ms觸發(fā)一次中斷。而用戶(hù)想要使用自己的定時(shí)器,STM32提供的用戶(hù)定時(shí)器
    的頭像 發(fā)表于 07-27 16:25 ?5152次閱讀
    <b class='flag-5'>STM32</b>有哪幾種<b class='flag-5'>定時(shí)器</b> <b class='flag-5'>STM32</b>高級(jí)<b class='flag-5'>定時(shí)器</b>有哪些<b class='flag-5'>功能</b>

    STM32高級(jí)定時(shí)器-PWM簡(jiǎn)單學(xué)習(xí)案例

    高級(jí)定時(shí)器與通用定時(shí)器比較類(lèi)似,下面是一個(gè)TIM1 的PWM 程序,TIM1是STM32唯一的高級(jí)定時(shí)器。共有4個(gè)通道有死區(qū)有互補(bǔ)。
    發(fā)表于 04-21 14:47 ?4789次閱讀
    <b class='flag-5'>STM32</b>高級(jí)<b class='flag-5'>定時(shí)器</b>-<b class='flag-5'>PWM</b>簡(jiǎn)單學(xué)習(xí)案例

    stm32定時(shí)器中斷程序

    STM32定時(shí)器是個(gè)強(qiáng)大的模塊,定時(shí)器使用的頻率也是很高的,定時(shí)器可以做一些基本的定時(shí),還可以做PWM
    發(fā)表于 10-12 16:59 ?1.3w次閱讀

    stm32定時(shí)器輸入捕獲

    不同頻率、不同占空比的方波信號(hào)、PWM信號(hào),同時(shí)做為輸入捕獲功能時(shí),可以測(cè)量脈沖寬度、實(shí)現(xiàn)電容按鍵檢測(cè)等等。 一、輸入捕獲概念 輸入捕獲模式可以用來(lái)測(cè)量脈沖寬度或者測(cè)量頻率。STM32定時(shí)
    發(fā)表于 10-13 09:13 ?2.4w次閱讀
    <b class='flag-5'>stm32</b><b class='flag-5'>定時(shí)器</b>輸入捕獲

    STM32定時(shí)器基本計(jì)數(shù)原理解析

    STM32的TIM定時(shí)器分為三類(lèi):基本定時(shí)器、通用定時(shí)器和高級(jí)定時(shí)器。從分類(lèi)來(lái)看就知道STM32
    發(fā)表于 12-27 16:20 ?1.8w次閱讀
    <b class='flag-5'>STM32</b><b class='flag-5'>定時(shí)器</b>基本計(jì)數(shù)原理解析

    如何利用stm32的高級(jí)定時(shí)器產(chǎn)生PWM

    stm32的高級(jí)定時(shí)器TIM1和TIM8產(chǎn)生PWM,需要注意: 1.都有TIM1,但只有flash容量大于256K的大容量單片機(jī)才有TIM8 2.高級(jí)定時(shí)器相對(duì)于通用
    發(fā)表于 10-24 15:48 ?6685次閱讀
    如何利用<b class='flag-5'>stm32</b>的高級(jí)<b class='flag-5'>定時(shí)器</b>產(chǎn)生<b class='flag-5'>PWM</b>

    如何通過(guò)STM32定時(shí)器輸出PWM

    ? 本文將介紹通過(guò)STM32定時(shí)器輸出PWM,如果對(duì)定時(shí)器不太熟悉的同學(xué)可以看下之前的文章《STM32基礎(chǔ)
    的頭像 發(fā)表于 02-20 15:08 ?2.2w次閱讀
    如何通過(guò)<b class='flag-5'>STM32</b>的<b class='flag-5'>定時(shí)器</b>輸出<b class='flag-5'>PWM</b>?

    [STM32]通用定時(shí)器的使用

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

    STM32定時(shí)器-基本定時(shí)器

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

    STM32-通用定時(shí)器-PWM輸出

    1 通用定時(shí)器PWM概述1.1STM32定時(shí)器輸出通道引腳這里以TIM3為例來(lái)講解。STM32的通用定時(shí)
    發(fā)表于 11-26 15:36 ?23次下載
    <b class='flag-5'>STM32</b>-通用<b class='flag-5'>定時(shí)器</b>-<b class='flag-5'>PWM</b>輸出

    STM32CubeMX_定時(shí)器中斷_PWM

    文章目錄前言STM32CubeMX新建工程基本定時(shí)器配置生成代碼定時(shí)器中斷PWM配置工程代碼前言STM32CubeMX_環(huán)境搭建_GPIO_
    發(fā)表于 12-05 13:51 ?13次下載
    <b class='flag-5'>STM32</b>CubeMX_<b class='flag-5'>定時(shí)器</b>中斷_<b class='flag-5'>PWM</b>

    Stm32入門(mén)——Systick定時(shí)器

    Stm32入門(mén)——Systick定時(shí)器Systick定時(shí)器是什么?從原理上來(lái)說(shuō),Systick定時(shí)器和開(kāi)發(fā)板上的通用定時(shí)器沒(méi)有區(qū)別。從
    發(fā)表于 12-07 17:51 ?12次下載
    <b class='flag-5'>Stm32</b>入門(mén)——Systick<b class='flag-5'>定時(shí)器</b>

    STM32定時(shí)器功能和用法詳解

    1. STM32的Timer簡(jiǎn)介 STM32中一共有11個(gè)定時(shí)器,其中2個(gè)高級(jí)控制定時(shí)器,4個(gè)普通定時(shí)器和2個(gè)基本
    發(fā)表于 02-11 15:04 ?29次下載
    <b class='flag-5'>STM32</b><b class='flag-5'>定時(shí)器</b><b class='flag-5'>功能</b>和用法詳解

    STM32定時(shí)器的分類(lèi)及中斷原理

    本文主要介紹常規(guī)定時(shí)器中的TIM3,實(shí)現(xiàn)定時(shí)器中斷的功能。STM32定時(shí)器的分類(lèi)在其中一篇文章中已經(jīng)介紹過(guò),本文主要內(nèi)容主要介紹
    的頭像 發(fā)表于 01-12 17:29 ?7430次閱讀
    <b class='flag-5'>STM32</b><b class='flag-5'>定時(shí)器</b>的分類(lèi)及中斷原理