MM32SPIN2x 电机专用MCU功能特色——自动换相屏蔽功能配置
在现今越来越强调环保节能的法规要求下,新一代的产品需要具备高效的性能,在永磁无刷电机驱动上亦是如此,除了高效率的电机外,电子组件及驱动算法也必须尽可能的高效。为此灵动微电子推出了电机驱动及控制专用的MM32SPIN2x系列,最高工作频率96MHz,单指令周期 32 位硬件乘法器,单指令周期 32 位硬件除法器,硬件开方 (32bit),包含 2个 12 位的 ADC、5 个比较器、4个运算放大器,拥有启动快速、超高转速、内建比较器等优势。
为了方便电机控制,MM32SPIN2x新增了PWM脉冲宽度调制模块。可以控制高级定时器TIM1输出的PWM波形,生成六步方波驱动电机运转。该模块支持自动换相屏蔽(auto phase mask),电流补偿(Current Compensation)和电流保护 (Current Protection)功能。
PWM控制可以实现如下功能:
? 自动换相屏蔽生成六步方波,开关极性与 TIM1 设置一致
? 电流补偿,换相时可以开启电流自动补偿
? 电流保护,过流立刻切断输出
PWM控制模块框图
本文将教大家如何使用MM32SPIN2x的PWM控制模块使用自动换相屏蔽功能。
由PWM控制模块框图可以看出,TIM1的ocx_esel输出信号经过PWM控制模块的MSKDAT极性选择控制和MSKEN使能控制,从而控制OCx和OCxN输出PWM波形。在使能PWM的自动换相屏蔽功能后,霍尔换相信号触发时,该模块会根据事先配置的PWM 输出屏蔽立即使能MSKEN[5:0] 与 PWM 屏蔽时端口立即输出MSKDAT[5:0] 控制 TIM1的 6 路 PWM 波形,依据需求输出不同的波形驱动电机转动。
自动换相屏蔽可以根据三相霍尔输入信号控制 PWM 是否屏蔽。如果使能了自动换相屏蔽功能,下一步输入信号的触发源可以通过 PWM_ APMSKR 寄存器中的 APM_TRGSEL 选择,可以在比较器触发、GPIO口触发和软件触发三个触发源中选择,并且在 APMDLR 中可以设置24位的延时装载寄存器,在触发输入延时后切换屏蔽设置,并触发中断状态标志。
六步 PWM 的下一步输入信号的变化是根据当前输入信号固定的,当前的三相霍尔输入信号可以在PWM_APMSKR 寄存器的CTRGI 查询,触发信号变化在 APMDLR 设置的延时后会产生自动换相屏蔽触发中断标志 APMTF 。如果三相输入信号与 ENTRGI 寄存器设置不同,还会产生触发输入错误标志 TERRF 。
在六步 PWM 驱动时,可以设置下一步是否屏蔽 (PWM 输出屏蔽使能MSKEN 或 PWM 输出屏蔽立即使能MSKEN_CURR),以及屏蔽后的PWM 极性 (PWM 输出屏蔽时端口的值MSKDAT 或PWM 屏蔽时端口立即输出MSKDAT_CURR)。 MSKEN 和 MSKDAT 写入后不会立刻生效,会在下一次触发后才屏蔽 TIM1 的输出。如果需要立刻生效,在设置 PWM_CSR 寄存器的 MSKEN_CURR 和 MSKDAT_CURR 的同时也使能当前输入状态值CURR_EN ,下一次触发后还是通过 MSKEN 和 MSKDAT 控制。
GPIO触发自动换相屏蔽具体步骤如下:
? 选择触发输入信号,设置PWM_APMSKR寄存器的APM_TRGSEL = 10(GPIO触发自动换相屏蔽)。
? 选择 GPIO 的引脚以及配置滤波器,设置PWM_CSR寄存器的 HALL_TRGSEL = 00(TIM2复用功能为2时的三个输入引脚作为霍尔传感器输入)和IOFLT = 001(GPIO输入滤波为4个时钟周期)。
? 使能自动换相屏蔽触发中断和触发输入错误中断,设置PWM_CSR寄存器的APMTIE = 1和TERRIE = 1。
? 设置下一步的期待触发输入组合,假设下一步霍尔输入信号为5,设置PWM_APMSKR寄存器的ENTRGI= 101。
? 设置下一步的 PWM 输出屏蔽使能, 假设下一步霍尔输入信号为5, MSKEN = 0x1f以及屏蔽时的端口值 MSKDAT = 0x01。
? 当霍尔输入信号变化时会触发中断,在中断中,重复上两步的设置。
程序中配置如下:
//使能PWM控制模块时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_PWM,ENABLE);
// GPIO 输入4个时钟周期滤波,自动换相屏蔽触发中断使能,触发输入错误中断使能
PWM ->CSR = PWM_CSR_IOFLT_0 | PWM_CSR_APMTIE |PWM_CSR_TERRIE;
// GPIO触发自动换相屏蔽功能,下一次期待触发输入状态5
PWM ->APMSKR = PWM_APMSKR_APM_TRGSEL_1 |PWM_APMSKR_ENTRGI_2 | PWM_APMSKR_ENTRGI_0;
//设置自动换相屏蔽延时装载寄存器
PWM ->APMDLR = 1;
中断中根据当前霍尔状态配置如下,不同的霍尔状态对应不同的配置:
其中Hall为霍尔状态,PWM为PWM输出状态,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脉宽调制模式,配置TIM1_CH1、TIM1_CH1N、TIM1_CH2、TIM1_CH2N、TIM1_CH3、TIM1_CH3N对应引脚为复用推挽输出模式并配置端口复用,打开主输出使能。
使用自动换相屏蔽后TIM1输出波形与霍尔状态对应如下:
默认的情况下,PWM模块处于关闭状态,用户通过设置TIM1也可以实现上图PWM波形输出。与传统控制TIM1中的寄存器来实现六步方波相比,使用PWM模块控制自动换相屏蔽,当霍尔信号变化时能够自动控制PWM进行换相屏蔽,并及时进入中断进行错误处理或进行下一步配置。具有操作简单、实时性高、安全性高等特点。
编辑:admin 最后修改时间:2018-12-27