看到了吧,SPWM就是这样.
笨方法就是,把你须要的频率固定好,X轴的时间T也就定了下来,Y轴就是振幅,这个自己决定.有了这个参数后把正弘波分为360份.每度1份,先计算上面图的面积,得出后匹配下图的的脉冲面积。最后计算出每个脉冲的时间和占空比时间,以次作为单片机的定时器溢出时间。别小看这个土方法,但是行之有效,单片机基本上不点用资源,定时器中断,付下次溢出的初始值,输出SPWM,再等下次中断,不像大侠们的复杂计算公试写进MCU中,要开几个定时器和ADC。
软件实现方法:
定义一个时间数组 time[359]={0,1,2......} //里面是刚才计算到的脉冲宽度时间和占空比时间 作用:作为定时器溢出值
定义一个Count //溢出次数,溢出360次为一个半周
bit PF //定义正负半标记 bit =0上半周,bit=1下半周
初始化TH0和TL0数值任意定
定时器中断
TH TL=time[Count] //设定下次的溢出时间
Count++
if (Count==360) {bit != bit ,Count=0,TH TL=time[0] } //上下半周设定
if (bit==0) {PORT != PORT} //送出SPWM信号,要几路送几路 这个是上半周
else{ PORT != PORT} //送出SPWM信号,要几路送几路 这个是下半周,三相再加个延时处理
大功告成。
简单吧,有空时我写个软件自己生成等数量用于定时器。只要计算一次永久使用,反正大家都在做50HZ的,大家一起计算面积然后共享就可以了。
如有不明可以992001010交流:注 电源网,否则拒加