找回密码
 立即注册

QQ登录

只需一步,快速开始

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

无感FOC代码: 调试简单,起转顺利

  [复制链接]
91#
 楼主| Angus 发表于 2025-5-15 09:59:49 | 只看该作者
本帖最后由 Angus 于 2025-6-13 15:39 编辑

转速的计算和控制二

启动时,至少转过 N 个扇区,转速的计算才正确。在转速正确之前,不能做转速 PI 运算。每计算一次转速,变量 Do_Spd_PI 就加1。启动时赋值 Do_Spd_PI = -N-3;  转过一个扇区边界后 Do_Spd_PI = -N-2 ;  算是起点,再转过一个扇区边界Do_Spd_PI= -N-1; 就有了一个扇区前后两个边界的角度和时间,Do_Spd_PI= -2 时就有了 N 个扇区两边的角度和时间,就可计算出正确的转速了。


启动时不能做转速 PI 控制,也不能让转速设定值一直往上增加,所以代码中让转速设定值变量 RPM_Set_Target 一直等于测量转速。
启动后只有转到 Do_Spd_PI = -2 时,转速才正确,前面虽转速数据不对,让RPM_Set_Target = 测量转速,也无妨,因不做转速 PI 控制。 Do_Spd_PI = -1 以后就可以做转速 PI 控制了。



另一方面,启动阶段未变同步转动时 Motor_Status & 0x10) = 0,也不能做转速 PI 控制,也不能让设定转速一直往上增加。
启动时,是先 Do_Spd_PI 增加到0、还是先变同步转,不一定。

回复 支持 反对

使用道具 举报

92#
 楼主| Angus 发表于 2025-5-15 11:11:23 | 只看该作者
本帖最后由 Angus 于 2025-6-13 15:37 编辑

转速的计算和控制三。

同步转动时,测量转速值未更新也不做转速 PI 。在转一扇区时间、长于转速 PI 计算周期后,多次执行转速 PI 函数做一次 PI 运算,这相当于减小了积分系数,即随着转速降低,转速积分系数跟着降低。


如果不想让积分系数一直降低,就把变量 WaitCount 利用起来,当转速低到一定程度,Do_Spd_PI 一直不更新,而 WaitCount 已加到上限,也做一次转速 PI 运算。就得到了如下转速积分系数曲线:

代码中 WaitCount 计数到 6 做完一次 PI 运算,让 Do_Spd_PI = -1,目的是如果转速又立即更新了,Do_Spd_PI=0而不是=1,  不会很快又做一次转速 PI 运算。




回复 支持 反对

使用道具 举报

93#
匿名  发表于 2025-5-16 08:35:15
Angus 发表于 2025-4-12 14:30
V26版,优化了启动逻辑,提速逻辑和缺相检测,并且把ADC 限流改为周期性检测和阶梯性报警。
如何做到重载启 ...

这里有个疑问,限压后,轻载能满足启动的电压电流要求,重载时,电压会不会不够用?毕竟负载不同,需要的电流不同,电压也相应不一定。
回复 支持 反对

使用道具

94#
 楼主| Angus 发表于 2025-5-16 13:40:03 | 只看该作者
本帖最后由 Angus 于 2025-5-17 10:55 编辑
游客 58.49.24.x 发表于 2025-5-16 08:35
这里有个疑问,限压后,轻载能满足启动的电压电流要求,重载时,电压会不会不够用?毕竟负载不同,需要的 ...

限压多少,应按重载测试的效果确定,轻载启动稍快一点,依然很平稳,转速不会冲到很快。

限压带来的最大好处,是启动代码变得简单了,调整启动特性容易了。
回复 支持 反对

使用道具 举报

95#
 楼主| Angus 发表于 2025-5-17 15:55:24 | 只看该作者
本帖最后由 Angus 于 2025-6-5 17:02 编辑

转速计算和控制四

压缩机在停转时一般不能立即关功率管,立即关功率管机械结构会猛得回弹,时间长了会损伤机械结构,应有个减速的过程。

M451 无感 FOC 代码,有加减速控制。代码中每25ms 电转速增加 100,一个 3000RPM 两对磁极电机,2秒多达到最快转速。 减速时每次减300。
代码中可修改这个加减速度。


全速3000 rpm 的电机,如果转速加到2500 rpm ,功率已到最大,不能再增加转速,代码如何处理呢? 功率 PI 运算采用增量式算法就轻易解决了此问题。

假如转速设定3000 rpm,  转速已到 2500 rpm,  则25ms 后,转速再增加 100。
如果功率 PI 算出增量是 300,只能按转速控制增加100,不然加速度就太快了。如果功率 PI 算出必须减 10,那就减10,不然功率就超了。即,功率 PI 算出的增量,和转速控制的增减量,哪个小,就计入哪个。这样按预定的加速度、或减速度转动,同时功率也不会超限。

回复 支持 反对

使用道具 举报

96#
 楼主| Angus 发表于 2025-6-1 16:19:23 | 只看该作者
启动和停转条件

有很多条件需要让电机停转,比如电源电压低了,功率管过流了或者温度过高了,启动开关未开启。所有的条件都定义成变量 Stop_Runing 的一位,只有此变量全 0 才能启动。




停转方式也有差别,若是过流了或15V 预驱电压过低了,必须立即关功率管,否则功率管可能要爆了,这样的停转条件被定义到 Stop_Runing 的低 0~3bit。
如果是压缩机,在高速转时关功率管,会造成机械结构快速回弹,时间长了对机械有伤害。停转时必须先慢慢减速,再停转。这样的停转条件被定义到Stop_Runing 的 8bit 以上的高位。
如果缺相了,就让电流=0,电机靠惯性自由停转就可以了,可以让电驱动电流=0的停转条件被定义到 4~7bit。

在 main() 的主循环 while(1) 中,按不同 bit 位决定用什么方式停转。





回复 支持 反对

使用道具 举报

97#
 楼主| Angus 发表于 4 天前 | 只看该作者
普通启动过程
第一步先把磁铁吸到0度,或某个角度,这一步代码在状态5


第二步,跳转到状态4,控制电流以方向开始转动,电磁场会吸着永磁体转动,并且转速逐步加快。所以电机启动参数里有“拖动电流和拖动加速度”。


当磁铁到一定转速, 在线圈中产生了反电势,就能估算出磁铁的位置了。

电磁场继续加快转速,当电磁场追上磁铁Q轴方向时(比磁铁超前90度)就让电磁场方向保持与 Q 轴方向一致,即,切换成同步转动。所以叫永磁同步电机 PMSM(Permanent Magnet Synchronous Motor)


回复 支持 反对

使用道具 举报

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

本版积分规则

新唐MCU