Dmitry Kovalev
/
LGfiltr
forkd
Fork of LGstaandart by
Diff: SPI.c
- Revision:
- 226:4a4d5bd5fcd7
- Parent:
- 225:f8fee6c586cc
- Child:
- 227:2774b56bfab0
diff -r f8fee6c586cc -r 4a4d5bd5fcd7 SPI.c --- a/SPI.c Tue Dec 12 05:53:39 2017 +0000 +++ b/SPI.c Tue Dec 26 05:14:09 2017 +0000 @@ -32,7 +32,7 @@ int Buff_OUT1 [64]; int Buff_OUT [64]; int RegulADC,DeltaRegul,tempDeltaRegul; -int count10v=0,AmpWorms,MinWorms,MaxWorms,AMPSUM,AMPSUMP,AMPSUMM,AMPSUM_DESP,AMPSUMPout,AMPSUMMout,AMPSUMout,SumDelta,PLC_EROR,PLC_Flag,HFO_Flag,HFOdelta,HFOregul,HFOSumDelta; +int count10HFO=0, count10v=0, AmpWorms,MinWorms,MaxWorms,AMPSUM,AMPSUMP,AMPSUMM,AMPSUM_DESP,AMPSUMPout,AMPSUMMout,AMPSUMout,SumDelta,PLC_EROR,PLC_Flag,HFO_Flag,HFOdelta,HFOregul,HFOSumDelta; //int BuffADC_32Point [64]; @@ -120,40 +120,7 @@ SinPls=0; SinMns=0; } - - - -/* void HFORegul2(void) -{ -static unsigned int countHFO; - - countHFO=0; - if(Gyro.RgConA&0x2) - { - if(HFO_Flag) - { - DeltaRegul+=(Gyro.HFO_ref-(AMPSUM>>8)); - - sprintf((Time),"%d %d %d\r\n", AMPSUM>>8, DeltaRegul, Gyro.HFO_ref); - WriteCon(Time); - HFO_Flag=0; - AMPSUM=0; - } - switch(DeltaRegul) { - case 1: DeltaRegul=0; break; - case -1: DeltaRegul=0; break; - } - Spi.DAC_A-=(DeltaRegul>>2)*Gyro.HFO_Gain; - DeltaRegul=0; - } - else DeltaRegul=0; - if(Spi.DAC_A>Gyro.HFO_Min-1) Spi.DAC_A=Gyro.HFO_Min-2; - else if(Spi.DAC_A<Gyro.HFO_Max+1) Spi.DAC_A=Gyro.HFO_Max+2; - -} */ - -// Spi.DAC_B-=ADCDIF>>6; - + void ADS_Acum(void) { Spi.ADC_NewData = 0; @@ -202,15 +169,43 @@ Gyro.ADS_NewData = 1; } } -void ModFilt(void) + +void HFOFilt(void) { - static int SumBuff,Delta, OldDelta; - + if (count10HFO>=64*8) + { + count10HFO=0; + for(int q=0; q<64; q++) + { + AMPSUM+=BuffADC_10v[q]; + } + AMPSUM=AMPSUM>>6; + AMPSUM=AMPSUM>>3; + //AMPSUM=AMPSUM>>3; - + AMPSUM_DESP=AMPSUM; + HFOdelta=(int)((Gyro.HFO_ref)-AMPSUM); + + + HFOSumDelta+=HFOdelta; + HFOregul=HFOSumDelta/(int)(Gyro.HFO_Gain); + + HFOSumDelta-=Gyro.HFO_Gain*HFOregul; + + // tempDeltaRegul = HFOregul; + tempDeltaRegul += HFOregul; + AMPSUM=0; + HFO_Flag=1; + } +} + +void PLCFilt(void) +{ + static int SumBuff,Delta, OldDelta; + if (count10v>=64*32) { - LoopOn + count10v=0; for(int q=0; q<32; q++) @@ -232,7 +227,7 @@ for(int q=0; q<64; q++) { - AMPSUM+=BuffADC_10v[q]; + // AMPSUM+=BuffADC_10v[q]; AMPSUMout+=BuffADC_10v_F[q]; BuffADC_10v_OLD[q]= BuffADC_10v[q]; BuffADC_10v[q] =0; @@ -259,33 +254,27 @@ SumDelta-=Gyro.PLC_Gain*Gyro.PLC_Eror_count; PLC_EROR+=Gyro.PLC_Eror_count; - - - - AMPSUM=AMPSUM>>6; - AMPSUM=AMPSUM>>3; - AMPSUM=AMPSUM>>2; - - AMPSUM_DESP=AMPSUM; - HFOdelta=(int)((Gyro.HFO_ref)-AMPSUM); - - - HFOSumDelta+=HFOdelta; - HFOregul=HFOSumDelta/(int)(Gyro.HFO_Gain); - - HFOSumDelta-=Gyro.HFO_Gain*HFOregul; - - tempDeltaRegul=HFOregul; - tempDeltaRegul+=HFOdelta; - - HFO_Flag=1; + PLC_Flag=1; AMPSUMM=0; AMPSUMP=0; - AMPSUM=0; - LoopOff + + // LoopOff } } +void ModFilt(void) +{ + + + PLCFilt(); + if(PLC_Flag) + { + + HFOSumDelta=0; + } + else HFOFilt(); + +} void SPI_Exchange(void) // новая функция чтения, в нецй не должно быть ничего лишнего { @@ -336,10 +325,10 @@ count10v++; + count10HFO++; BuffADC_10v[CountV64] += BuffADC_1Point[CountV255]; - + // BuffADC_10HFO[CountV64] += BuffADC_1Point[CountV255]; ModFilt(); - } } @@ -354,16 +343,6 @@ { if(HFO_Flag) { - /* switch(HFOregul){ - - case 1: HFOregul=0; break; - case -1: HFOregul=0; break; - case 2: HFOregul=1; break; - case -2: HFOregul=1; break; - - - }*/ - Spi.DAC_A -= HFOregul; HFO_Flag=0; DeltaRegul=0; @@ -389,14 +368,11 @@ { if(PLC_Flag) { - PLC_Flag=0; - if (Gyro.PLCDelay) + if (Gyro.PLCDelay) { } - else Spi.DAC_B+=(Gyro.PLC_Eror_count); - - + else Spi.DAC_B+=(Gyro.PLC_Eror_count); } } Gyro.PLC_Eror_count=0; @@ -417,7 +393,11 @@ { if ( Spi.DAC_B < 10300 ) Spi.DAC_B = 32000; //проверка на переваливание за границу. else if ( Spi.DAC_B > 57000 ) Spi.DAC_B = 32000; - } + } + if(PLC_Flag) + { + PLC_Flag=0; + } }