• 回复
  • 收藏
  • 点赞
  • 分享
  • 发新帖

51实现SPWM算法,请高手指点

用51的两个定时器,T0控制频率,T1控制脉宽,实现载波比N=150的SPWM,用的是规则采样法,在T0的中断里查表计算T1的计数值来改变脉宽,现在遇到的问题是,我感觉算法没问题,因为如果只查表的话,输出波形没问题,但是加入计算的话,输出波形就不对了,就这一句,T1CNT=(M*sin[i]+10000)*T0CNT/2/10000 ;这句转换成汇编的话,我看了下要40句,应该是这条语句拖住了单片机,应高手指点一下怎么办

核心程序:

void timer0_ISR(void) interrupt 1  //频率控制

{

spwm1=~spwm1;

spwm2=~spwm1;

TH0=T0_high;

TL0=T0_low;

T1CNT=(M*sin[i]+10000)*T0CNT/2/10000 ;   //规则采样法公式简化

T1CNT=65535-T1CNT;  //note

TH1=T1CNT>>8;

TL1=T1CNT%256;

TR1=1;

i++;

if(i==150)

i=0;

}

void timer1_ISR(void) interrupt 3 //脉宽控制

{

spwm1=~spwm1;

spwm2=~spwm1;

TR1=0;

}

全部回复(2)
正序查看
倒序查看
wells
LV.4
2
2011-08-14 11:40

可能你来错地方了。你到数字电源部分走走。

0
回复
2011-10-06 10:45
@wells
可能你来错地方了。你到数字电源部分走走。
不要用计算,用查表,写一个SIN函数表,要快很多,如果没有AD取样反馈计算,几个微妙完成,加入反馈计算40微妙内能完成
0
回复