找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

  [复制链接]
跳转到指定楼层
#
Angus 发表于 2016-8-10 16:46:56 | 只看该作者 |只看大图 回帖奖励 |正序浏览 |阅读模式
本帖最后由 Angus 于 2025-9-1 10:00 编辑

参考原理图 M451_FOC.pdf (39.23 KB, 下载次数: 5526) , 图中第三相驱动和前两相一样,省略, 省一页图纸。
M451无感FOC吸尘器在10万转时,电流钳测的电流波形

每个PWM周期的计算耗时小于20us。如果 PWM=30KHz/周期33us,转速就可跑到 15万转。

启转快,同步快,代码精简到8K+


顺风启转,直接同步


让电流设定值突变,电流响应快、并且无超调


有感FOC的IAR工程代码: M451_SVPWM.zip (1.57 MB, 下载次数: 6022)
运行此代码,不接电机,在PWM0_0, PWM0_2, PWM0_4 引脚接 10K/1uF 阻容后就可测到如下波形


无感 FOC 代码 M451_FOC_V26.zip (841.6 KB, 下载次数: 3691) 带详细中文注释量产后可开放 M4_SVPWM.lib。
1>,在 DQ 坐标轴做的磁链观测器,观测器收敛很快,  所以启动较快。
2>, 定点运算,并且用到了 M4 的 DSP 指令,所以运算速度很快,占用CPU 时间较少。
3>,有电流超前角,基速以下 MTPA 控制,基速以上弱磁控制。
4>,三闭环控制,有功率闭环控制,或做功率限制。
5>,有加速度控制,方便调节加减速快慢。
6>,积分运算有抗饱和代码。
7>,有顺风起转功能。支持正反转切换。
8>,静止起动有两种方法可选:普通启动和快速启动。
9>, 有死区补偿,有谐波补偿 ,有退偶代码,五段式和七段式 SVPWM 模式可随时切换。
X>, 代码中电压上限 1638.3V,电压再高修改系数即可。测试过 9uH ~ 25mH 的电机,再宽范围修改系数即可。
  
每一行代码都反复检查并测试,我们精雕细琢,只为性能卓越

此代码效果的视频 M451_Video.zip (32.33 MB, 下载次数: 1557)
电机参数不同或电路不同时,代码修改说明 M451无感FOC 代码说明.pdf (1.91 MB, 下载次数: 3482)

PWM 触发ADC中断代码流程:  读取电流 =>迭代运算、估算位置=>算三路PWM 占空比写入寄存器

  
过调制输出电压。 过调制可提高电压利用率


技术支持电话
新唐电子科技(上海)有限公司   021 - 62365999

























M451_FOC基本原理.pdf

1.73 MB, 下载次数: 4656

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

使用道具 举报

推荐
admin 发表于 2022-11-21 16:08:45 | 只看该作者
M451  可做 FOC + PFC 方案。 也可做 FOC + CAN通信 方案

七段式SVPWM 算法,一个PWM 周期有两次电流注入,所以电流频率是PWM 频率的两倍,PWM 频率若用10KHz(周期是 100us),电流频率主要是20KHz,所以噪音已比较小。

此M451 FOC 方案,PWM(ADC)中断耗时20us左右,所以另一组PWM  完全有时间做 PFC 控制。

我们推荐以下引脚配置, 同时留出CAN 通信引脚。PA2,PA3 可控制大功率 PFC 的主管和副管。

牛卧堂
回复 支持 2 反对 0

使用道具 举报

推荐
 楼主| Angus 发表于 2023-3-30 11:36:26 | 只看该作者
本帖最后由 Angus 于 2023-3-31 21:58 编辑

这里讲一下电流 PI 参数的取值问题

电机可以看成一个电感串一个电阻,其拉氏变换是 1/(sL+R), PI 控制的拉氏变换是 (Kp + Ki/s) , 这俩公式看不懂的,请去复习一下拉氏变换
电流的 PI 控制图如下,x是电流设定值,y是电机的实际电流。PI 控制的输出是电压V,电压加到电机(电阻+电感), 又调整了电流大小,控制的最终结果是 y=x 。因为有积分运算,所以只要 x-y >0, PI 运算的结果V 就会一直增加,所以电机电流y也一直增加,直到 y=x。


上图写成公式

公式化简

令 Ki = K*Kp, K是一个常数,公式变为



上式可变成 y 的二阶微分方程,求出 y  的解,用拉氏反变换的方法也可求出 y 的解。
当设定电流不变、即x=常数时,y 的解的形式是:
其中 x1,x2 是 S 的一元二次方程   的解。我们先不求解,讨论解的形式,比较简单。

S的一元二次方程有俩实数解时,y 的解中,e的指数是实数,y 的值指数变化(增加或衰减)趋于终值C0,没有振荡。
如果上述一元二次方程的解是复数,e的指数是复数,按欧拉公式,就是y的解是三角函数、乘e指数。y的解有三角函数,就是电流 y 有振荡。PI 控制效果、是振荡式趋于稳定值C0,这是我们不希望的。
上述S的二次方程有实根,必须满足:

