本帖最后由 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
|