原创 dsPIC产生PWM控制H桥

2012-7-23 18:45 3093 16 17 分类: MCU/ 嵌入式

最近在群里遇到一个人问dsPIC 单片机PWM波的相位问题。首先需要产生互补、占空比可随时调整的PWM波形控制H桥,但互补PWM波形的相位并不是像单片机直接产生的那样(完全对着,如图1),而是需要第二路相对于第一路延迟半个周期,这样的第二路的高电平段在第一路的低电平中间(如图2<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

20120723184325529.gif

1

20120723184355696.jpg

2

经过考虑之后,我认为是可以实现的具体如下:

我试过一下,当然很粗略的效果还不错用单片机自带7.37Mhz时钟试的,会有误差,另外跟手册推荐的稍微有些不符(手册不建议用太大的死区,否则容易造成波形失真
基本思想是将PWM设置成互补模式然后调节死区,可以达到移位效果

dsPICF33FJ128MC510A,PWM频率的分辨率在40Khz时是10位多点(使用40MHz时钟)
占空比的分辨率要是用死区控制的话可能就不那么高了因为死区控制寄存器只有6位宽度低配的单片机里面会有三路pwm一个死区寄存器高配的有两个,但我暂时只用一个。

另外,dsPICpwmpwm周期寄存器是15位的相应的占空比寄存器,是16位的(这样占空比可以达到Tcy/2的精度)占空比可以实时更新,这个能满足你随时调节的需要

占空比还要计算下,然后,有至少一个6位的死区控制寄存器,其时钟可以配置位Tcy 2Tcy 4Tcy 8Tcy占空比计算其实还是很简单的,单片机算一下就好了。
20120723184423550.gif

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.37MhzPWM频率是10Khz,如果用这个我实验时候的那个精度来算的话,死区设置成8Tcy这样,粗略估计调整之后高电平的最大的误差是1.08556us了,具体加到不同的占空比上去其影响是不同的。对1%占空比和40%占空比来说影响必然不同。具体看你实际的精度要求了。

PARTNER CONTENT

文章评论1条评论)

登录后参与讨论

用户377235 2012-12-13 18:05

谢谢你,就是我在群里提出的,现在正用DSPIC芯片调试呢。
相关推荐阅读
用户401512 2012-05-30 00:21
评论:@shaoziyang's Blog 博客中提到的“在精简版的XP中安装EK-LM3S811-ND-Rev2驱动失败的...”
太有用了,谢谢...
用户401512 2011-05-16 23:17
CC2430 驱动DS18B20(续)
//从DS18b20读取一位数据//读一位, 让DS18B20一小周期低电平, 然后两小周期高电平,//之后DS18B20则会输出持续一段时间的一位数据unsigned char readBit(vo...
用户401512 2011-05-16 23:15
CC2430驱动DS18B20
CC2430驱动DS18B20经过验证之后,结果终于出来了,在SimpleApp程序的SimpleSensor程序中用的应该是默认的16Mhz晶振,...
EE直播间
更多
我要评论
1
16
关闭 站长推荐上一条 /3 下一条