MM32SPIN2x 電機專用MCU功能特色——自動換相屏蔽功能配置
在現(xiàn)今越來越強調(diào)環(huán)保節(jié)能的法規(guī)要求下,新一代的產(chǎn)品需要具備高效的性能,在永磁無刷電機驅(qū)動上亦是如此,除了高效率的電機外,電子組件及驅(qū)動算法也必須盡可能的高效。為此靈動微電子推出了電機驅(qū)動及控制專用的MM32SPIN2x系列,最高工作頻率96MHz,單指令周期 32 位硬件乘法器,單指令周期 32 位硬件除法器,硬件開方 (32bit),包含 2個 12 位的 ADC、5 個比較器、4個運算放大器,擁有啟動快速、超高轉(zhuǎn)速、內(nèi)建比較器等優(yōu)勢。
為了方便電機控制,MM32SPIN2x新增了PWM脈沖寬度調(diào)制模塊。可以控制高級定時器TIM1輸出的PWM波形,生成六步方波驅(qū)動電機運轉(zhuǎn)。該模塊支持自動換相屏蔽(auto phase mask),電流補償(Current Compensation)和電流保護 (Current Protection)功能。
PWM控制可以實現(xiàn)如下功能:
• 自動換相屏蔽生成六步方波,開關(guān)極性與 TIM1 設(shè)置一致
• 電流補償,換相時可以開啟電流自動補償
• 電流保護,過流立刻切斷輸出
PWM控制模塊框圖
本文將教大家如何使用MM32SPIN2x的PWM控制模塊使用自動換相屏蔽功能。
由PWM控制模塊框圖可以看出,TIM1的ocx_esel輸出信號經(jīng)過PWM控制模塊的MSKDAT極性選擇控制和MSKEN使能控制,從而控制OCx和OCxN輸出PWM波形。在使能PWM的自動換相屏蔽功能后,霍爾換相信號觸發(fā)時,該模塊會根據(jù)事先配置的PWM 輸出屏蔽立即使能MSKEN[5:0] 與 PWM 屏蔽時端口立即輸出MSKDAT[5:0] 控制 TIM1的 6 路 PWM 波形,依據(jù)需求輸出不同的波形驅(qū)動電機轉(zhuǎn)動。
自動換相屏蔽可以根據(jù)三相霍爾輸入信號控制 PWM 是否屏蔽。如果使能了自動換相屏蔽功能,下一步輸入信號的觸發(fā)源可以通過 PWM_ APMSKR 寄存器中的 APM_TRGSEL 選擇,可以在比較器觸發(fā)、GPIO口觸發(fā)和軟件觸發(fā)三個觸發(fā)源中選擇,并且在 APMDLR 中可以設(shè)置24位的延時裝載寄存器,在觸發(fā)輸入延時后切換屏蔽設(shè)置,并觸發(fā)中斷狀態(tài)標志。
六步 PWM 的下一步輸入信號的變化是根據(jù)當(dāng)前輸入信號固定的,當(dāng)前的三相霍爾輸入信號可以在PWM_APMSKR 寄存器的CTRGI 查詢,觸發(fā)信號變化在 APMDLR 設(shè)置的延時后會產(chǎn)生自動換相屏蔽觸發(fā)中斷標志 APMTF 。如果三相輸入信號與 ENTRGI 寄存器設(shè)置不同,還會產(chǎn)生觸發(fā)輸入錯誤標志 TERRF 。
在六步 PWM 驅(qū)動時,可以設(shè)置下一步是否屏蔽 (PWM 輸出屏蔽使能MSKEN 或 PWM 輸出屏蔽立即使能MSKEN_CURR),以及屏蔽后的PWM 極性 (PWM 輸出屏蔽時端口的值MSKDAT 或PWM 屏蔽時端口立即輸出MSKDAT_CURR)。 MSKEN 和 MSKDAT 寫入后不會立刻生效,會在下一次觸發(fā)后才屏蔽 TIM1 的輸出。如果需要立刻生效,在設(shè)置 PWM_CSR 寄存器的 MSKEN_CURR 和 MSKDAT_CURR 的同時也使能當(dāng)前輸入狀態(tài)值CURR_EN ,下一次觸發(fā)后還是通過 MSKEN 和 MSKDAT 控制。
GPIO觸發(fā)自動換相屏蔽具體步驟如下:
• 選擇觸發(fā)輸入信號,設(shè)置PWM_APMSKR寄存器的APM_TRGSEL = 10(GPIO觸發(fā)自動換相屏蔽)。
• 選擇 GPIO 的引腳以及配置濾波器,設(shè)置PWM_CSR寄存器的 HALL_TRGSEL = 00(TIM2復(fù)用功能為2時的三個輸入引腳作為霍爾傳感器輸入)和IOFLT = 001(GPIO輸入濾波為4個時鐘周期)。
• 使能自動換相屏蔽觸發(fā)中斷和觸發(fā)輸入錯誤中斷,設(shè)置PWM_CSR寄存器的APMTIE = 1和TERRIE = 1。
• 設(shè)置下一步的期待觸發(fā)輸入組合,假設(shè)下一步霍爾輸入信號為5,設(shè)置PWM_APMSKR寄存器的ENTRGI= 101。
• 設(shè)置下一步的 PWM 輸出屏蔽使能, 假設(shè)下一步霍爾輸入信號為5, MSKEN = 0x1f以及屏蔽時的端口值 MSKDAT = 0x01。
• 當(dāng)霍爾輸入信號變化時會觸發(fā)中斷,在中斷中,重復(fù)上兩步的設(shè)置。
程序中配置如下:
//使能PWM控制模塊時鐘
RCC_APB2PeriphClockCmd(RCC_APB2Periph_PWM,ENABLE);
// GPIO 輸入4個時鐘周期濾波,自動換相屏蔽觸發(fā)中斷使能,觸發(fā)輸入錯誤中斷使能
PWM ->CSR = PWM_CSR_IOFLT_0 | PWM_CSR_APMTIE |PWM_CSR_TERRIE;
// GPIO觸發(fā)自動換相屏蔽功能,下一次期待觸發(fā)輸入狀態(tài)5
PWM ->APMSKR = PWM_APMSKR_APM_TRGSEL_1 |PWM_APMSKR_ENTRGI_2 | PWM_APMSKR_ENTRGI_0;
//設(shè)置自動換相屏蔽延時裝載寄存器
PWM ->APMDLR = 1;
中斷中根據(jù)當(dāng)前霍爾狀態(tài)配置如下,不同的霍爾狀態(tài)對應(yīng)不同的配置:
其中Hall為霍爾狀態(tài),PWM為PWM輸出狀態(tài),MASK為是否屏蔽,DAT為屏蔽后的輸出極性,ENTRGI為下一步期待的霍爾信號。寄存器詳細定義請參考MM32SPIN2x_p用戶手冊。
void PWM_IRQHandler()
{
uint8_t hall_state;
// if Trigger Error Flag = 1, hall_state =0
if((PWM ->CSR)&PWM_CSR_TERRIF) hall_state = 0;
//clean IT Flag
PWM ->CSR &= ~(PWM_CSR_APMTIF |PWM_CSR_TERRIF);
//get Current Trigger Input
hall_state = (PWM ->APMSKR >>23)&7;
switch(hall_state)
{
case 5:
//hall:101 PWM :100P00 MASK :11 1011 DAT : 10 0000 ENTRGI : 100
PWM->APMSKR=(PWM->APMSKR&(~(PWM_APMSKR_MSKDAT|PWM_APMSKR_MSKEN|PWM_APMSKR_ENTRGI)))|(0x3b<<8)|0x20|(4<<20);
break;
case 4:
//hall:100 PWM :0001P0 MASK :11 1101 DAT : 00 0100 ENTRGI : 110
PWM->APMSKR=(PWM->APMSKR&(~(PWM_APMSKR_MSKDAT|PWM_APMSKR_MSKEN|PWM_APMSKR_ENTRGI)))|(0x3d<<8)|0x04|(6<<20);
break;
case 6:
//hall:110 PWM :0P0010 MASK :10 1111 DAT : 00 0010 ENTRGI : 010
PWM->APMSKR=(PWM->APMSKR&(~(PWM_APMSKR_MSKDAT|PWM_APMSKR_MSKEN|PWM_APMSKR_ENTRGI)))|(0x2f<<8)|0x02|(2<<20);
break;
case 2:
//hall:010 PWM :01P000 MASK :11 0111 DAT : 01 0000 ENTRGI : 011
PWM->APMSKR=(PWM->APMSKR&(~(PWM_APMSKR_MSKDAT|PWM_APMSKR_MSKEN|PWM_APMSKR_ENTRGI)))|(0x37<<8)|0x10|(3<<20);
break;
case 3:
//hall:011 PWM :00100P MASK :11 1110 DAT : 00 1000 ENTRGI : 001
PWM->APMSKR=(PWM->APMSKR&(~(PWM_APMSKR_MSKDAT|PWM_APMSKR_MSKEN|PWM_APMSKR_ENTRGI)))|(0x3e<<8)|0x08|(1<<20);
break;
case 1:
//hall:001 PWM :P00001 MASK :01 1111 DAT : 00 0001 ENTRGI : 101
PWM->APMSKR=(PWM->APMSKR&(~(PWM_APMSKR_MSKDAT|PWM_APMSKR_MSKEN|PWM_APMSKR_ENTRGI)))|(0x1f<<8)|0x01|(5<<20);
break;
default :
PWM->CSR =(PWM->APMSKR&(~(PWM_APMSKR_MSKDAT)))|PWM_CSR_MSKEN_CURR;
break;
}
}
在使用PWM控制模塊時需要先配置TIM1為PWM脈寬調(diào)制模式,配置TIM1_CH1、TIM1_CH1N、TIM1_CH2、TIM1_CH2N、TIM1_CH3、TIM1_CH3N對應(yīng)引腳為復(fù)用推挽輸出模式并配置端口復(fù)用,打開主輸出使能。
使用自動換相屏蔽后TIM1輸出波形與霍爾狀態(tài)對應(yīng)如下:
默認的情況下,PWM模塊處于關(guān)閉狀態(tài),用戶通過設(shè)置TIM1也可以實現(xiàn)上圖PWM波形輸出。與傳統(tǒng)控制TIM1中的寄存器來實現(xiàn)六步方波相比,使用PWM模塊控制自動換相屏蔽,當(dāng)霍爾信號變化時能夠自動控制PWM進行換相屏蔽,并及時進入中斷進行錯誤處理或進行下一步配置。具有操作簡單、實時性高、安全性高等特點。
編輯:admin 最后修改時間:2018-12-27