STM32應用:利用TIMER的Hall Sensor模式觸發BLDC馬達換相動作

大部分的STM32皆具備有兩個四通道的timer,以往使用者可能會採取利用GPIO收取hall sensor變化的中斷,然後讀取3根hall sensor腳位的狀態後,再根據真值表來設定驅動馬達的timer輸出。
這邊示範如何利用一組四通道timer負責接收hall sensor訊號,並觸發驅動馬達的timer改變輸出來提升換相的效率。

STM32關於馬達驅動部分,有提供一個預寫入設定,等待觸發訊號時再實際寫入register的功能,我們可以利用這一個特性,預先寫入下一個相位的設定,等待hall sensor timer觸發後就立刻換相,除了有助於增加換相的效率外,並且作業時間上也不用太即時,只要到下一次hall sensor觸發前寫入設定即可。

  大大购相关商品     NUCLEO-G031K8  >> 查询存货及售价


使用CubeMX,設置TIM2為Hall Sensor Mode,這可以大幅簡化設定。



因為每次Hall Sensor觸發後,皆會將觸發時的Timer CNT值放入CCR1暫存器,並且重設CNT,這邊可以利用CCR1暫存器的值乘上設定的timer週期來推算馬達轉速。
此外Commutation Delay不可以設置為0,否則不會發出訊號通知。

此外在NVIC設定中,也需要打開TIM2的中斷。


到這邊Hall Sensor用的timer基本上已經設置完成,接下來設置驅動馬達的timer,這邊使用TIM1 Advanced control timer來做為驅動馬達用的timer。

下面是模式設置,使用CH1 / CH2 / CH3的互補輸出,並且設置Slave Mode為Trigger Mode,Trigger來源可以查閱手冊說明,因使用TIM2作為觸發來源,手冊記載TIM2的TRGO-OUT內部連接到TIM1的ITR1,故設置Trigger Source為ITR1。




以下是timer設置,因我們預計輸出到馬達的PWM頻率是20KHz,STM32G031目前主頻定在64MHz,故我們設置Prescaler為3,Period為799,這樣可以得到一個20KHz的頻率。
此外因為使用的mosfet不同,我們希望PWM輸出在active / inactive的狀態也可以由timer的register控制,故我們將Off state的狀態控制(OSSR / OSSI)也一併啟用。



另外NVIC設定中,TIM1用的中斷也一併打開。


到這邊為止,就已經完成了所有的基本設置,產生程式碼後。
只需要在設定完timer後,加入下面的程式碼。

HAL_TIMEx_ConfigCommutEvent(&htim1, TIM_TS_ITR1, TIM_COMMUTATION_TRGI);
這行設定timer的input trigger、打開預載功能,且設定可以由input trigger的訊號來觸發預載設定實際寫入。

HAL_TIMEx_HallSensor_Start_IT(&htim2);
這行啟動hall sensor timer工作。

技術文檔

類型標題檔案
軟件IOC

★博文內容均由個人提供,與平台無關,如有違法或侵權,請與網站管理員聯繫。

★文明上網,請理性發言。內容一周內被舉報5次,發文人進小黑屋喔~

評論