找回密码
 立即注册

QQ登录

只需一步,快速开始

打印 上一主题 下一主题
开启左侧

M451无感FOC 起转代码解析

[复制链接]
跳转到指定楼层
楼主
Angus 发表于 2022-10-9 16:48:19 | 只看该作者 |只看大图 回帖奖励 |正序浏览 |阅读模式
本帖最后由 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



分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 顶 踩
回复

使用道具 举报

沙发
 楼主| Angus 发表于 2023-5-29 20:56:13 | 只看该作者
本帖最后由 Angus 于 2023-6-1 10:43 编辑

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



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



回复 支持 反对

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies |上传

本版积分规则

新唐MCU