上式可写成 ,第二个括号内的值 >=0,就满足整个公式>=0。

从第二个括号内式子 4RKp - 4LkKp >=0 得出 R - LK >= 0,即 K <= R/L
所以,Ki 满足下式,  电流响应就不会有振荡:

这就是 Ki 取值的理论依据,实际上 PI 控制环路还有PWM  滞后一个周期等其它微小滞后因素,Ki 的这个临界值,比 R/L*Kp 还大一点,也就是只要Kp的取值不会引起振荡,Ki 取值 = R/L*Kp 也不会振荡。

回复 支持 2 反对 0

使用道具 举报

推荐
 楼主| 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

使用道具 举报

推荐
 楼主| Angus 发表于 2024-7-20 11:11:34 | 只看该作者
本帖最后由 Angus 于 2025-6-5 17:44 编辑

新唐M451 无感FOC 代码,做MTPA控制。

先介绍一下理论。文字中的符号, 要显示出来,必须单独上传图片,为了省事,我只好先写成 word 文件,再截成一个大图片上传了。

电流分量代入转矩公式,得


MTPA 控制就是给定电流Is,求角度等于多少时,转矩最大。求导=0得



解这个一元二次方程,得

不同Is对应的超前角可做一个折线。假如最大工作电流是32A,做32个点,1A一个点。算出N =Is (取整),则Is对应的超前角在点[ N], [N+1 ]之间,按下式做一个线性计算就可得到角度




若要做 MTPA 控制,就在 SysTick 中断里、转速 PI 运算得出 Is 后,再查表求出超前角 Angle_Fai就可以了,求 Iq,Id的代码已写好。




M451做MTPA 控制.pdf

332.75 KB, 下载次数: 2135

回复 支持 1 反对 0

使用道具 举报

推荐
 楼主| Angus 发表于 2022-1-23 21:36:38 | 只看该作者
本帖最后由 Angus 于 2024-9-12 13:41 编辑

这里讲一下 Clark 变换

求 I_alpha, I_beta,  就是求电流向量的实部和虚部。A相在0度,B相在120度,C相在-120度,三个电流写成复数形式分别为


求三个电流的“失量和” 。 三相电流的“标量和=0“,即Ia+Ib+Ic = 0,这个不用求。


因为在下MOS 导通时测电流,显然下MOS导通时间长时,电流ADC 受PWM 开关影响就小,值相对准确一些。
如果 C 相下 MOS 导通时间短、就用 Ia 和 Ib 计算电流向量, Ic = -Ia-Ib 代入向量求和公式,得到

消去 Ia 或 Ib 的公式,请读者自己推导

等幅变换中电流向量若是 I,  则对应相电流峰值是 I*2/3。所以上式求出的电流向量,乘2/3后才与控制量对应,  这样公式就变成了

上式这个电流向量的模,正好与相电流的峰值,数值上相等。
下面来看代码,
181~189行,按扇区,选择下MOS导通时间长的两相, 求I_alpha, I_beta,为了减小计算误差先增加小数,数值乘8
191行,1/3 的开方=0.57735 =18919/32768, 所以乘18919再右移15位就是乘1/3的开方,右移小了3位,等于是把结果乘了8


执行完191行后,就求出了 I_alpha,I_beta 。接下来坐标变换求出了有3位小数的 Id 和 Iq 电流









回复 支持 1 反对 0

使用道具 举报

推荐
 楼主| Angus 发表于 2022-1-20 14:35:43 | 只看该作者
本帖最后由 Angus 于 2024-9-15 16:10 编辑

这里讲一下代码中的 PI 运算。

模拟 PID 运算公式 :

去掉微分运算,再把公式离散化,公式变为:


采用增量式算法:


下面是转速 PI 运算的代码
代码 733 行:增量 = Kp*[本次误差 - 上次误差] + Ki * 本次误差
代码 734 行,temp32 = U(n-1) + 增量。
736~739行是抗饱和运算
741 ~ 742行,计算结果 temp32 做限幅后,再赋值给电流设定值变量 Is_set_f12

  


回复 支持 1 反对 0

使用道具 举报

99#
 楼主| Angus 发表于 2025-9-6 09:00:04 | 只看该作者
本帖最后由 Angus 于 2025-9-6 11:11 编辑

弱 磁 测 试
测试电机 Lq = 15200 uH,Ld = 6870 uH 。是一个 220V 的电机。 用新唐带隔离功能的 NuLink 仿真器,进入仿真状态,实时查看变量的值。
不用弱磁功能,让超前角 Angle_Fai = 0 ;  设定转速 3500RPM,可以看到最大只能到 3282RPM。



电压上限保留4位小数是 0x4B90,实际输出电压 Vq/Vd 的模已到 0x4B8C,这里有求模开平方的误差。输出饱和计数已累加到30,输出已多次饱和 。



