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

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

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

看了你追问的,原来是四路每一路都产生变化的波形。那个也好办。可以通过计算,把这几个波形统一起来成一个周期,比如开始0.5ms到了,让定的值取反,再加19.5再取反,再加1.3Ms再取反,再加18.7ms再取反...然后一直这样把几个都写完。

还有种方法,来改变第一个pwm的设定值。比如放数组里一共5个设定值,分别代表你设定的高电平时间,依次替换第一个定时器里面的中端时间即可。

当然,前两种都差不多,还有一种方法供你扩展:就是用两个定时器,然后按照时间去匹配修改。当然,51单片机那精度就不说了,不太确信可以达标,一个定时器进中断了,另一个就要停一下。。

BTW,个人感觉51的单片机没有很好的pwm模块,这样写了Pwm程序,别的就干不了了。建议用用带epwm模块的mcu,直接调用epwm和epwm中断,节省cpu资源,可以多写很多程序。

对于28335的话,可以在EPWM配置模块添加下面的语句:

//adc

EPwm1Regs.ETSEL.bit.SOCAEN = 1 // Enable SOC on A group

EPwm1Regs.ETSEL.bit.SOCASEL = 2 // TBPRD

EPwm1Regs.ETPS.bit.SOCAPRD = 1

这是默认EPWM1来触发AD转换(目前我程序里用的就是这个)。要想保证AD好用,你AD的初始化及相关标志位的配置也得配套设定好,光有启动语句的话照样没用

我做的和你的基本一样 其实28335和2812基本差不多 只是多了个浮点功能 在28335中 EPWM模块用于生成PWM波 每次只要对比较寄存器进行赋值就可以了 其他的设置和2812是一样的 建议你看一些28335的例程 至于AD采样 你可以用EPWM模块来触发 也可以通过外部引脚触发 先将电流信号转换成电压信号 注意:这个电压信号要在0--3V范围之内 然后DSP就可以对其进行读数了


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8127449.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-13
下一篇 2023-04-13

发表评论

登录后才能评论

评论列表(0条)

保存