This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
我有一个带 TMS320F28069的定制板、用于通过霍尔传感器控制 BLDC 电机。 首先、我想实施双极调制、以便在电机堵转时保护自举电路放电(我将占空比限制为95%)。 其次 、我们希望电机具有四象限运行。
我分析了实现单极调制的 TI InstantBLDC 示例。
为了实现双极调制、我需要插入死区时间来保护开关短路。 例如霍尔状态101
PWM1A 和 PWM1B 配置为互补 PWM。
对于 PWM2A 和 PWM2B、我使用动作限定符子模块将0强制为高侧晶体管、将1强制为低侧晶体管。
问题在于 PWM3、因为我需要在 PWM 计数器的下一个零之后关闭两个晶体管。 无法使用动作限定符、因为死区子模块会以这种方式阻止两个 PWM:
(* ePWM[3]).AQCSFRC.bit.CSFB = 1; //在 EPWM3的输出 A 上强制为连续低电平
(* ePWM[3]).AQCSFRC.bit.CSFA = 1; /*在 EPWM3的输出 B 上强制为持续低电平 *
高侧晶体管关闭、但低侧始终开启。
我考虑过使用 TripZone 或禁用死区模块,但这样做不能像使用动作限定符那样在 EPWM 模块的零计数器事件中强制关闭两个晶体管。
以下是具有同步整流功能的驱动器 drv8307双极调制示例(第13页)。
您对如何实现 BLDC 的双极调制有什么想法吗?
感谢您的重播。 我还有一些问题。
如何修改 AQCTLA 和 DBCTL? 我几乎测试了 AQ 和 DB 子模块的所有可能寄存器、但没有成功。 我一直观察到,在新换向部门的乞讨问题上,有一个没有死机时间的情况下,最后一个是死机时间的情况
DB 子模块存在问题、因为它未被影子化、并且该寄存器中的每次更改都是立即发生的。
根据您的建议、我的代码中有一个部门:
1)我修改了 AQCTLB (我已将 PCB 上的 PWMA 与 PWMB 交换、并在 DB 子模块的输入上使用 PWMB)
2) 2)我不确定应该如何处理 DBCTL、因此我测试了禁用死区时间或更改 POLSEL
3) 3)我习惯强制执行、如下所示:我还测试 了 RLDCSF。
案例 HALL_State_ABC_100:
(* ePWM[pBLDC -> PWmA]).AQCTLB.bit.ZRO = 0;
(* ePWM[pBLDC -> PWMb]).AQCTLB.bit.ZRO = AQ_SET;
(* ePWM[pBLDC->PWMc]).AQCTLB.bit.ZRO = 0;
(* ePWM[pBLDC -> PWmA]).AQSFRC.bit.RLDSF = 0;
(* ePWM[pBLDC->PWMb]).AQSFRC.bit.RLDSF = 3;
(* ePWM[pBLDC->PWMc]).AQSFRC.bit.RLDSF = 0;
(* ePWM[pBLDC -> PWmA]).DBCTL.bit.out_mode = DB_full_enable;
(* ePWM[pBLDC->PWMb]).DBCTL.bit.OUT_MODE = DB_DISABLE;
(* ePWM[pBLDC->PWMc]).DBCTL.bit.out_mode = DB_disable;
(* ePWM[pBLDC -> PWmA]).AQCSFRC.bit.CSFB = 0; //在 EPWM1的输出 A 上强制禁用
(*ePWM[pBLDC->PWmA]).CMPB = pBLDC->PWM; /* EPWM1输出 A 上的 PWM 信号 */
(* ePWM[pBLDC->PWmA]).AQCSFRC.bit.CSFA = 1; //在 EPWM1的输出 B 上强制一个连续低电平 *
/* *//
(* ePWM[pBLDC->PWMb]).AQCSFRC.bit.CSFB = 1; //在 EPWM2的输出 A 上强制一个持续低电平 *
(* ePWM[pBLDC->PWMb]).AQCSFRC.bit.CSFA = 1; //在 EPWM2的输出 B 上强制一个持续低电平 *
/* *//
(* ePWM[pBLDC->PWMc]).AQCSFRC.bit.CSFB = 1; //在 EPWM3的输出 A 上强制为连续低电平 *
(* ePWM[pBLDC->PWMc]).AQCSFRC.bit.CSFA = 2; //在 EPWM3的输出 B 上强制设置连续高电平 *
中断;
您是否有任何想法、错误是什么?