器件型号: TMS320F28P650DK
我希望在我的应用中同步启用和禁用 PWM 输出。 例如、启用时、输出 A 和 B 最初处于低电平状态、当 TBCTR 等于零或 PRD(我想也可以这样做)时、应转换到初始周期位置、并从那里正常继续。 如需禁用、我希望 PWM 输出完成该周期、并在 PRD 或 0 处停止(此处也更倾向于可以同时完成这两项操作)。 我在互补配置中对两个 PWM 输出使用向上/向下计数 PWM 并仅对 CMPA(我使用 minDB 来生成死区时间、因为 DB 模块 dt 生成不支持在两个输出上产生 SW 强制低电平。)。
当前禁用的做法是使用 EPWM_setActionQualifierContSWForceAction 函数和 EPWM_setActionQualifierContSWForceShadowMode 在零或 PRD 处加载 SWforceAction 配置。 我在 PRD 和 0 添加了额外的事件、以便在周期开始时加载正确的初始 PWM 状态。
但是、启用时、ZERO 或 PRD 时的额外 AQ 事件会与禁用软件强制的同时发生、因此会将其忽略。 因此、第一个周期具有不正确的 Δ I、会导致我的应用中出现电流尖峰。
我可以想到以下解决方案:
- 使用 EPWM_setActionQualifierContSWForceAction 禁用、使用软件强制锁存 CBC 跳变、该跳变在 PRD 或零处清除。 缺点:1. 两种不同的启用和禁用方法并不那么纯净 2. CBC 跳闸应在调用 EPWM_setActionQualifierContSWForceAction 的周期结束之后开始。 这使得 它更加复杂。
- 将 CMPB 事件置于 TBCTR 1 或 PRD-1 以校正周期初始状态:缺点:命令占空比为 0/1 时、此 CMPB 事件应为零、否则如果低电平操作 AQ 为零、或者相反、我们可能仍会将高输出状态置于高电平。 这也是一个问题。
- 将 CMPB 用于 PWMB、这样我就无法在 CMPB=0 且 CMPA = 0 时将 A 和 B 同时变为低电平。 使用着色加载时、占空比会同步应用。 缺点:我希望还能在 PRD 处禁用和启用、在 shadowload 瞬间切换并不适合我的同步 CLA 任务(计算开始是在 TBCTR 零处触发的、因此 PRD 可能来得太早。
- 一些在 PRD 或 0 处使用 SWforce Immediate 或类似内容的软件触发操作:缺点:我不想混淆太多的时序关键型软件中断、因为这会降低软件的可维护性。
- 对于一个周期内的两个开关、使用具有高电平和低电平事件的 XCMP。 缺点:此任务可能过于复杂?
我是否错过了任何东西或这种在 C2000 中不容易实现的“基本“要求?
在任何情况下、如果有一种方法对动作限定符使用>=和<=、而不是仅使用==、这样我们就可以确保 ePWM 输出状态相对于 TBCTR 始终正确。 是否有计划在未来的产品中添加类似这样的内容? 否则、TBCTR 同步跳闸和脱跳功能到跳闸区的单触发跳闸也会很有帮助。