靈動微-電動馬達方案中需要使用到六步PWM輸出功能
針對電動馬達方案中需要使用到六步PWM輸出功能,本篇文章將向大家介紹如何使用MM32L0系列MCU實現(xiàn)六步PWM輸出功能。MM32高級控制定時器TIM1有互補輸出的功能,我們便可以利用定時器 TIM1 來產(chǎn)生 3 對 6 路的互補 PWM 輸出。MM32高級控制定時器TIM1產(chǎn)生六步PWM輸出,用于驅(qū)動三相電機,對應(yīng)著直流無刷電機的六步換相。
六步 PWM 產(chǎn)生:當(dāng)在一個通道上應(yīng)用了互補輸出時, OCxM、CCxE 和 CCxNE位的預(yù)載位有效,這些預(yù)裝載位被傳送到影子寄存器,因此可以預(yù)先設(shè)置好下一步的配置,并在同一時間更改所有通道的配置。COM 事件可以通過硬件(在 TRGI的上升沿) 設(shè)置或者軟件修改TIM1_EGR 寄存器的 COM 位來產(chǎn)生。
當(dāng) COM 事件發(fā)生時會設(shè)置一個標(biāo)志位(TIM1_SR 寄存器中的 COMIF 位),這時如果已設(shè)置了TIM1_DIER 寄存器的 COMIE 位,則產(chǎn)生一個中斷;如果已設(shè)置了 TIMx_DIER寄存器的COMDE位,則產(chǎn)生一個DMA請求。
下圖顯示當(dāng)發(fā)生 COM 事件時,三種不同配置下OCx和OCxN 輸出。
在本次實驗中主要教大家如何配置PWM的輸出狀態(tài)以及輸出有效電平設(shè)置,在主函數(shù)的循環(huán)中更新PWM狀態(tài)輸出,將不使用中斷方式,用戶在實際電機配置程序中可以直接采用該配置方式移植到TIM1_BRK_UP_TRG_COM_IRQHandler函數(shù)中。
程序配置:
1> 開啟定時器TIM1的時鐘
2> 初始化 TIM1,設(shè)置 TIM1 的 ARR 和 PSC,向上計數(shù)模式
3> 設(shè)置BDTR,使能剎車輸入信號,高電平有效
4> 設(shè)置 TIM1_CH1/CH1N,TIM1_CH2/CH2N,TIM1_CH3/CH3N的 PWM 模式,PWM 模式2,使能 TIM1 的 CHx 輸出
5> 使能TIM1_CR1的自動重裝載預(yù)裝載允許位
6> 使能定時器TIM1
main函數(shù)配置流程:
1> systick延時函數(shù)初始化
2> GPIO口配置,PA8/PB13,PA9/PB14,PA10/PB15,分別為TIM1的三組互補通道輸出:CH1/CH1N,CH2/CH2N,CH3/CH3N,復(fù)用推挽輸出,最大輸出速度50MHz, 除此之外,還有一個引腳可以配置也可以不配置,那就是TIM1_BKIN對應(yīng)的引腳PB12,TIM1_BKIN的功能是檢測故障,如果當(dāng)PB12檢測到高電平(取決于剎車有效電平的設(shè)置)時,就表示檢測到故障,然后它會自動關(guān)閉定時器。
3> 定時器TIM1初始化及輸出配置
4> PWM輸出模式配置,在我配置的程序中大家可以看到對TIM1_CCMR1\TIM1_CCMR2\TIM1_CCER三個寄存器進行操作即可實現(xiàn)需要的功能
實驗結(jié)果:
從邏輯分析儀抓的波形可以看到在6個通道中,如果一個通道處在PWM輸出模式,另外的5個通道處在關(guān)閉狀態(tài),依次輪詢該過程。
需要弄清楚我對上述三個寄存器做了什么操作需要參考UM_MM32L0xx文檔的第13.4.7章節(jié)、13.4.8章節(jié)、13.4.9章節(jié)三個章節(jié)寄存器
如上圖所示:位3是輸出比較1預(yù)裝載使能位,TIMx_CCR1的預(yù)裝載值在更新事件到來時加載到當(dāng)前寄存器,該位需要置1,位6:4是PWM輸出比較模式配置,如果CCMR1的輸出比較1配置0x48表示強制為無效電平,0x58表示強制為有效電平,0x68表示PWM模式1。
定時器的配置模式如上所示,但是輸出到GPIO口的電平狀態(tài)還需要查表34,根據(jù)表中的定義配置所需要的電平狀態(tài)。
用戶在配置電機所需要的PWM功能時,只需要根據(jù)對TIM1_CCMR1 \ TIM1_CCMR2 \ TIM1_CCER 三個寄存器進行操作,如果對寄存器的操作值不是很清楚,建議大家在調(diào)試模式下,直接通過修改該三個寄存器的值,然后查看對應(yīng)的GPIO得狀態(tài)變化,然后記錄下來,在程序中將測試值寫入到相對應(yīng)的寄存器中,重新下載程序到MM32L0系列 MCU中觀察對應(yīng)的GPIO的電平狀態(tài)。
編輯:ls 最后修改時間:2022-06-08