看了你追问的,原来是四路每一路都产生变化的波形。那个也好办。可以通过计算,把这几个波形统一起来成一个周期,比如开始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就可以对其进行读数了欢迎分享,转载请注明来源:内存溢出
评论列表(0条)