![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
forkd
Fork of LGstaandart by
Diff: SPI.c
- Revision:
- 215:b58b887fd367
- Parent:
- 214:4c70e452c491
- Child:
- 216:189b0ea1dc38
diff -r 4c70e452c491 -r b58b887fd367 SPI.c --- a/SPI.c Wed Aug 16 09:00:25 2017 +0000 +++ b/SPI.c Tue Aug 29 06:33:08 2017 +0000 @@ -12,19 +12,16 @@ int flagmod=0,Bdelta; int start=10; int dispersion=0,side=1,tempstrafe=15000; -unsigned int Temp_ADC_2; -unsigned int Temp_ADC_3; -unsigned int Temp_ADC_4; -unsigned int Temp_ADC_5; int ADC_5_T; unsigned int TempA; unsigned int TempTermLM; unsigned int conuntPLS; int ADC5Old,ADCDIF=0; -int DACModReg; +/*int DACModReg;*/ int SinPls=0,SinMns=0; int TSinPls=0,TSinMns=0; int timer=750; +int sum=0,znak=0; unsigned int testcount=0; unsigned int ADC5New; unsigned int Buff_ADC_1 [32]; @@ -35,45 +32,40 @@ int RegulADC,DeltaRegul,tempDeltaRegul; - int BuffADC_1Point [255]; -unsigned int BuffADC_16Point [64]; -int BuffADC_32Point [64]; -int BuffADC_64Point [64]; -unsigned int Buff_ADC_5 [255]; -unsigned int BuffADC_testPoint [64]; -int BuffADC_32PointD [64]; + +//int BuffADC_32Point [64]; -int Buff_Restored_Mod [64]; - int ADC_1Point; - int ADC_32PointD; - int ADC_64Point; +//unsigned int Buff_ADC_5 [255]; -unsigned int PulseADC_16Point; -unsigned int PulseADC_32Point; -unsigned int PulseADC_64Point; -unsigned int PulseADC_32PointD; + -unsigned int Buff_AMP [256]; -unsigned int Buff_AMP64P [256]; +//unsigned int PulseADC_16Point; +//unsigned int PulseADC_32Point; +//unsigned int PulseADC_64Point; +//unsigned int PulseADC_32PointD; + + +//unsigned int Buff_AMP [256]; +//unsigned int Buff_AMP64P [256]; unsigned int TypeMod=0; unsigned int ModArraySin [64] = {50,55,59,64,68,73,77,81,85,88,91,94,96,98,99,99,100,99,99,98,96,94,91,88,85,81,77,73,68,64,59,55,50,45,41,36,32,27,23,19,16,12,9,7,4,2,1,1,0,1,1,2,4,7,9,12,16,19,23,27,32,36,41,45}; -unsigned int ModArrayTriangle [64]; -unsigned int ModArraySaw [64]; +//unsigned int ModArrayTriangle [64]; +//unsigned int ModArraySaw [64]; unsigned int Mod=0; void InitMOD(void) { for (int i = 0; i < 64; i++ ) { - if(i<32) { ModArrayTriangle[i]=Mod; Mod+=3;} - else { ModArrayTriangle[i]=Mod; Mod-=3;} + /*if(i<32) { ModArrayTriangle[i]=Mod; Mod+=3;} + else { ModArrayTriangle[i]=Mod; Mod-=3;}*/ } for (int i = 0; i < 16; i++ ) { - ModArraySaw[i]=Mod; - Mod+=1; + /* ModArraySaw[i]=Mod; + Mod+=1;*/ } } void Modulator(void) @@ -83,43 +75,70 @@ switch(TypeMod) { case 0: LPC_DAC->DACR = (ModArraySin [(CountV64)&0x3f]*Gyro.ModAmp); break; - case 1: LPC_DAC->DACR = (ModArraySaw [CountV64]*Gyro.ModAmp); break; - case 2: LPC_DAC->DACR = (ModArrayTriangle [(CountV64-2)&0x3f]*Gyro.ModAmp); break; + /* case 1: LPC_DAC->DACR = (ModArraySaw [CountV64]*Gyro.ModAmp); break; + case 2: LPC_DAC->DACR = (ModArrayTriangle [(CountV64-2)&0x3f]*Gyro.ModAmp); break;*/ } + + + + + } } void PLCRegul(void) { unsigned int temp, Temp_Dac_B=0,Side=0; + static int CountFaza; - - // Temp_Dac_B=(0xffff-Spi.DAC_B); - if(conuntPLS<10) - { - /* for (CountFaza = 0; CountFaza <16; CountFaza++) SinPls+= BuffADC_64Point[ (CountFaza - Gyro.PLC_Phase) & 0x3f]; - for (CountFaza = 16; CountFaza <48; CountFaza++) SinMns+= BuffADC_64Point[ (CountFaza - Gyro.PLC_Phase) & 0x3f]; - for (CountFaza = 48; CountFaza <64; CountFaza++) SinPls+= BuffADC_64Point[ (CountFaza - Gyro.PLC_Phase) & 0x3f]; - conuntPLS++;*/ - } - else - { - conuntPLS=0; - Gyro.PLC_Eror = (SinMns-SinPls)>>16; - /*sprintf((Time)," %d %d %d \r\n", SinMns, SinPls,Gyro.PLC_Eror); - WriteCon(Time);*/ - TSinPls= SinPls; - TSinMns=SinMns; + if(conuntPLS<30) + { + // Temp_Dac_B=(0xffff-Spi.DAC_B);Buff_Restored_Mod[CountV64] BuffADC_1Point[CountV255] + /* if( (ModArraySin[(CountV64)&0x3f]-50)>0) znak=1; + else znak = -1; + for (CountFaza = 0; CountFaza <32; CountFaza++) SinPls += ((Buff_Restored_Mod[ (CountFaza - Gyro.PLC_Phase) & 0x3f]))>>5; + for (CountFaza = 32; CountFaza <64; CountFaza++) SinMns += ((Buff_Restored_Mod[ (CountFaza - Gyro.PLC_Phase) & 0x3f]))>>5;*/ + /* for (CountFaza = 0; CountFaza <32; CountFaza++) SinPls += (( BuffADC_1Point[ (CountFaza - Gyro.PLC_Phase) & 0x3f]))>>5; + for (CountFaza = 32; CountFaza <64; CountFaza++) SinMns += (( BuffADC_1Point[ (CountFaza - Gyro.PLC_Phase) & 0x3f]))>>5; */ + /*for (CountFaza = 0; CountFaza <64; CountFaza++) + { + if(Buff_Restored_Mod[CountFaza]>0) SinPls+=(Buff_Restored_Mod[CountFaza])>>5; + else SinMns+=(Buff_Restored_Mod[CountFaza])>>5; + sum += (Buff_Restored_Mod[CountFaza])>>5; + }*/ + + conuntPLS++; + } + else{ + + TSinPls=SinPls; + TSinMns=SinMns; + conuntPLS=0; + Gyro.PLC_Eror = (TSinMns+TSinPls)>>5; + sum+=Gyro.PLC_Eror ; + sprintf((Time)," %d %d %d %d\r\n", Buff_Restored_Mod[ (CountV64 - Gyro.PLC_Phase) & 0x3f], Buff_Restored_Mod[ (CountV64 - Gyro.PLC_Phase+1) & 0x3f],Buff_Restored_Mod[ (CountV64 - Gyro.PLC_Phase+2) & 0x3f], Buff_Restored_Mod[ (CountV64 - Gyro.PLC_Phase+23) & 0x3f]); + WriteCon(Time); SinPls=0; SinMns=0; + + + + /* if(Gyro.PLC_Eror>0) {Gyro.PLC_regul--;} + else {Gyro.PLC_regul++;} +*/ + if(Gyro.RgConA&0x8) { - if(Gyro.PLC_Eror>0) {Spi.DAC_B-=Gyro.PLC_Eror*Gyro.PLC_Gain;} - else {Spi.DAC_B+=Gyro.PLC_Eror*Gyro.PLC_Gain;} + Spi.DAC_B-=(Gyro.PLC_Eror>>4)*Gyro.PLC_Gain; + /* if(Gyro.PLC_Eror>0) {Spi.DAC_B+=Gyro.PLC_Eror*Gyro.PLC_Gain;} + else {Spi.DAC_B-=Gyro.PLC_Eror*Gyro.PLC_Gain;}*/ } - if(Gyro.PLC_Eror>0) {Gyro.PLC_Eror_count++;} - else {Gyro.PLC_Eror_count--;} + + if(Gyro.PLC_Eror>0){ Gyro.PLC_Eror_count++;} + else {Gyro.PLC_Eror_count--;} + + Gyro.PLC_Eror=0; if(Gyro.LG_Type==1) { @@ -127,13 +146,13 @@ else if ( Spi.DAC_B > Gyro.DownTreshold ) Spi.DAC_B = (Gyro.ResetLevelCool); } - else + else { - if ( Spi.DAC_B < 10300 ) Spi.DAC_B = 32000; //проверка на переваливание за границу. + if ( Spi.DAC_B < 10300 ) Spi.DAC_B = 32000; //проверка на переваливание за границу. else if ( Spi.DAC_B > 57000 ) Spi.DAC_B = 32000; } + } - } } @@ -142,6 +161,12 @@ unsigned int temp; static int CountFaza; temp = MODCount; + + /* for (CountFaza = 0; CountFaza <16; CountFaza++) SinPls+= (Buff_Restored_Mod[ (CountFaza - Gyro.PLC_Phase) & 0x3f]); + for (CountFaza = 16; CountFaza <32; CountFaza++) SinMns-= (Buff_Restored_Mod[ (CountFaza - Gyro.PLC_Phase) & 0x3f]); + for (CountFaza = 32; CountFaza <48; CountFaza++) SinPls+= (Buff_Restored_Mod[ (CountFaza - Gyro.PLC_Phase) & 0x3f]); + for (CountFaza = 48; CountFaza <64; CountFaza++) SinMns-= (Buff_Restored_Mod[ (CountFaza - Gyro.PLC_Phase) & 0x3f]);*/ + /* for (CountFaza = 0; CountFaza <32; CountFaza++ ) SinPls+= BuffADC_64Point[ (CountFaza - Gyro.PLC_Phase) & 0x3f]; for (CountFaza = 32; CountFaza <64; CountFaza++) SinMns+= BuffADC_64Point[ (CountFaza - Gyro.PLC_Phase) & 0x3f];*/ Gyro.PLC_Eror = SinMns-SinPls; @@ -152,8 +177,8 @@ if(Gyro.PLC_Eror>0) {Spi.DAC_B+=1 * Gyro.PLC_Gain;} else {Spi.DAC_B-=1 * Gyro.PLC_Gain;} } - if(Gyro.PLC_Eror>0) {Gyro.PLC_Eror_count++;} - else {Gyro.PLC_Eror_count--;} + /* if(Gyro.PLC_Eror>0) {Gyro.PLC_Eror_count++;} + else {Gyro.PLC_Eror_count--;}*/ if ( Spi.DAC_B < 10300 ) Spi.DAC_B = 32000; //проверка на переваливание за границу. else if ( Spi.DAC_B > 57000 ) Spi.DAC_B = 32000; @@ -202,7 +227,7 @@ Gyro.IN1_Accum += Spi.ADC2; Gyro.IN2_Accum += Spi.ADC3; // Gyro.DeltaT = (unsigned int)(((Spi.ADC4>>1) + Gyro.Tmp_OffsetT5) * Gyro.Tmp_scaleT5); - Gyro.DeltaT = (unsigned int)(Spi.ADC4>>1); + Gyro.DeltaT = (unsigned int)(Spi.ADC4>>1); TempA = (0xffff - Spi.ADC5); // перевернем знак и умножим на два (было 32000...0 стало 0 ...32000 /*сдвиг(<<1) стало 0 ...64000*/) Gyro.TermLM = Spi.ADC1; @@ -239,6 +264,7 @@ } void SPI_Exchange(void) // новая функция чтения, в нецй не должно быть ничего лишнего { + unsigned int DummySPI; //unsigned int ADC5Dif; ADC5New = LPC_SSP0->DR;// Чтение АЦП @@ -269,25 +295,47 @@ Spi.ADC_NewData = 1; } - - - BuffADC_1Point[CountV255]=(0x7fff-ADC5New); + if(Time1Hz>6) + { + BuffADC_1Point[CountV255]=ADC5New;//(0x7fff-ADC5New)&0x7fff; - ADC_64Point += BuffADC_1Point[CountV255 ]; - ADC_64Point -= BuffADC_1Point[(CountV255 - 64) & 0xff]; // заполнение буфера накопленых приращений за 64 тактов + ADC_64Point += BuffADC_1Point[CountV255]; + ADC_64Point -= BuffADC_1Point[(CountV255 - 64) & 0xff]; // заполнение буфера накопленых приращений за 64 тактов BuffADC_64Point[CountV64] = ADC_64Point; + + - + ADC_32PointD += BuffADC_1Point[CountV255]; ADC_32PointD -= BuffADC_1Point[(CountV255 - 32) & 0xff]; // заполнение буфера накопленых приращений за 32 тактов - ADC_32PointD += BuffADC_1Point[CountV255]; + ADC_32PointD += BuffADC_1Point[(CountV255 - 64) & 0xff]; + ADC_32PointD -= BuffADC_1Point[(CountV255 - 96) & 0xff]; BuffADC_32PointD[CountV64] = ADC_32PointD; + - Buff_Restored_Mod[CountV64] = BuffADC_32PointD[CountV64]*2 - BuffADC_64Point[CountV64]; - + ADC_16Point += BuffADC_1Point[CountV255]; + ADC_16Point -= BuffADC_1Point[(CountV255 - 16) & 0xff]; + BuffADC_16Point [CountV64] = ADC_16Point; + + + Buff_Restored_Mod[CountV64] =(int)(BuffADC_32PointD[CountV64] - BuffADC_64Point[CountV64]); + + + + /* if( (ModArraySin[(CountV64)&0x3f]-50)>0) znak=1; + else znak = -1;*/ + if (CountV64<32) SinPls += (Buff_Restored_Mod[ (CountV64 - Gyro.PLC_Phase) & 0x3f]/*znak*/)>>5; + else SinMns += (Buff_Restored_Mod[ (CountV64 - Gyro.PLC_Phase) & 0x3f]/*znak*/)>>5; + } + + /*if(Gyro.LogMod) + { + sprintf((Time),"%i\r\n", Buff_Restored_Mod[CountV64]); + WriteCon(Time); + }*/ // BuffADC_64Point[CountV64]=ADC5New; - Buff_ADC_5[CountV255] = (0x7fff-ADC5New)<<2; + // Buff_ADC_5[CountV255] = (0x7fff-ADC5New)<<2; }