找回密码
 立即注册

QQ登录

只需一步,快速开始

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

15万转无感FOC: 高压风机水泵吸尘器,冰箱空调压缩机

  [复制链接]
41#
匿名  发表于 2023-6-25 16:59:33
我用的M453板子,220V交流供电,采样电阻0.1欧姆,放大倍数5倍,由于驱动电路原因,PWM频率只能用7K左右,家用油烟机变频风机,电机相电阻20欧姆,Ld=50mH,Lq=50mH,电机是4对极,请教一下我怎么设置参数才可以初步转起来?
回复 支持 反对

使用道具

42#
 楼主| Angus 发表于 2023-6-25 18:05:32 | 只看该作者
本帖最后由 Angus 于 2023-7-1 22:03 编辑
游客 116.30.102.x 发表于 2023-6-25 16:59
我用的M453板子,220V交流供电,采样电阻0.1欧姆,放大倍数5倍,由于驱动电路原因,PWM频率只能用7K左右, ...

这个贴子里有个 “M451无感FOC_V23.03代码说明” 文件。你先根据这个文件,把PWM 输出极性,电感参数,电流ADC常数,最大工作电流,等等参数配置正确。

转速PI 参数可以先小一点(加速度会小一点,容易起转),电流PI 参数按注释方法计算出具体值。

起转电流可取最大值的1/3~1/2,起转加速度设置可以小一点。就可以试着起转了。

你还可以电话或邮件向新唐技术人员咨寻细节,或带着实物到新唐办公室调试起转。
回复 支持 反对

使用道具 举报

43#
 楼主| Angus 发表于 2023-7-2 23:11:50 | 只看该作者
本帖最后由 Angus 于 2024-9-15 16:46 编辑

为简化代码逻辑,无论电机是转是停,都会估算角度并做SVPWM 计算,只是停转时关了功率管,起转时不用估算的角度(因角度还不准确)

状态机变量Motor_Status 的不同值,标识电机停转、起转、同步,等等各个状态,控制代码的执行分支。





无论电机在转、还是停,函数M451_FOC_Rekon() 每个PWM 周期都在执行完成以下三件事:
1>,更新角度偏差Theta_e
2>,估算磁体角度Estimation_Q_Position, 并计算出角度增量做函数返回值
3>,初步判断估算是否收敛:角度偏差(PLL的输入)Theta_e 若连续多次较小,就认为角度已收敛,变量Position_Explicit 写成非0值;若角度偏差较大就 Motor_Status &= ~0x30 清零 bit4/5

起转时,何时切同步转动,除了估算角度收敛之外,一般还有其它条件,比如转速超过某个最小值,已转过一定角度等等。





回复 支持 反对

使用道具 举报

44#
 楼主| Angus 发表于 2023-7-26 16:08:03 | 只看该作者
本帖最后由 Angus 于 2023-7-26 17:33 编辑

今天让一个电机反复改变转动方向,测试快速起转是否顺畅。无霍尔 FOC 控制,能做到这么快的改变转动方向,效果不错。上视频 Reverse.zip (2.96 MB, 下载次数: 554)
回复 支持 反对

使用道具 举报

45#
 楼主| Angus 发表于 2023-9-15 15:31:03 | 只看该作者
本帖最后由 Angus 于 2023-12-28 14:38 编辑

我们测试过10万转吸尘器,测试过220V大风机,测试过不均匀转动的活塞压缩泵,测试过48V汽车空调压缩机,验证我们的观测器和起转方法的通用性,测试都没问题。





回复 支持 反对

使用道具 举报

46#
 楼主| Angus 发表于 2023-10-3 21:30:50 | 只看该作者
本帖最后由 Angus 于 2023-10-29 18:00 编辑

M451无感FOC方案特性:
1,磁链估计,比电流估计精度好。
2,dq轴估计,比静态坐标轴估计误差小,因为Ld,Lq是常量,而ab轴的电感是随角度变化的,静轴估计理论上就有误差。
3,反正切输入PLL, 比Ea*sin+Eb*cos 输入PLL好,因为前者的值只与角度偏差有关,而后者的值还受转速影响。
4,定点数运算比浮点运算快。电机最小电感仍可10uH以下。我们测试了电感9uH 的吸尘器,起转很好。
5,M4内核有除法指令,更有“抗饱和累加“指令,写代码方便,运算速度快。
6,M451工作电压范围2.5~5.5V, 宽工作电压范围,抗干扰能力强。

