精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

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

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

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

使用STM32定時器PWM功能時的小問題

麥辣雞腿堡 ? 來源:茶話MCU ? 作者:茶話MCU ? 2023-06-21 16:26 ? 次閱讀

有人使用STM32定時器的PWM功能,遇到點小疑問,這里一起看看。

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

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

圖片

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

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

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

第一步:

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

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

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

第二步:

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

2 - 立即清空CNT

3 - 使能預(yù)裝載

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

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

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

我是這樣測試驗證的。

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

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

圖片

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

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

圖片

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

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

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

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

圖片

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

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

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

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

或許眼尖的人看到上面第一種操作輸出的PWM波形里面有個非常細窄的尖脈沖,它是怎么回事呢?示波器問題?非也!【見下圖橢圓形框住的細長線】

圖片

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

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

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

    關(guān)注

    2266

    文章

    10873

    瀏覽量

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

    關(guān)注

    4

    文章

    1010

    瀏覽量

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

    關(guān)注

    23

    文章

    3237

    瀏覽量

    114475
收藏 人收藏

    評論

    相關(guān)推薦

    STM32定時器(一)PWM輸出

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

    STM32有哪幾種定時器 STM32高級定時器有哪些功能

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

    STM32高級定時器-PWM簡單學習案例

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

    stm32定時器中斷程序

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

    stm32定時器輸入捕獲

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

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

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

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

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

    如何通過STM32定時器輸出PWM

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

    [STM32]通用定時器的使用

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

    STM32定時器-基本定時器

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

    STM32-通用定時器-PWM輸出

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

    STM32CubeMX_定時器中斷_PWM

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

    Stm32入門——Systick定時器

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

    STM32定時器功能和用法詳解

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

    STM32定時器的分類及中斷原理

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