PWM 是设置互补输出,中心对称模式, PWMCON1bits.ITB = 1; //=1 PHASEx做为PWM的周期寄存器 =0 PTPER做为PWM的周期寄存器 只有选择了ITB=1 才能选中心对称PWM
PWMCON1bits.DTC = 0; //死区允许/正死区
PWMCON1bits.CAM = 1; //中心对称PWM 模式
PWMCON1bits.FLTIEN = 0; //禁止故障中断
PWMCON1bits.TRGIEN = 0; //特殊中断
IOCON1bits.PENH = 1; // PWM1H引脚为PWM 模式
IOCON1bits.PENL = 1; // PWM1L引脚为PWM 模式
IOCON1bits.PMOD = 0; // PWM引脚为互补输出模式
IOCON1bits.OVRENH = 0;
IOCON1bits.OVRENL = 0;
IOCON1bits.POLH = 0;
IOCON1bits.POLL = 0;
IOCON1bits.OVRDAT = 0;
DTR1 = 0; //PWMH死区
ALTDTR1 = 80; // PWML死区 50=800NS 100=1.6US
死区的时间是按要求出来了,一切都正常, 问题来了,我的PWMH脚一直是高电平了,或者说占空比在100% 为啥PWML引还出死区信号,, PWMH脚一直高电平了,PWML却出死区的波型。 ?
两路互补PWM信号,设置了死区时间,如果一路(PWMH)占空比100%,那么另一路(PWML)占空比应该是0%。
但是另一路(PWML)却会再出现窄脉冲,死区时间。关掉死区设置它就没有了。
不明白为啥会这样,请问高手怎么去解决?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
话说,这类芯片的PWM模块不是可以动态调整端口的电平吗。像MC系列的PWM模块,应用在步进驱动中的衰减调整或者是无刷驱动中的消磁控制,都可以借用端口电平的动态改写功能。所以说要固定PWM模块的输出端口电平,最好是用模块本身的功能实现。 另外,会不会是这芯片本身限制不能把占空比设定最低或最高?
一周热门 更多>