![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
forkd
Fork of LG2 by
Diff: SPI.c
- Revision:
- 151:d565ce4d58c8
- Parent:
- 150:29c9f7671bac
- Child:
- 152:cff1321ab25e
--- a/SPI.c Wed May 04 14:01:57 2016 +0000 +++ b/SPI.c Thu May 05 11:03:59 2016 +0000 @@ -136,8 +136,8 @@ int tempDelta; int tempDac; - LoopOn - PLC_In = Gyro.AD_Slow; //выбираем даные для фильтрации +// LoopOn + PLC_In = Gyro.AD_Slow; //выбираем даные для фильтрации // PLC_In = Gyro.AD_Fast; //или+,или-(знак) Gyro.PLC_Delta = PLC_In - Gyro.PLC_Old; // узнаем приращение @@ -146,28 +146,36 @@ //AD_MAX=1943420832; //15728640 //AD_MAX=1943400; - if(AD_MAX < Gyro.AD_Slow) {AD_MAX = Gyro.AD_Slow;l=0;} - else l++; - if(flagmod>2){ - k++; - if(k>30) + if(AD_MAX < Gyro.AD_Slow) {AD_MAX = Gyro.AD_Slow;l=0;} //обновление максимального значения амплитуды обнуление счетчика малого понижения амплитуды. + else l++; //ели небыло обновления максимальной амплитуды инкрементируем счетчика малого понижения амплитуды. + if((l>100)&&(Gyro.PLC_Lern>59)) {AD_MAX -= 3107200; l=0;} //если счетчик малого понижения амплитуды больше 100(аммплитуда не обновлялась 100 раз). + //уменьшаем максимальную амплитуду, сбрасываем счетчик. + if(flagmod==3){ //если максимальный режим регулирования + k++; //инкрементируем счетчик большого понижения амплитуды + if(k>35) //если счетчик бльше 35 { - k=0; //1948558064 - AD_MAX -= 13107200; //= 50 + k=0; //обнуляем счетчик + AD_MAX -= 13107200; //уменьшаем максимальную амплитуду. } - } // 5242880 = 20 - else k=0; - if(l>30) {AD_MAX -= 13107200; l=0;} - tempDelta=(unsigned int)(AD_MAX-Gyro.AD_Slow); - - if( (Gyro.PLC_Lern<51)&&(Gyro.PLC_Error2Mode != 0))//пробигаем по нескольким значениям цап(50*0х3с=0хВВ8) для определения максимальной амплитуды. + } + else k=0; //если это не серия максимальных регулировок обнуляем счетчик. + + + + tempDelta=(unsigned int)(AD_MAX-Gyro.AD_Slow);//ищем разницу между желаемой и действительной амплитудами. + + + + if( (Gyro.PLC_Lern<60)&&(Gyro.PLC_Error2Mode != 0))//пробигаем по нескольким значениям цап(50*0х3с=0хВВ8) для определения максимальной амплитуды. { Gyro.PLC_Lern++; - Spi.DAC_B += 0x1e; + //Spi.DAC_B += 100; + Spi.DAC_B += 0x3c; if(AD_MAX < Gyro.AD_Slow) AD_MAX = Gyro.AD_Slow; - sprintf((Time)," Gyro.AD_Slow=%d Spi.DAC_B=%d AD_MAX=%d\r\n", Gyro.AD_Slow,Spi.DAC_B,AD_MAX); - WriteCon(Time); + // sprintf((Time),"Spi.DAC_B=%d Gyro.AD_Slow=%d AD_MAX=%d\r\n", Spi.DAC_B, Gyro.AD_Slow,AD_MAX); + // WriteCon(Time); } + //else Gyro.LogPLC=0; @@ -186,7 +194,7 @@ else {Gyro.PLC_Error2Mode = 1; Gyro.PLC_DeltaADD = 0;} - if(((tempDelta>>18)>50)||((tempDelta>>18)<(-50))) + if(tempDelta>(50<<18)) { tempDac=(unsigned int)(tempDelta>>18); if(tempDac>400) {tempDac=400;} @@ -194,14 +202,14 @@ tempDac = Gyro.PLC_ADC_DOld * tempDac; flagmod=3; } - else if(((tempDelta>>18)>20)||((tempDelta>>18)<(-20))) + else if(tempDelta>(12<<18)) { tempDac=(unsigned int)(tempDelta>>18); - Spi.DAC_B += Gyro.PLC_ADC_DOld * (tempDac-5); - tempDac = Gyro.PLC_ADC_DOld * (tempDac-5); + Spi.DAC_B += Gyro.PLC_ADC_DOld * (tempDac); + tempDac = Gyro.PLC_ADC_DOld * (tempDac); flagmod=2; } - else if(tempDelta>>18<2) + else if(tempDelta>(2<<18)) { tempDac=5; Spi.DAC_B += Gyro.PLC_ADC_DOld * tempDac; @@ -215,16 +223,18 @@ flagmod=1; } - + if ( Spi.DAC_B < 1000 ) {Spi.DAC_B = 32000; Gyro.PLC_Error2Mode = 5; Gyro.PLC_DeltaADD = 0;} if ( Spi.DAC_B > 63000 ) {Spi.DAC_B = 32000; Gyro.PLC_Error2Mode = 5; Gyro.PLC_DeltaADD = 0;} if(Gyro.LogPLC==1) { - sprintf((Time),"%d %d %d %d %d %d %d %d\r\n", Spi.DAC_B, temp9,tempDelta>>18,flagmod,tempDac,AD_MAX, Gyro.AD_Slow, k/*(Gyro.PLC_ADC_DOld * Gyro.PLC_Delta>>18)*/);//выдаем в терминал для постройки граффика регулировки периметра. + //sprintf((Time),"%d %d %d %d\r\n",Gyro.PLC_Lern, Spi.DAC_B, Gyro.AD_Slow, Gyro.AD_Slow>>18 );//выдаем в терминал для постройки граффика регулировки периметра. + //WriteCon(Time); + sprintf((Time),"%d %d %d %d %d %d %d %d\r\n", Spi.DAC_B, temp9,tempDelta>>18,tempDac, flagmod, AD_MAX, Gyro.AD_Slow, k);//выдаем в терминал для постройки граффика регулировки периметра. WriteCon(Time); } -LoopOff +//LoopOff } @@ -283,7 +293,7 @@ if(Gyro.LogPLC==1) { - sprintf((Time),"%d %d %d\r\n", Spi.DAC_B, Gyro.StrayPLC_flag, temp9);//выдаем в терминал для постройки граффика регулировки периметра. + sprintf((Time),"%d %d %d %d %d %d\r\n", Spi.DAC_B, temp9,flagmod, AD_MAX, Gyro.AD_Slow, k);//выдаем в терминал для постройки граффика регулировки периметра. WriteCon(Time); } @@ -291,7 +301,6 @@ */ - void PlcRegul_old(void) // на всяни й случай { int Delta;