永磁同步电机FOC控制----STM32 定时器关于编码器模式的应用
唔,最近开始研究和学习关于永磁同步电机和BLDC电机的FOC控制,但是目前在应用圈子上看来,大多的都是使用的ST的电机库,这就让我很不爽,我觉得如此基础以及重要的算法不应该拿来就用,因此下定决心自己撸一版。涉及到电流采样(ADC)、电角度计算(编码器)、转速(编码器)。
1.关于编码器的硬件 (1)我这里使用的是正交编码器,接线原理图如下:
网络号对应单片机的IO口为:EA-----PA0;EB-----PA1;EZ-----PA2。 (2)关于正交编码器 一共五根线,分别为A\B\Z以及VCC和GND,A和B为脉冲信号的输出,Z为零点信号,当编码器旋转到零点时,Z会发出一个脉表示现在是零点位置(厂商指定的零点位置)。在硬件电路的设计中每一条信号与GND之间最好有通过电容到地(尤其Z信号)。
2.关于定时器的编码器模式
使用定时器配置编码器模式的优势是很大的,可以归纳总结如下: 正转向上计数,反转向下计数,方向在CR1的DIR位里 (1)每个定时器的输入脚可以通过软件设定滤波 ;
(2)应用中如果没有绝对位置信号或者初始化完成后还没有收到绝对位置信号前的计数只能是相对计数.收到绝对位置信号后重新修改一次CNT的值就行了.码盘一般都有零位置信号,结合到定时器捕获输入就行.上电以后要往返运动一下找到这个位置.;
(3)即便有滤波计数值偶尔也会有出错误的情况,一圈多计一个或少计一个数都是很正常的特别是转速比较高的时候尤其明显,有个绝对位置信号做修正是很有必要的.绝对位置信号不需要一定在零位置点,收到这个信号就将CNT修正为一个固定的数值即可。
同时我们在手册上都会看到下面这张图,但是很多时候我们都是一知半解的:
这个表大概解析一下: 仅在TI1计数时 相对信号的电平其实就是TI2的电平(不考虑反向的情况),便可有: (1)在TI2为高电平的时候TI1为上升沿时脉冲计数减1,TI1为下降沿时脉冲计数加1 (2)在TI2为低电平的时候TI1为上升沿时脉冲计数加1,TI1为下降沿时脉冲计数减1 仅在TI2计数时 相对信号的电平其实就是TI1的电平(不考虑反向的情况),便可有: (1)在TI1为高电平的时候TI2为上升沿时脉冲计数加1,TI2为下降沿时脉冲计数减1 (2)在TI1为低电平的时候TI2为上升沿时脉冲计数减1,TI2为下降沿时脉冲计数加1 以此类推。
同时,我们可能还会有一个疑惑: 在设置为双边沿计数,即在A上升下降 B的上身下降都计数的时候,计数为什么乘以4 ,下图简单解释一下:
还有Z信号归零,在遇到Z信号的时候,将定时器的CNT=0,这样就能保证位置与CNT实际对应上了。
3.由电信号计算转过的机械角度
通过使用外部中断,当检测到Z信号的时候,将定时器CNT清零,然后根据自己谁定的时间t去中断着读取定时器CNT的值,然后实际转过的栅格数N=CNT/4;然后当前的机械角度θ = (360/光编栅格数)*N。
|