1. 矢量控制常用的位置传感器
在电机磁场定向控制算法中,电机转子位置的获取是必要的,在高精度应用场合,通常使用编码器、旋转变压器进行位置反馈,这种方式需要较高的成本。对于一般的应用场合,如电动自行车等,通常可以使用低分辨率的Hall位置传感器,如果是使用于家用电器这种对成本十分敏感的场合,甚至可以使用无位置传感器算法(状态观测器)对位置信号进行提取。这里着重讨论通过Hall传感器的方式提取电机转子电角度。
2.Hall传感器的原理
通常,霍尔位置传感器在电机中按120度电角度位置放置,在这种放置下,电机旋转一个电周期会出现6种不同的状态,每种状态维持60度电角度。下图显示了霍尔信号与三相反电动势的关系,也是测试电角度补偿角的依据,图中所示的电角度偏移量为-90度电角度,电机角度增加的方向定义为电机旋转时反电势A相超前B相,B相超前C相的方向(注意:后面程序都是q轴与alpha轴夹角)。
3.STM32的Hall接口
STM32内部的定时器外设自带Hall传感器接口,可对三路Hall信号进行异或运算,只要有一路Hall信号产生变化,定时器可以及时捕获,通过软件更新电角度并计算当前电机的速度,具体的程序实现请看下节。
4.程序实现
(1)该程序的计数周期为10us,重载寄存器设定为0xFFFF,若产生更新中断(655ms),则认为电机的速度为零;
(2)实际应用中应该对速度进行滤波,本程序未对速度进行滤波,如果需要滤波,您可以自行实现。
(3)本程序和STM32电机库使用的电角度一致,即认为A相反电势最高点为电角度零点(q轴与alpha轴的夹角为零),您可以参阅STM32的UM0492用户手册中文版进行理解。
(4)有关Hall电角度的偏移量的测量请参考Hall同步电角度测量,请注意正方向为反电势A相超前B相,B相超前C相的方向,如果有不理解,可以留言。
(5)其中也有不少参考了STM32的电机库,如有不明白的地方,可以看UM0492用户手册,里面讲解比较详细。
以下是STM32定时器3的配置:
void TIM3_Init(void)
{
RCC->APB1ENR |= 1<<1;
RCC->APB2ENR |= 1<<0;
RCC->APB2ENR |= 1<<4;
AFIO->MAPR |= 3<<10;
GPIOC->CRL &= 0x00FFFFFF;
GPIOC->CRL |= 0x44000000;
GPIOC->CRH &= 0xFFFFFFF0;
GPIOC->CRH |= 0x00000004;
TIM3->PSC = 719;
TIM3->ARR = 0xFFFF;
TIM3->CNT = 0;
TIM3->CR1 = (0<<8)|(0<<7)|(0<<5)|(0<<4)|(0<<3)|(1<<2)|(0<<1)|(0<<0);
TIM3->CR2 = (1<<7);
TIM3->SMCR = (4<<0)|(4<<4)