This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
msp430f149的B定时器怎么产生6路spwm波,这些波的相位差怎么设置,谁有这方面的资料啊。我找到一个程序,但没看太懂,谁能帮我解释一下
������ #include <msp430f149.h> #include<math.h> float c,a=45; int n=0; long int b=300,cnt=0; #define pi 3.14 #define CCR0_ini 500 #define keyin (P2IN & 0xf0) void delay(void) { unsigned int tmp; for(tmp = 12000;tmp > 0;tmp--); } void creat_spwm(int av,float f); int spwm[500]; void TimerB_Init() { P4DIR|=BIT1+BIT2+BIT3+BIT4+BIT5+BIT6; // P4.1 - P4.6 output P4SEL |= BIT1+BIT2+BIT3+BIT4+BIT5+BIT6; TBCCR0 = CCR0_ini; TBCCTL1 = OUTMOD_2; TBCCTL4 = OUTMOD_6; TBCCR1=TBCCR4=spwm[n]; TBCCTL2 = OUTMOD_2; TBCCTL5 = OUTMOD_6; TBCCR2=TBCCR5=spwm[n]; TBCCTL3 = OUTMOD_2; TBCCTL6 = OUTMOD_6; TBCCR3=TBCCR6=spwm[n+(int)(c*2/3)]; /*TBCCTL4 = OUTMOD_2; TBCCR4=spwm[n+53+53+53]*100; TBCCTL5 = OUTMOD_2; TBCCR5=spwm[n+53+53+53+53]*100; TBCCTL6 = OUTMOD_2; TBCCR6=spwm[n+53+53+53+53+53];*/ TBCCTL0=CCIE; TBCTL = TBCLR + MC_1 + TBSSEL_2+TBIE; // clear TAR, up mode*/ } /*********** av��������ն��ʱSPWMռ�ձ�,�Դﵽ���Ƶ�ѹ�����Ŀ�� av++�����������ѹ��av--�ɼ�С�����ѹ c��������spwmʱ�ĵ����������ı�Ƶ�� 4M/(CCR0*c)=Fsin ************/ void creat_spwm(int av,float f) { int i; c=2800000/(CCR0_ini*f); //c*=2; for(i=0;i<c;i++) { spwm[i]=(int)((av/2)*(sin(2*pi *i/ c-pi/2)+1)); } } void ini_sys(void) { //WDTCTL=WDTPW+WDTHOLD; //STOP W D T char i; BCSCTL1 &=~XT2OFF;//Set 430 clk ����XT2��DOC�ı��Ƶ��Ϊ��� �Ҳ���Ƶ��XT1Ϊ���پ��壨32.768K�� // BCSCTL2=SELM_2+SELS+DIVS_3;//ѡ��MCLK SCLK��ʱ��ԴΪ����ʱ�� ����Ƶ����Ϊ8M BCSCTL2=SELM_2+SELS; do { IFG1&=~OFIFG; for(i=0xff;i>0;i--); } while ((IFG1&OFIFG)!=0); } void main() { WDTCTL=WDTPW+WDTHOLD; ini_sys(); creat_spwm(b,a); TimerB_Init(); _EINT(); //_BIS_SR(LPM0_bits + GIE); while(1); } #pragma vector=TIMERB0_VECTOR __interrupt void TimerB(void) { n=(n+1)%(int)c; TBCCR1=TBCCR4=spwm[n]; TBCCR2=TBCCR5=spwm[n]; TBCCR3=TBCCR6=spwm[(n+(int)(c*2/3))%(int)c]; int temp; if(keyin != 0xf0) //��ֵ�иı� { delay(); //��ʱ���� if(keyin != 0xf0) //�ٴμ�ⰴ��״̬ { temp=keyin; while(keyin != 0xf0); //�ȴ��������ſ� switch(temp) //ת����ֵ { case 0xe0: creat_spwm(b,a++); break; case 0xd0: creat_spwm(b+=10,a); break; //a-=10;CCR0=a;CCR1=CCR2=a>>1; case 0xb0: P2OUT = 0xfb;break; case 0x70: P2OUT = 0xf7;break; default: P2OUT = 0xff;break; } delay();delay();delay();delay(); delay();delay();delay();delay(); } } }
你好,
你可以看下:
/***************************************************************
av用来控制斩波时SPWM占空比,以达到控制电压输出的目的
av++可增大输出电压,av--可减小输出电压
c控制生成spwm时的点数,用来改变频率
4M/(CCR0*c)=Fsin
****************************************************************/
希望对你有帮助。