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.
工具/软件:Code Composer Studio
我想使用 CMPSS 实现降压转换器的峰值电流模式控制。 因此、我编写一些代码来测试 CMPSS 和 ePWM。 测试波形如下、其中浅蓝色线表示在 CMPIN1P/ADCINA2中连接的信号、粉色线表示在 CMPIN1N/ADCINA3中连接的信号。 绿线是输出信号(ePWM6A)。
在代码中、我将默认占空比设置为50%、当 CMPSS 跳闸事件发生时、该占空比被强制为低电平。 图1给出了 CMPSS 工作时的波形、它可以强制 PWM 变为低电平。 但是、根据图 2、当 CMPIN1P > CMPIN1N 时、ePWM 始终为低电平、这不是我想要的。 我希望在 CMPIN1P > CMPIN1N 期间、PWM 始终输出我设置的占空比(50%、但不是始终为低电平)。 代码如下所示、如何设置寄存器? 非常感谢!
void InitEPwm6Examples(void){ EPwm6Regs.TBPRD = 500; //设置计时器周期 EPwm6Regs.TBPHS.bit.TBPHS = 0x0000; //相位为0 EPwm6Regs.TBCTR = 0x0000; //清除计数器 // //设置 TBCLK // EPwm6Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP;//向上计数 EPwm6Regs.TBCTL.bit.PHSEN = TB_DISABLE; //禁用相位加载 EPwm6Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1; //时钟与 SYSCLKOUT 的比率 EPwm6Regs.TBCTL.bit.CLKDIV = TB_DIV1; //慢,只观察一下 //范围。 EPwm6Regs.TBCTL.bit.PHSEN = TB_ENABLE; 禁止相位控制 μ s EPwm6Regs.TBCTL.bit.PRDLD = TB_SHADOW; TBPRD寄存器采用映射模式 μ s EPwm6Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_IN;//禁止同步信号 μ s //设置比较 // EPwm6Regs.CMPA.bit.CMPA = 250; 计数到此,强制拉低 μ s // //设置操作 // EPwm6Regs.AQCTLA.bit.ZRO = AQ_SET; 在计数为0处,设置EPWMA为高电平 μ s EPwm6Regs.AQCTLA.bit.CAU = AQ_CLEAR; //达到设定计数值CMPA处,EPWMA为低电平 ///--------------------------------------------------------- EALLOW; //将 DCB 配置为 TRIP4 EPwm6Regs.DCTRIPSEL.bit.DCBHCOMPSEL = 3; /选择Zone4作为触发Trip 4. EPwm6Regs.TZDCSEL.bit.DCBEVT2 = TZ_DCBH_HI; 选择比较输出 B 事件2 μ s EPwm6Regs.TZSEL.bit.DCBEVT2 = 1;//将 DCB 配置为 CBC //配置要过滤和异步的 DCB 路径 EPwm6Regs.DCBCTL.bit.EVT2SRCSEL = DC_EVT_FLT; //源是 DCBEVT2 Signa EPwm6Regs.DCBCTL.bit.EVT2FRCSYNCSEL = DC_EVT_SYNC;// 0:源是同步信号 //空窗设置 EPwm6Regs.DCFCTL.bit.Blanke=1; //1:启用消隐窗口 EPwm6Regs.DCFCTL.bit.PULSESEL=2; //时基计数器等于零(TBCTR = 0x00) EPwm6Regs.DCFCTL.bit.SRCEL=3; //源是 DCBEVT2信号 EPwm6Regs.DCFOFFSET=0; //消隐窗口偏移 EPwm6Regs.DCFWINDOW=30; //0.1us 20. EPwmXbarRegs.TRIP4MUXENABLE.BIT.MUX0 = 1;//为输出启用 TRIP4多路复用器 EPwm6Regs.TZCTL.bit.TZA=TZ_FORCE_LO; //强制 EPWMxA 处于低电平状态 EPwm6Regs.TZCLR.bit.CBCPULSE=0; //CTR =零脉冲清除 CBC 跳闸锁存器。 (与传统设计相同。) EPwmXbarRegs.TRIP5MUXENABLE.BIT.MUX0 = 1;//为输出启用 TRIP4多路复用器 EDIS; } void InitCMPSS (void) { EALLOW; // //启用 CMPSS // Cmpss1Regs.COMPCTL.bit.COMPDACE = 1; // //NEG 信号来自 DAC // Cmpss1Regs.COMPCTL.bit.COMPHSOURCE = NEGIN_PIN; // //使用 VDDA 作为 DAC 的基准 // Cmpss1Regs.COMPDACCTL.bit.SELREF = reference_VDDA; // //将 DAC 设置为中点以进行任意引用 // // Cmpss1Regs.DACHVALS.bit.DACVAL = 800; // //配置 CTRIPOUT 路径 //异步输出馈送 CTRIPH 和 CTRIPOUTH // // Cmpss1Regs.COMPCTL.bit.CTRIPHSEL = Ctrip_synch; // Cmpss1Regs.COMPCTL.bit.CTRIPOUTHSEL = Ctrip_synch; EDIS; }
我无法理解图2的用例以及它与图1的关系。
在图2中、电流波形看起来与 PWM 的开关无关? 那么、这个 PCMC 是如何实现的? 您能详细说明吗? 您要应用什么决定因素?
尊敬的 Manish,
非常感谢您的重播! 图1显示了我需要的理想波形。 请忽略图中的波形。 2.
我将给出降压转换器的实际工作波形、如图所示。 3、其中浅蓝色线表示连接在 CMPIN1P/ADCINA2中的信号(电感器电流的调制波形)、粉色线表示连接在 CMPIN1N/ADCINA3中的信号(阈值带)。 绿线是输出信号(ePWM6A)。
我的问题:如何确保 PWM 的周期是恒定的、即如何避免 PWM 始终被强制为低电平?
请您指出我的代码中的错误、并告诉我如何正确配置寄存器。 非常感谢!
非常感谢,我会尝试。
谢谢!
尊敬的 Manish,
很抱歉再次占用您的时间。 我想根据你的建议亲自解决这个问题,但它失败了。 因此,我希望再次得到你的帮助。
图 4显示了我需要的仿真波形。 理想情况是 TBCTR 在 t0时开始计数、而 PWM 在 t1时强制为低电平。 在 T2、TBCTR=TBPRD 的时刻、一个新的 PWM 周期开始。
遗憾的是、实际实验波形如图所示。 5.在 TBCTR=TBPRD 的时刻(即,时间 t’),没有新的 PWM 周期开始。 这些错误的 PWM 信号会导致错误的调制(CMP1N1P)信号、从而导致控制故障。 我知道、我的频率是200kHz、等于采用 TMS320F2803x 的斜率补偿数字峰值电流模式控制中的频率。 因此、我认为这不是由延时引起的。
我真的不知道如何解决这个问题、我希望我能得到您的帮助。 非常感谢!