最近在群里遇到一个人问dsPIC 单片机PWM波的相位问题。首先需要产生互补、占空比可随时调整的PWM波形控制H桥,但互补PWM波形的相位并不是像单片机直接产生的那样(完全对着,如图1),而是需要第二路相对于第一路延迟半个周期,这样的第二路的高电平段在第一路的低电平中间(如图2)<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
图1
图2
经过考虑之后,我认为是可以实现的具体如下:
我试过一下,当然很粗略的效果还不错,我用单片机自带7.37Mhz时钟试的,会有误差,另外跟手册推荐的稍微有些不符(手册不建议用太大的死区,否则容易造成波形失真)
基本思想是将PWM设置成互补模式,然后调节死区,可以达到移位效果。
dsPICF33FJ128MC510A,PWM频率的分辨率在40Khz时是10位多点(使用40MHz时钟)
占空比的分辨率要是用死区控制的话可能就不那么高了,因为死区控制寄存器只有6位宽度。低配的单片机里面会有三路pwm,一个死区寄存器,高配的有两个,但我暂时只用一个。
另外,dsPIC的pwm有pwm周期寄存器是15位的,相应的占空比寄存器,是16位的(这样占空比可以达到Tcy/2的精度)占空比可以实时更新,这个能满足你随时调节的需要。
占空比还要计算下,然后,有至少一个6位的死区控制寄存器,其时钟可以配置位Tcy 2Tcy 4Tcy 8Tcy,占空比计算其实还是很简单的,单片机算一下就好了。
图3
如图,这里以有效电平为高来讨论(低的时候类推就可以了):
假设PWM的周期是T(通过PTPER寄存器进行设置),需要的实际占空比位k%,对应的高电平时间为T*k%=Z,设死区时间设置为X,配置单片机时给的是占空比对应的高电平时间是Y(其实就是设置占空比(高点平)计数器对应的值)。
这几个量要满足的关系为
实际周期T*k%=Z
由上面的图知Z=Y-X
要实现你的第二个pwm波形比第一个延迟半个周期,如图2,那么要求T/2=Z+X,
这其中PWM的周期T,需要的占空比是自己知道的,那么通过上面三个方程就可以确定下其他XYZ的量了,占空比0~50%都是可以滴,到50%就不用移了。
当然YZ的单位是一样的,但X因为分辨率只有6位,只能通过调整其不同的时钟周期来达到近似的结果。
当然PWM的时钟也是可以调节的,这个具体看PWM那一章的手册就很明白了。
要使用40Mhz的时钟,可以用pic内部时钟与自带pll来实现。
我用的是没有倍频的7.37Mhz,PWM频率是10Khz,如果用这个我实验时候的那个精度来算的话,死区设置成8Tcy这样,粗略估计调整之后高电平的最大的误差是1.08556us了,具体加到不同的占空比上去其影响是不同的。对1%占空比和40%占空比来说影响必然不同。具体看你实际的精度要求了。
用户377235 2012-12-13 18:05