用51单片机同时实现四路PWM波,(C语言)

周期为20ms、每路波形都要实现高电平时间0.5ms,1.3ms,1.9ms,2.3ms,2.5ms四种波形。各位,帮帮忙啊。这么晚了都没有实现

定个时间20ms周期的定时器,然后在定时器到达那些点的时候,让自己设的那些变量依次变化。 再根据自己的变量,付给输出端口就可以了。 看着像舵机的

看了你追问的,原来是四路每一路都产生变化的波形。那个也好办。可以通过计算,把这几个波形统一起来成一个周期,比如开始0.5ms到了,让定的值取反,再加19.5再取反,再加1.3Ms再取反,再加18.7ms再取反...然后一直这样把几个都写完。
还有种方法,来改变第一个pwm的设定值。比如放数组里一共5个设定值,分别代表你设定的高电平时间,依次替换第一个定时器里面的中端时间即可。
当然,前两种都差不多,还有一种方法供你扩展:就是用两个定时器,然后按照时间去匹配修改。当然,51单片机那精度就不说了,不太确信可以达标,一个定时器进中断了,另一个就要停一下。。
BTW,个人感觉51的单片机没有很好的pwm模块,这样写了Pwm程序,别的就干不了了。建议用用带epwm模块的mcu,直接调用epwm和epwm中断,节省cpu资源,可以多写很多程序。追问

谢谢!我也想过第二个办法,可能是C编程学的不到位,没有写出来。我试着再写一写。这个是学长给的任务。不能用51自带的PWM波.....就是锻炼我们的编程能力和对51的应用吧

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2016-01-04
这个可以实现的,具体的程序可以根据思路来
1:通过计算,把这几个波形统一起来成一个周期,比如开始0.5ms到了,让定的值取反,再加19.5再取反,再加1.3Ms再取反,再加18.7ms再取反...然后一直这样把几个都写完。
2:改变第一个pwm的设定值。比如放数组里一共5个设定值,分别代表你设定的高电平时间,依次替换第一个定时器里面的中端时间即可。
3::是用两个定时器,然后按照时间去匹配修改。。。
建议用用带epwm模块的mcu,直接调用epwm和epwm中断,节省cpu资源,可以多写很多程序。
参考《吴鉴鹰单片机项目实战精讲》,吴鉴鹰单片机开发板教程
第2个回答  2012-11-22
你用82C54扩展吧!精度和频率范围都适合你这个要求,有些三轴控制系统里面都有人用这个+51单片机实现的!程序在我回答的问题里面有,这个程序是已经实际通过调试的,你可以直接用的!
第3个回答  2012-11-19
很多51都带pwm,你的只要精确到0.1ms,肯定能实现.
标准51用定时器也可以软件实现,你的指标不高没问题.