使能弱磁功能,可以看到实际转速可以到 3700RPM,  超前角数据 12288,是 67.5 度。





回复 支持 反对

使用道具 举报

98#
 楼主| Angus 发表于 2025-9-1 11:11:11 | 只看该作者
本帖最后由 Angus 于 2025-9-2 11:11 编辑

2025年9月1日的更新,优化了电压饱和的判断,让弱磁控制更稳定。

代码中 MTPA 控制角和弱磁控制角是分开的。未进入弱磁控制前,让 MTPA 角度等零就是 Id=0 控制。 若允许超前角非0,输出电压饱和后,就进入弱磁控制。

若同时使用 MTPA 控制和弱磁控制,启动后,电流向量的运行轨迹是从 A 到 B 点,再到 C 点。如果负载较轻,C点可能输出电压已达最大值但电流未到最大值,此时若实际转速未到设定转速,则超前角开始一步步增大,同时电流幅值也增大,运行到 D 点,若实际转速仍未到设定转速,超前角再次一步步增大,运行到 E 点。


在 E 点稳定运行时,若负载变重,则超前角会一步步减小,回到 D 点;若负载再次变重,沿电流极限圆运行到 G 点。即:负载变化时,电流向量轨迹会在 G,D,E 之间摆动,处在恒功率运行状态,这种工作方式轻载时转矩大,一般用于工业传动带、汽车等行业,负载突然变大时(传动带突然加物料,汽车在山路行驶突然上坡)转速响应快,缺点是轻载时能耗高。

代码中如果让超前角 Angle_Fai 总是=0,即不做弱磁控制、仅做 MTPA 控制,负载变化时,电流向量轨迹是 G,C,B  这样变化。这种方式,轻载时转矩小,负载突然变大时,转速响应慢,优点是轻载时节能。
回复 支持 反对

使用道具 举报

97#
 楼主| Angus 发表于 2025-8-8 17:51:11 | 只看该作者
单电阻方式,在下图红线处测电流,先测A相,第二次 测 A+B 相电流,就可以进行电流重构了。



但是如果,AB 相 占空比很接近,怎么测呢?

中间开槽是一个办法。如下图,AB 两相占空比很近, 就加宽A 相占空比,同时在A 相中间开槽。三相输出电压001增加了,由中间的 110 抵消,输出电压不变。


如果 AB 占空比都接近 100%,  比如输出电压在60度、并且占空比都接近100%, A 相占空比无法再加宽怎么办呢? 那就采用角度交替偏移法。


电压角度 60度时,实际输出电压角度让其在 50度和70度交替,两个PWM 周期平均角度还是 60度。

具体做法是在 SVPWM 计算时,输入的角度 = Angle_q - 10,下个周期用的角度 = Angle_q +10 (偏移角度可按 Angle_q 离60度的远近调整)。

我们做了个测试,让 SVPWM 计算用的角度,不停左右摆动,电机依然正常转动。


波形展开,或放大,电流增加了一点高频分量








回复 支持 反对

使用道具 举报

96#
匿名  发表于 2025-8-6 11:02:58
能否讲下其中的死区补偿和谐波补偿 一直不是很理解
回复 支持 反对

使用道具

95#
匿名  发表于 2025-8-6 10:51:51
Angus 发表于 2025-6-12 22:20
普通启动过程
第一步先把磁铁吸到0度,或某个角度,这一步代码在状态5

能否讲下快速启动方式
回复 支持 反对

使用道具

94#
 楼主| Angus 发表于 2025-8-4 22:50:12 | 只看该作者
顺风起转


回复 支持 反对

使用道具 举报

93#
匿名  发表于 2025-8-1 09:48:04
请问哪里可以买高压的开发板
回复 支持 反对

使用道具

92#
匿名  发表于 2025-6-27 17:24:32
可以讲讲你们的无位置角度估算方法,再不讲就过时了
回复 支持 反对

使用道具

91#
 楼主| Angus 发表于 2025-6-26 09:28:20 | 只看该作者
本帖最后由 Angus 于 2025-6-27 22:29 编辑

用此代码做的厨房排烟机,起动效果看视频
AO1.zip (1.19 MB, 下载次数: 431)
屏幕上显示的是电流波形



回复 支持 反对

使用道具 举报

90#
 楼主| Angus 发表于 2025-6-12 22:20:01 | 只看该作者
本帖最后由 Angus 于 2025-7-24 16:59 编辑

普通启动过程
第一步先把磁铁吸到0度,或某个角度,这一步代码在状态5


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


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

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

这种启动方式,适合绝大多数电机,M451 无感 FOC 代码,当然也必须支持这种启动方式,从状态4启动,就是这个启动流程。


M451 无感FOC 还有一种无需定位的快速启动方式。


回复 支持 反对

使用道具 举报

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

本版积分规则

新唐MCU