主题:SysConfig 中讨论的其他器件
工具/软件:
我们使用以下代码块以 50%的占空比运行 EPWM 以写入周期/比较值:
void PWM_setPeriod (Pwm_Ctrl 结构 v){
//为每个 EPWM 设置周期(链接到 epwm1 周期)
uint32_t OLD = HWREG (EPWM1_TIMER_BASE + HRPWM_O_TBPRDHR);
uint32_t cmpa =(旧版> v.period)? V.period:旧)- pwm_deadidside;
HWREG (EPWM1_TIMER_BASE + HRPWM_O_TBPRDHR)= v.period;
HWREG (EPWM1_TIMER_BASE + HRPWM_O_CMPA)= cmpa;
HWREG (EPWM1_TIMER_BASE + HRPWM_O_CMPB)= PWM_死 区;
EPWM1A 的动作限定器按如下方式进行设置:
HighOnUpDriven.Bits.ZRO = AQ_OFF;
HighOnUpDriven.Bits.PRD = AQ_OFF;
HighOnUpDriven.Bits.CAU = AQ_LOW;
HighOnUpDriven.Bits.cad = AQ_low;
HighOnUpDriven.Bits.CBU = AQ_HIGH;
HighOnUpDriven.Bits.CBD = AQ_LOW;
这镜像 在 EPWM1B 中、以使 CAD 将其设置为高电平、CDB 将其设置为低电平。 这是为了实现我们想要的 50%占空比加上 PWM_DEADTIME 中设置的一些死区 — 设置为 0x40000。
时钟输入为 100MHz、频率范围为 50k 至 250k(因此在 prd 寄存器中低至 200)。
使用的其他 EPWM 同步到 EPWM1。 我们使用 HRPWM 和影子加载、这意味着当 COUNTER = 0 且= prd 时必须加载 CMPA/B、而 prd 只能在 COUNTER = 0 时加载(根据 SysConfig 1.19 GUI 中的警告/错误)。
我的假设是、第一个代码块将捕获写入高于 prd 的 CMPA 事件的任何可能性、无论我们在周期中何时写入该事件、因此我们绝不能错过 CMPA 上部事件 — 但我们确实如此。
有时我们只会错过关断事件、因此 EPWM1A 将正确关断、但降压过程中不会导通 1B、因此我们会错过单个周期。 有时、我们会在上下过程中错过 CMPA 事件、这样 1A 桥臂在整个周期加上下半个周期内有效保持高电平、而 1B 在相同的 3 个半周期内保持低电平(请参阅下图)。

我们已经花了几天时间对此进行了研究、我觉得我已经探讨了 sysconfig/我的代码中的大多数可能性、并且没有说明如何从配置角度实现这一点。 任何见解都将不胜感激。
谢谢、
Tom
