Dmitry Kovalev
/
LGfiltr
forkd
Fork of LGstaandart by
Diff: SPI.c
- Revision:
- 160:6170df6f5a5c
- Parent:
- 159:38f39c0c143f
- Child:
- 162:44e4ded32c6a
diff -r 38f39c0c143f -r 6170df6f5a5c SPI.c --- a/SPI.c Fri May 13 11:01:16 2016 +0000 +++ b/SPI.c Fri May 13 14:04:22 2016 +0000 @@ -9,7 +9,7 @@ int AD_Regul = 0; int temp9; int AD_MAX=0; -int k=0,l=0; +int k=0,l=0,r=0; int flagmod=0; unsigned int Temp_ADC_2; unsigned int Temp_ADC_3; @@ -132,11 +132,6 @@ int tempDac; -// PLC_In = Gyro.AD_Fast; - //или+,или-(знак) - - // Gyro.AD_Slow=Gyro.AD_Slow<<3; - PLC_In = Gyro.AD_Slow; //выбираем даные для фильтрации Gyro.PLC_Delta = PLC_In - Gyro.PLC_Old; // узнаем приращение Gyro.PLC_DeltaADD = Gyro.PLC_Delta * Gyro.PLC_ADC_DOld; //приращение с учетом знака (и количества) прошлого приращения @@ -147,28 +142,28 @@ - // 3600 (размер моды порядка 3000) - if((Gyro.PLC_Lern < 60) && (Gyro.PLC_Error2Mode != 0)) { //пробигаем по нескольким значениям цап(60*0х3с=0хВВ8) для определения максимальной амплитуды. - Gyro.PLC_Lern++; //инкрементируем счетчик поиска максимальной амплитуды - if(AD_MAX < Gyro.AD_Slow) AD_MAX = Gyro.AD_Slow; //если максимальная амплитуда меньше текущей записываем новую максимальную амплитуду. * - Spi.DAC_B += 0x3c; //добовляем в значение цапа 60 - Gyro.CuruAngle = 0; + // 3600 (размер моды порядка 3000) + if((Gyro.PLC_Lern < 150) && (Gyro.PLC_Error2Mode != 0)) { //пробигаем по нескольким значениям цап(60*0х3с=0хВВ8) для определения максимальной амплитуды. + Gyro.PLC_Lern++; //инкрементируем счетчик поиска максимальной амплитуды + Spi.DAC_B += 0x3c; //добовляем в значение цапа 60 + if (AD_MAX < Gyro.AD_Slow) AD_MAX = Gyro.AD_Slow; //если максимальная амплитуда меньше текущей записываем новую максимальную амплитуду. + else if ((AD_MAX>Gyro.AD_Slow)&&(AD_MAX>1930000000)) r++; //если текущая амплитуда меньше максимально найденной то инкрементируем счетчик. + if (r>5){Gyro.PLC_Lern=150;Gyro.PLC_Error2Mode=5;} //если текущая амплитуда меньше максимально найденной в течении 5 тактов то выходим из поиска + + Gyro.CuruAngle = 0; //не считаем угол пока ищем максивальную амплитуду. } //работает только первые ~30-40 секунд (37 сек). - if(AD_MAX < Gyro.AD_Slow) { AD_MAX = Gyro.AD_Slow; l=0; }//обновление максимального значения амплитуды обнуление счетчика малого понижения амплитуды. * - else if((l == 100)&&(Gyro.PLC_Error2Mode == 0)) { AD_MAX -= 5107200;k=1;l=0;} //если счетчик малого понижения амплитуды больше 100(аммплитуда не обновлялась 100 раз). - else l++; - - if((k == 1)&&(Gyro.PLC_Error2Mode == 0)) {Spi.DAC_B += 200; k=2;} - //if((k == 2)&&(Gyro.PLC_Error2Mode == 0)) {Spi.DAC_B -= 200; k=0;l=0;} - //инкрементируем счетчик малого понижения желаемой амплитуды (максимальной замеченной) + if(AD_MAX < Gyro.AD_Slow) { AD_MAX = Gyro.AD_Slow; l=0; } //обновление максимального значения амплитуды обнуление счетчика малого понижения амплитуды. * + else if((l == 150)&&(Gyro.PLC_Error2Mode == 0)) { AD_MAX -= 5107200;k=30;l=0;} //если счетчик малого понижения амплитуды больше 100(аммплитуда не обновлялась 100 раз). + else if(Gyro.PLC_Error2Mode == 0) l++; //инкрементируем счетчик малого понижения желаемой амплитуды (максимальной замеченной) + if ((k == 30)&&(Gyro.PLC_Lern > 59)) Spi.DAC_B += 400; //после уменьшения максимальной амплитуды двигаем шевелем цап + else if((k == 1)&&(Gyro.PLC_Lern > 59)) {Spi.DAC_B -= 400; k=0;l=0;} //для быстрог поиска новог максимума. + if(k>0)k--; + Gyro.PlC_MaxD=(unsigned int)(AD_MAX-Gyro.AD_Slow); //ищем разницу между желаемой и действительной амплитудами. - - //ели небыло обновления максимальной амплитуды инкрементируем счетчика малого понижения амплитуды. - - + if(Gyro.RgConA&0x2) { // если контур регулирования замкнут /* else if ( Gyro.PLC_Delta > (3500 * 65536)) {Spi.DAC_B += 2500; Gyro.PLC_Error2Mode = 5; Gyro.PLC_ADC_DOld = 0;} // проверка на двух модовость @@ -196,7 +191,7 @@ else if(Gyro.PlC_MaxD<(2<<18)) { //режим если дельта равна 0; tempDac=2; Spi.DAC_B += Gyro.PLC_ADC_DOld * tempDac; - flagmod=1; + flagmod=0; } else { tempDac=(unsigned int)(Gyro.PlC_MaxD>>19); // 1 режим регулирования @@ -224,7 +219,7 @@ if(Gyro.LogPLC==1) { //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 %d %d\r\n", Spi.DAC_B, temp9, l, tempDac, flagmod, AD_MAX, Gyro.AD_Slow, k, Gyro.CuruAngle, Gyro.TermLM);//выдаем в терминал для постройки граффика регулировки периметра. + sprintf((Time),"%d %d %d %d %d %d %d %d %d %d\r\n", Spi.DAC_B, temp9, r, tempDac, flagmod, AD_MAX, Gyro.AD_Slow, Gyro.CuruAngle, Gyro.TermLM, Gyro.PLC_Lern );//выдаем в терминал для постройки граффика регулировки периметра. WriteCon(Time); // Gyro.CuruAngle = 0; }