回复 支持 1 反对 0

使用道具 举报

47#
 楼主| Angus 发表于 2023-10-27 17:00:03 | 只看该作者
M451无感FOC方案,测试飞行器螺旋桨的视频,示波器上可看到电流波形正弦度很好

电调测试.zip (2.38 MB, 下载次数: 491)

如果不固定住,就要起飞了

回复 支持 反对

使用道具 举报

48#
a20084666 发表于 2023-10-27 17:39:58 | 只看该作者
Angus 发表于 2023-10-27 17:00
M451无感FOC方案,测试飞行器螺旋桨的视频,示波器上可看到电流波形正弦度很好

的确不错
回复 支持 反对

使用道具 举报

49#
 楼主| Angus 发表于 2023-11-26 17:17:24 | 只看该作者
本帖最后由 Angus 于 2024-9-15 16:21 编辑

这里讲一下短路保护代码。 逻辑关系有点绕,但工作可靠。
短路信号接到 PWM 的 Brake 功能引脚,短路时,PWM 输出立即关闭功率管、然后产生 Brake 中断。
进 Brake 中断后 811 行写标志,表明执行过Brake中断,用于中断外检查。
812 行写标志,表示关了功率管。如果干扰较强,可采用 BrakeCount 计数的方式,两次或三次 Brake 信号确定是短路了,就保持关功率管关闭。 如果硬件做的好(比如用IPM)短路信号没有干扰,一次 Brake 信号就有效。

清除 Brake 中断标志 PWM0->INTSTS1 后 PWM 的输出就会恢复,不清除 Brake 中断标志退出中断后又会反复进 Brake 中断,所以 816行关了 Brake 中断再返回 ,这样即可保持功率管关闭,又不会反复进 Brake 中断了。  




Brake 中断里不能改写状态机 Motor_Status = 0, 因为Brake 中断优先级高,后续可能返回 ADC 中断又被改写,可能打乱 ADC 里的状态机。在中断外、主循环里有“是否发生 Brake ”的检查和后续处理,如下 297 行在这里,改写Mortor_Status =0 才是可靠的。296行把 Stop_Runing 相应位写1,后面检查此标志,RPM_Set 会一直赋值为停转值,不再起转。



以后,只要 Stop_Runing 不清0,406行都会把转速设定值 RPM_Set 写成 <=0 的停转值,Motor_Status 会保持在0、电机自由停转,不会再重新启转。



执行到 343 行时,检查短路是否已解除。 若短路保护已解除,即 Brake_No_Resume =0 了,这里清除 Brake 中断标志PWM0->INTSTS1 、恢复 PWM 输出,重新使能 Brake 中断。Stop_Runing 的短路标志也清除,但此时 Motor_Status=0,因在ADC 中断里有 PWM0->MSKEN = 0 , PWM 引脚输出仍保持着关闭功率管。



功率管如果用的是 IPM , 短路时 Fo 输出几十 us 低脉冲,然后输出高。如果是15V 太低,Fo 会持续输出低,二者都会产生 Brake,  所以, 如果后续检测到是 15V 太低,不是短路,也解除短路保护。

如果没有其它错误,Stop_Runing=0, 后续转速设定值 RPM_Set 就可以正常赋值了。一切从新开始,由 RPM_Set 的值决定是否启转。







回复 支持 反对

使用道具 举报

50#
 楼主| Angus 发表于 2023-12-28 11:39:07 | 只看该作者
本帖最后由 Angus 于 2024-7-15 18:06 编辑

起转时,即可以线性加速,也可以指数加速。
线性加速的好处是,起转时,如果想让转速慢慢稳定增加,就采用线性加速。

起转开始时,位置不收敛,转速较低,执行63~64行代码,转速逐步增加。
转速低于上限时,64行是线性加速。63行,转速增加一个百分比,这是指数加速度。
然后83行Pull_Ommega_f16 去掉16位小数,加到“位置”角度值 Angle_q 上。  



调用函数时,如果实参一用0值,63行转速增加百分比=0,就取消了指数加速,转速仅线性增加。



回复 支持 反对

使用道具 举报

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

本版积分规则

新唐MCU