找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

  [复制链接]
24#
 楼主| Angus 发表于 2023-2-19 12:36:38 | 只看该作者
本帖最后由 Angus 于 2024-9-12 14:33 编辑

PWM  频率 15KHz 以上,用五段式 SVPWM, 可降低功率管开关次数,减小功率管发热量。
若 PWM 频率较低,10KHz 以下,就用七段式 SVPWM ,可降低 PWM 频率开关噪音,因为电流通断频率是 PWM 频率的两倍。

函数 M4_SVPWM() 是按五段式计算出的、三对PWM 的不供电时间。在本例中,就是PWM 低电平时间,是两边低电平时间和。把三个指针返回值,除2后写入占空比寄存器即可。

如果要用七段式,低电平最短的那路PWM, 低电平时间 temp16 要减半,另两相低电平时间,也减去 temp16/2

返回值 Section 的低16位,是 T1+T2,  即最大导通相的高电平时间。所以 temp16 = PWM周期 - Section 就是:低电平时间最短那相的、低电平时间。
五段式变七段式,只要三个指针返回值,都再减 temp16/2 就可以了,代码如下。


返回值 Section 低16位是 T1+T2 未修正值,如果它超过周期值了,就不必减了。




回复 支持 反对

使用道具 举报

23#
 楼主| Angus 发表于 2023-2-16 09:27:08 | 只看该作者
本帖最后由 Angus 于 2023-2-21 10:16 编辑

此代码起转方式,是 I/F 起动,还是V/F 起动?

这两种起动方式可以在代码中选配,由宏定义 __DO_CURRENT_PI_WHILE_ACTIVE  配置。

若选配了起动过程中做电流PI,就是I/F 起动,起动时,在状态2给自举电容充电后,变状态5磁体先吸到某个位置(这里耗费较长时间),再变状态4控制起转过程。整个过程电流是受控制的,对保护控制器比较有利。


若未定义__DO_CURRENT_PI_WHILE_ACTIVE ,就是起动过程不做电流PI控制, 起动时,在状态2给自举电容充电后,变状态3控制起转过程,起动过程稍快,但不做电流控制,电流波动较大。所以起动电压不要太大,防止电流冲太高对功率管不利

回复 支持 反对

使用道具 举报

22#
 楼主| Angus 发表于 2023-2-15 17:19:27 | 只看该作者
本帖最后由 Angus 于 2024-9-12 14:30 编辑

停转时一定关功率管吗? 停转后可以去状态0关功率管,也可去状态5 保持小电流锁定状态。这个由宏定义 MOTOR_STOP_STATUS 配置。

状态2输出0电压,若 RPM_Set >= RPM_STOP_VALUE,  上三管保持关断 , 下仨 MOS 输出使能,七段式SVPWM下管只导通50% 时间,所以不会刹车,可以给自举电容充电。
main()开头,外设初始化时,进状态2 等50ms,就是给自举电容充电 50ms(RPM_Set 初值= RPM_Stop_Value -1)。

状态2 代码见下面截图:
1> 397行,若 RPM_Set  >= RPM_Stop_Value 时,PWM->MSKEN = 0x15。就是关上MOS, 只下MOS 输出使能。 否则哪路输出使能由中断外决定。


状态5锁定后,检测转速设定值 RPM_Set 是否大于0(301行),转速设定值大于0才起转,否则保持锁定状态,代码截图如下:












回复 支持 反对

使用道具 举报

21#
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

使用道具 举报

20#
 楼主| Angus 发表于 2022-10-29 20:57:14 | 只看该作者
游客 223.104.219.x 发表于 2022-10-29 20:00
谢谢!再请教一下,Angle_q是不是开环时候假定的转子Q轴角度,同步以后就是观测器算出来的真实转子Q轴角度 ...

是的。
另一角度看,Angle_q 总是是坐标旋转的角度。起转时软件控制角度,同步时用估算的角度。
回复 支持 反对

使用道具 举报

