NXP MCU 技术论坛
直播中

qjqb

8年用户 1255经验值
擅长:5762
私信 关注
[问答]

使用KV58F来控制BLDC电机的问题求解

我正在使用 KV58F 来控制我的 BLDC 电机。它适用于正常运行。
但是,如果有故障条件(FAULT0~~FAULT3)发生,它会导致问题......
问题是 PWM 通道没有完全禁用。因为输出没有死区时间控制,所以会引起过流。
它适用于我用于早期控制器的 MCF56F8367 DSP。
下面是一些与PWM保护相关的代码:
//-----*****根据Fault0~~Fault3设置PWM0&1保护*****-----
// Fault3---D_Q
// Fault2---PL_LIMIT
// Fault1 ---AZ_LIMIT
// Fault0---EL_AZ
INETVU_PWM0_BASEADDR->SM[0].DISMAP[0] = PWM_DISMAP_DIS0A(0x09) | PWM_DISMAP_DIS0B(0x09); // 通道 0---FALUT3(D_Q)&FAULT0(EL_AZ) 保护
INETVU_PWM0_BASEADDR->SM[1].DISMAP[0] = PWM_DISMAP_DIS0A(0x09) | PWM_DISMAP_DIS0B(0x09); //通道1---FALUT3(D_Q)&FAULT0(EL_AZ)保护
INETVU_PWM0_BASEADDR->SM[2].DISMAP[0] = PWM_DISMAP_DIS0A(0x09) | PWM_DISMAP_DIS0B(0x09); //通道2---FALUT3(D_Q)&FAULT1(AZ_LIMIT)&FAULT0(EL_AZ)保护
INETVU_PWM1_BASEADDR->SM[0].DISMAP[0] = PWM_DISMAP_DIS0A(0x0B) | PWM_DISMAP_DIS0B(0x0B); //通道0---FALUT3(D_Q)&FAULT1(AZ_LIMIT)&FAULT0(EL_AZ)保护
INETVU_PWM1_BASEADDR->SM[1].DISMAP[0] = PWM_DISMAP_DIS0A(0x0B) | PWM_DISMAP_DIS0B(0x0B); // 通道 1---FALUT3(D_Q)&FAULT2(PL_LIMIT)&FAULT0(EL_AZ) 保护
INETVU_PWM1_BASEADDR->SM[2].DISMAP[0] = PWM_DISMAP_DIS0A(0x0B) | PWM_DISMAP_DIS0B(0x0B); // 通道2---FALUT3(D_Q)&FAULT2(PL_LIMIT)&FAULT0(EL_AZ)保护
// 故障 0/1/2/3 在逻辑一级激活,自动清除
INETVU_PWM0_BASEADDR->FCTRL = PWM_FCTRL_FLVL(0x0F);
INETVU_PWM0_BASEADDR->FCTRL |= PWM_FCTRL_FAUTO(0x0F);
INETVU_PWM1_BASEADDR->FCTRL = PWM_FCTRL_FLVL(0x0F);
INETVU_PWM1_BASEADDR->FCTRL |= PWM_FCTRL_FAUTO(0x0F);
// PWM 在 PWM 全周期重新启用
INETVU_PWM0_BASEADDR->FSTS |= PWM_FSTS_FFULL(0x0F);
INETVU_PWM1_BASEADDR->FSTS |= PWM_FSTS_FFULL(0x0F);
// PWM 故障过滤器 - 20 快速周边。时钟采样率,7 个一致的样本激活
INETVU_PWM0_BASEADDR->FFILT = (PWM_FFILT_FILT_PER(20) | PWM_FFILT_FILT_CNT(7));
INETVU_PWM1_BASEADDR->FFILT = (PWM_FFILT_FILT_PER(20) | PWM_FFILT_FILT_CNT(7));
//软件控制输出寄存器---用于单极性PWM控制
INETVU_PWM0_BASEADDR->SWCOUT = 0x0000;
INETVU_PWM1_BASEADDR->SWCOUT = 0x0000;

任何人都可以帮助找出保护无法正常工作的原因吗?

更多回帖

发帖
×
20
完善资料,
赚取积分