牛卧堂MCU技术交流

标题: M451无感FOC 起转代码解析 [打印本页]

作者: Angus    时间: 2022-10-9 16:48
标题: M451无感FOC 起转代码解析
本帖最后由 Angus 于 2023-5-29 21:00 编辑

看起转函数Adjust_Pull_Ommega()头文件说明.转速Pull_Ommega 每次(PWM中断)加增量(转速逐步加快),然后加到角度Angle_q 上:  Angle_q += Pull_Ommega >>16(去掉16位小数)。

即,拖动转速越来越快,直到位置收敛、或转速已到最大。



第一阶段的电流控制是 271~272行,电流也是一直增加,直到达到最大值。


第一阶段:就是均加速拖动,  加速度就是函数参数一。转速一直加到上限,电流也一直加到上限。若由静止起转, 由于电流较大、电磁吸力较大,转速又不快,磁铁 d 轴会紧跟电流方向
在此过程中,若位置收敛了(函数Adjust_Pull_Ommega() 返回值 temp16 != 0),就变第二阶段(260行),若拖动转速到最快了还不收敛,263行,拖动转速降到1/4,变第二阶段。

Exec_Counter 大于 TIME_Active_Wait  时是第一阶段,小于时是第二阶段。
在第一阶段执行 Exec_Counter = TIME_Active_Wait ,下次执行时先减1(255行),就会变第二阶段。

第二阶段:  temp16 = 角度差( q 轴 - 电流方向),即下图中的 theta。若想电流方向靠近 q 轴,就要电流加快转动,同时降低电流、减小电磁场对磁铁的吸引力。

在第二阶段,转速Pull_Ommega 按参数二增减调整,  让电流方向Angle_q 加快靠近 q 轴。
下图是ADC 中断里,阶段二的代码,temp16 就是上图中的 theta 角
若temp16 <0, 看283行,就是电流方向超前 q 轴了,就要 Angle_q 降速,并加大电流。
若temp16 >0, 就是电流方向中比q 轴滞后, 执行287~290行,降电流、降转矩,转速加快。
一旦( q 轴 - 电流方向Angle_q)的角度差在Angle_Jump_Sync(缺省3072=16.8度) 之内就变同步转动。



在函数Adjust_Pull_Ommega()里,执行了Angle_q += Pull_Ommega >>16;(去掉16位小数),

      
函数Adjust_Pull_Ommega() 只控制转速 Pull_Ommega ,电流控制代码在ADC 中断里(软件人员可改为不做电流控制)。

M451 无感 FOC 控制代码下载:http://nuvoton-mcu.com/forum.php ... 1767&extra=page%3D1




作者: Angus    时间: 2023-5-29 20:56
本帖最后由 Angus 于 2023-6-1 10:43 编辑

按这个思路,可把启动函数重新写成如下,直接加到文件中即可:



拖动转速的上限可取最快转速的25%左右。拖动电流可取最大值的一半左右。
如有兴趣,可对此函数优化,起转有很多种方法。








欢迎光临 牛卧堂MCU技术交流 (http://nuvoton-mcu.com/) Powered by Discuz! X3.2