![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
forkd
Fork of LG2 by
Diff: SPI.c
- Revision:
- 158:0c8342e1837a
- Parent:
- 157:1069c80f4944
- Child:
- 159:38f39c0c143f
--- a/SPI.c Tue May 10 14:11:25 2016 +0000 +++ b/SPI.c Wed May 11 14:04:57 2016 +0000 @@ -4,7 +4,7 @@ unsigned int Temp_AMP64P; int ttt = 0; - +float TimPlc=0; unsigned int Count_AMP, ADD_AMP, Cur_Amp; int Znak_Amp; int AD_Regul = 0; @@ -17,6 +17,7 @@ unsigned int Temp_ADC_4; unsigned int Temp_ADC_5; unsigned int TempA; +unsigned int TempTermLM; unsigned int Buff_ADC_1 [32]; unsigned int Buff_ADC_2 [32]; @@ -45,9 +46,10 @@ Gyro.In2 = Spi.ADC3; Gyro.DeltaT = Spi.ADC4; TempA = (0x7fff - Spi.ADC5) << 1; // перевернем знак и умножим на два (было 32000...0 стало 0 ...64000) - + TempTermLM = /*(0x7fff -*/ Spi.ADC1/*) << 1*/; Gyro.ADF_Accum += TempA; Gyro.ADS_Accum += TempA; + Gyro.ADS_AccumTermLM+=TempTermLM; Gyro.ADF_Count ++; Gyro.ADS_Count ++; @@ -59,9 +61,12 @@ } if (Gyro.ADS_Count > 255) { // если прошло 256 тактов виброподвеса Gyro.AD_Slow = Gyro.ADS_Accum << 8; //обновляем данные и приводим в один масштаб + Gyro.TermLM = Gyro.ADS_AccumTermLM << 3; Gyro.ADS_Count = 0; Gyro.ADS_Accum = 0; + Gyro.ADS_AccumTermLM=0; Gyro.ADS_NewData = 1; + } } @@ -100,31 +105,24 @@ - - -/* - if ( Gyro.PLC_Delta > ( 100 * 65536)) k=256; - else if ( Gyro.PLC_Delta < (-100 * 65536)) k=256; - - else if ( Gyro.PLC_Delta > ( 55 * 65536)) k=64; - else if ( Gyro.PLC_Delta < (-55 * 65536)) k=64; - - else if ( Gyro.PLC_Delta > ( 40 * 65536)) k=30; - else if ( Gyro.PLC_Delta < (-40 * 65536)) k=30; - - else if ( Gyro.PLC_Delta > ( 25 * 65536)) k=20; - else if ( Gyro.PLC_Delta < (-25 * 65536)) k=20; - - else if ( Gyro.PLC_Delta > ( 15*65536)) k=16; - else if ( Gyro.PLC_Delta < (-15*65536)) k=16; - - else if ( Gyro.PLC_Delta > ( 5*65536)) k=12; - else if ( Gyro.PLC_Delta < (-5*65536)) k=12; - - else if ( Gyro.PLC_Delta > ( 2*65536)) k=6; - else if ( Gyro.PLC_Delta < (-2*65536)) k=6; - */ - +void ShowMod(void) +{ + + ////////////////////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////смотрим все моды///////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////////////////////////////////// + if( (Gyro.PLC_Lern<1092)&&(Gyro.PLC_Error2Mode != 0))//пробигаем по нескольким значениям цап(60*0х3с=0хВВ8) для определения максимальной амплитуды. + { + + Gyro.PLC_Error2Mode--; + Gyro.PLC_Lern++; + Spi.DAC_B += 0x3c; + if(AD_MAX < Gyro.AD_Slow) AD_MAX = Gyro.AD_Slow; + sprintf((Time),"%d %d %d %d \r\n",Gyro.TermLM,Spi.DAC_B, Gyro.AD_Slow, AD_MAX); + WriteCon(Time); + TimPlc+=0.63; + } +} @@ -140,32 +138,19 @@ // 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; //приращение с учетом знака (и количества) прошлого приращения Gyro.PLC_Old = PLC_In; // запоминание значения - Gyro.PlC_MaxD=(unsigned int)(AD_MAX-Gyro.AD_Slow); //ищем разницу между желаемой и действительной амплитудами. ** - /* - ////////////////////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////смотрим все моды///////////////////////////////////////////////// - /////////////////////////////////////////////////////////////////////////////////////////////////// - if( (Gyro.PLC_Lern<1011)&&(Gyro.PLC_Error2Mode != 0))//пробигаем по нескольким значениям цап(60*0х3с=0хВВ8) для определения максимальной амплитуды. - { - //if(AD_MAX < Gyro.AD_Slow) {AD_MAX = Gyro.AD_Slow;} - ttt=1; - Gyro.PLC_Lern++; - Spi.DAC_B += 0x3c; - if(AD_MAX < Gyro.AD_Slow) AD_MAX = Gyro.AD_Slow; - sprintf((Time),"%d %d %d \r\n", Spi.DAC_B, Gyro.AD_Slow, AD_MAX); - WriteCon(Time); - } - - /////////////////////////////////////////////////////////////////////////////////////////////////// - /////////////////////////////////////////////////////////////////////////////////////////////////// - - */ - // 3600 (размер моды порядка 3000) + + + + + + // 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; //если максимальная амплитуда меньше текущей записываем новую максимальную амплитуду. * @@ -175,8 +160,10 @@ if(AD_MAX < Gyro.AD_Slow) { AD_MAX = Gyro.AD_Slow; l=0; }//обновление максимального значения амплитуды обнуление счетчика малого понижения амплитуды. * - else l++; //инкрементируем счетчик малого понижения желаемой амплитуды (максимальной замеченной) - + else l++; + //инкрементируем счетчик малого понижения желаемой амплитуды (максимальной замеченной) + Gyro.PlC_MaxD=(unsigned int)(AD_MAX-Gyro.AD_Slow); //ищем разницу между желаемой и действительной амплитудами. + //ели небыло обновления максимальной амплитуды инкрементируем счетчика малого понижения амплитуды. if((l>50)&&(Gyro.PLC_Lern>59)) { AD_MAX -= 3107200; l=0; } //если счетчик малого понижения амплитуды больше 100(аммплитуда не обновлялась 100 раз).