Part Number:TMS320F2800157
想在PWM的下降沿设置时区时间,设置PWM死区时间的代码如下
测试结果是,只在PWMB上看到了死区时间,但是在PWMA上没有看到死区时间(波形如下图),
请问是什么原因? 是我的代码有问题吗?
EPWM_setDeadBandCounterClock(PWM_BASE1,EPWM_DB_COUNTER_CLOCK_FULL_CYCLE);
//EPWM_setRisingEdgeDelayCount(PWM_BASE1,pwm_dbred_ticks);
EPWM_setFallingEdgeDelayCount(PWM_BASE1,HBRIDGE_DEADBAND_PWM_COUNT);
EPWM_setDeadBandDelayMode(PWM_BASE1,EPWM_DB_RED,false);
EPWM_setDeadBandDelayMode(PWM_BASE1,EPWM_DB_FED,true);
//EPWM_setRisingEdgeDeadBandDelayInput(PWM_BASE1,EPWM_DB_INPUT_EPWMA);
//EPWM_setRisingEdgeDeadBandDelayInput(PWM_BASE1,EPWM_DB_INPUT_EPWMB);
EPWM_setFallingEdgeDeadBandDelayInput(PWM_BASE1,EPWM_DB_INPUT_EPWMA);
EPWM_setFallingEdgeDeadBandDelayInput(PWM_BASE1,EPWM_DB_INPUT_EPWMB);
//EPWM_setDeadBandDelayPolarity(PWM_BASE1,EPWM_DB_RED,EPWM_DB_POLARITY_ACTIVE_HIGH);
EPWM_setDeadBandDelayPolarity(PWM_BASE1,EPWM_DB_FED,EPWM_DB_POLARITY_ACTIVE_HIGH);
John Pan:
我想要的效果是:
,
John Pan:
总结来说,就是PWMA和PWMB在下降沿时,死区时间都有效
,
Yale Li:
理解整个DB模块可能会更有帮助。
使用DB模块的时候,就看它的框图就可以了:
DB模块很简单,就是由两部分组成的,延时计数器和开关。
延时计数器用于检测上升(上面的)及下降沿(下面的)并通过延迟的方式增加死区;开关的作用是选择信号的路径,熟悉了之后会更加理解控制每个开关的寄存器名称的含义。
所以无论通过寄存器还是库函数的编程方式,本质就是控制这些开关以及延迟的时间。TRM中的各种名词反而把事情复杂化了。
结合本问题,两路是不可能同时使用下降沿延时的。实现的方式大致是A路输出使用A路输入、上升沿延时并反向,B路输出还是使用A路输入、下降沿延时:
也就是TRM P1367~1368中所说的Active Low Complementary (ALC):
https://www.ti.com.cn/cn/lit/ug/spruiy4a/spruiy4a.pdf