预览加载中,请您耐心等待几秒...
1/7
2/7
3/7
4/7
5/7
6/7
7/7

在线预览结束,喜欢就下载吧,查找使用更方便

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

spwm的数字控制 #include<p30f6010a.h> #include"pwm.h" #include"ADC.H" _FOSC(CSW_FSCM_OFF&XT_PLL4);//4倍频晶振,Failsafe时钟关闭 _FWDT(WDT_OFF);//关闭看门狗定时器 _FBORPOR(PBOR_OFF&MCLR_EN);//掉电复位禁止,MCLR复位使能。 _FGS(CODE_PROT_OFF);//代码保护禁止 #defineOffset_1200x5555//120度偏移值 intflag_pwm; intAmplitude; intFrequency; voidDelay(); constintPWM_Scaling=230;//pwm周期值 constintsinetable[]=//这是一个含有64个值的正弦波表,覆盖了正弦函数的360度。 { 0,3212,6393,9512,12539,15446,18204,20787,23170,25329, 27245,28898,30273,31356,32137,32609,32767,32609,32137,31356,30273,28898, 27245,25329,23170,20787,18204,15446,12539,9512,6393,3212,0,-3212,-6393, -9512,-12539,-15446,-18204,-20787,-23170,-25329,-27245,-28898,-30273, -31356,-32137,-32609,-32767,-32609,-32137,-31356,-30273,-28898,-27245, -25329,-23170,-20787,-18204,-15446,-12539,-9512,-6393,-3212, }; intmain(void) { intTemp1,Temp2,Temp3,Phase; PORTD=0; PORTE=0; TRISD=0xF7FF;//设置RD11输出驱动PWM缓冲器 TRISE=0xFDFF;//设置RE9输出复位电源模块 PORTE=0X0200;//电机复位 Delay(10); PORTE=0; init_ADC(); init_pwm(); while(1) { if(flag_pwm==1) { flag_pwm=0; Phase=Phase+Frequency;//查表值 Temp1=Phase;//a相查表值 Temp2=Temp1+Offset_120;//a+120得到b相查表值 Temp3=Temp2+Offset_120;//b+120得到c相查表值 Temp1=Temp1>>10;//将a相右移得到6位查表值 Temp1=Temp1<<1;//左移一位得到a相字节查表值 Temp2=Temp2>>10; Temp2=Temp2<<1;//b Temp3=Temp3>>10; Temp3=Temp3<<1;//c /*********************************************************/ //计算第一相占空比 Temp1=sinetable[Temp1]; Temp1=Temp1*Amplitude; Temp1=Temp1*PWM_Scaling; Temp1=Temp1+PWM_Scaling; PDC1=Temp1; //计算第二相占空比 Temp2=sinetable[Temp2]; Temp2=Temp2*Amplitude; Temp2=Temp2*PWM_Scaling; Temp2=Temp2+PWM_Scaling; PDC2=Temp2; //计算第三相占空比 Temp3=sinetable[Temp3]; Temp3=Temp3*Amplitude; Temp3=Temp3*PWM_Scaling; Temp3=Temp3+PWM_Scaling; PDC3=Temp3; } //else //{ //; //} } } voidDelay(unsignedintcount) { unsignedintj; for(j=0;j<count;j++); return; } ********************************************************************************* #include<p30f6010a.h> #include"spwm.h" //intFrequency; //intAmplitude; voidinit_ADC(void) { //ADinitialization ADPCFG