19#
匿名  发表于 2022-10-29 20:00:21
谢谢!再请教一下,Angle_q是不是开环时候假定的转子Q轴角度,同步以后就是观测器算出来的真实转子Q轴角度?
回复 支持 反对

使用道具

18#
 楼主| Angus 发表于 2022-10-28 21:26:09 | 只看该作者
本帖最后由 Angus 于 2022-10-29 12:44 编辑

下载代码后,不做改动,电感最大可到100mH,电阻最大可到500欧。
如果电感再大,可把电感除10后再赋值给Ld/Lq,然后把单位常量Unit_Magnify 也除10就可以。
目前我测试过的电机,电感最大的是220V的电机:50220/49220uH;电感最小的是航模电调用的一个小电机:11/9uH。
回复 支持 反对

使用道具 举报

17#
匿名  发表于 2022-10-28 15:00:31
十分感谢楼主解答,顺便请教一下这个代码有没有试过比较大的电感和电阻电机,如果一般冰箱压缩机的电阻有几欧姆到十几欧姆,电感几十到一百多mH,油烟机的风机电感和电阻也很大,惯量也大,可以试试效果。
回复 支持 反对

使用道具

16#
 楼主| Angus 发表于 2022-10-27 22:01:04 | 只看该作者
本帖最后由 Angus 于 2023-2-19 11:09 编辑

电流的基准是ADC 的值。一般电流ADC 数值较小,换算后会损失精度,所以不换算。ADC中断里,读出电流ADC 值乘 8 后再坐标旋转,求得 dq 轴电流赋给 Id_Measure_f3 ,Iq_Measure_f3 ,此处后缀 _f3,表示有 3 位小数。
在做电流PI 运算前,对直流量 Iq_Measure_f3 又做了一次滤波,并增加了一位小数赋值给 Iq_Meas_LPF_f4, 后缀 _f4 表示有 4位小数。

回复 支持 反对

使用道具 举报

15#
 楼主| Angus 发表于 2022-10-27 21:48:02 | 只看该作者
本帖最后由 Angus 于 2024-9-12 14:00 编辑

电压的基准值是 0.1V。最大值是 16383,若超过此值, 乘4后大于等于65536做坐标旋转会溢出,即最大工作电压是 1638.3V。 在ADC中断里, 读出母线电压ADC值,就换计算出0.1V 的数值,然后赋给变量 V_BUS_0v1

具体代码如下:  母线电压,电路上是俩220K 串4K1电阻分压后到ADC 引脚,所以分压比 (220*2+4.1)/4.1,  12位ADC 参考电压是5V,  所以  ADC值换算成电压公式是:
电压 =   5V * ADC值 / 4096  再乘分压比(444.1/4.1), 这个公式右边再乘10 就是0.1V数值,简化后 = ADC值*5416/4096 。代码中 355 行, 加1024是四舍五入,右移 11位是除 2048,少除了2后面补上。

把当前电压 ADC 值看作 X,
457行是求出了 2X。
458行是 2X + 2Y,  这是母线电压的4倍, 成了 25mV 的数值,  用25mV数值去做 SVPWM计算,  哪怕工作电压不到10V,也有足够的计算精度。最大电压 1638.3V 的数据乘4后得65532, 坐标变换也不会溢出。
459行是 (2X + 2Y)/4 = (X+Y)/2, 这是一阶低通滤波 Y(n) = [Y(n-1) + X(n)]/2。


SVPWM 能输出的无失真相电压,最大值是 0.577倍的母线电压,再大, 就是削顶的正弦电压了。 263行,选择一个相电压上限值。
265行, 增加17位小数后,赋值给 Vq_Limit_f17,Vd_Limit_f17 (后缀 _f17 表示17位小数) 用于电流PI 运算结果的上限值。  电流PI 运算结果有17位小数,  电压上限在这里先增加17 小数,比在PI 运算结果限幅时再增加17位小数,节省代码。






回复 支持 反对

使用道具 举报

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

本版积分规则

新唐MCU