lihaizhao821122 发表于 2016-1-3 17:25:07

关于DSPIC33FJ16GS504 PWM死区问题

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)却会再出现窄脉冲,死区时间。关掉死区设置它就没有了。
不明白为啥会这样,请问高手怎么去解决?

FORDREAM0 发表于 2016-1-3 20:09:01

我的理解是:当你的PWMH为高时,PWML窄脉冲持续时间(1般为几个微秒)就是你插入的死区时间,如果你关闭死区时间功能,这个窄脉冲自然就没有了,你上面描述的是正常现象吧
死去时间就是防止PWMH为高时,PWML马上变低从而导致H桥同时导通而短路,所以每个周期的PWMH为高时,PWML有一段低,是为死区时间,
不知道我这样说对不对

FORDREAM0 发表于 2016-1-3 20:10:16

笔误:是每个周期开始时PWMH为高,PWML先保持一段高电平,是为死区时间,之后再变为低电平

lihaizhao821122 发表于 2016-1-4 09:55:13

说的没错,设了死区,PWML窄脉冲持续出现也能理解,可是这样的让H桥逆变的下管(或上管)出现了导通,造成输出波行有毛刺,即然是互补输出,有一脚持续高电平几个周期了,那另一脚应该也出持续出低平才合理。

rifjft 发表于 2016-1-4 16:20:31


  话说,这类芯片的PWM模块不是可以动态调整端口的电平吗。像MC系列的PWM模块,应用在步进驱动中的衰减调整或者是无刷驱动中的消磁控制,都可以借用端口电平的动态改写功能。所以说要固定PWM模块的输出端口电平,最好是用模块本身的功能实现。 另外,会不会是这芯片本身限制不能把占空比设定最低或最高?
 
页: [1]
查看完整版本: 关于DSPIC33FJ16GS504 PWM死区问题