Dmitry Kovalev
/
LGfiltr
forkd
Fork of LGstaandart by
Diff: vibro.c
- Revision:
- 211:ac8251b067d2
- Parent:
- 210:b02fa166315d
- Child:
- 214:4c70e452c491
diff -r b02fa166315d -r ac8251b067d2 vibro.c --- a/vibro.c Mon Apr 24 05:43:54 2017 +0000 +++ b/vibro.c Mon Jul 03 05:50:08 2017 +0000 @@ -55,7 +55,7 @@ PeriodCount=0;//сбрасываем таймер /* sprintf((Time),"%d %d %d\r\n", Gyro.AmpN1, Gyro.AmpN2-Gyro.AmpN1, Gyro.AmpPer); WriteCon(Time);*/ - + //Gyro.AmpPerDel=(Gyro.AmpPer*100)/Gyro.AmpPerDel; if(Cheng_AMP_Flag==0) { if((Gyro.AmpPer+Gyro.AmpPerDel)>90) @@ -100,7 +100,7 @@ { int temp=0; - + int LowDZ,HiDZ; Gyro.CaunPlus = CaunAddPlus;//амплитуда по модулю из востановленного синиуса Buff_Restored_sin // Gyro.CaunPlus = Gyro.CaunPlusReper; CaunAddPlus = 0; @@ -117,8 +117,8 @@ } else { - sprintf((Time)," %d %d %d\r\n",Gyro.F_ras, Gyro.MaxAmp, Gyro.AmpTarget/((Gyro.Frq)>>16)); - WriteCon(Time); + /* sprintf((Time)," %d %d %d\r\n",Gyro.F_ras, Gyro.MaxAmp, Gyro.AmpTarget/((Gyro.Frq)>>16)); + WriteCon(Time);*/ Gyro.F_rasAdd += Gyro.MaxAmp/32*Gyro.FrqHZ/40; Gyro.F_ras=Gyro.F_rasAdd>>8; Gyro.F_rasAdd=0; @@ -131,7 +131,18 @@ //расчет максимальной амплитуды из востановленного синуса р-р. temp=(int)(((Gyro.MaxAmp -Gyro.AmpTarget/((Gyro.Frq)>>16)) * Gyro.AmpSpeed)); temp=temp>>6; - Gyro.Amp -= temp; // расчет амплитуды ВП с учетом разници + LowDZ = ((Gyro.AmpSpeed<<3)*(-1)); + HiDZ = (Gyro.AmpSpeed<<3); + if((temp<LowDZ)||(temp>HiDZ)) + { /* sprintf((Time)," %d %d\r\n",Gyro.MaxAmp, temp); + WriteCon(Time);*/ + Gyro.Amp -= temp; // расчет амплитуды ВП с учетом разници + } + else { + /* sprintf((Time),"not regul\r\n"); + WriteCon(Time); + */ + } if((Gyro.Amp>>16) > Gyro.AmpPerMax) {Gyro.Amp = (Gyro.AmpPerMax << 16);} // временное ограничение роста амплитуды ВП в случае неподоженного гироскопа////////// if((Gyro.Amp>>16) < Gyro.AmpPerMin) {Gyro.Amp = (Gyro.AmpPerMin << 16);} // временное ограничение роста амплитуды ВП в случае неподоженного гироскопа////////// Gyro.AmpPer = Gyro.Amp>>16; //приведение амплитуды ВП к виду 0%-100% @@ -181,35 +192,23 @@ if (Spi.ADC_NewData == 1) {ADS_Acum(); } // был приход новых данных по ацп сдесь сделать обработку информации и подготовку для выдачи делается 1 раз за вибро if (Gyro.ADF_NewData == 1) {Gyro.ADF_NewData = 0; } // был приход новых данных После быстрого фильтра AD - - - - /*if (Gyro.ADS_NewData == 1) - { Gyro.ADS_NewData = 0; - switch(Gyro.LogPLC) { - case 0: PlcRegul(); break; - case 1: PlcRegul(); break; - case 2: ShowMod(); break; - } - }*/// был приход новых данных После Медленного фильтра AD (гдето раз в 0.63 секунды )//регулировка периметра. - - - if (Gyro.VibroFrqRegulF == 1) {Gyro.VibroFrqRegulF = 0; VibroFrqRegul(); } // Регулеровка частоты виброподвеса if (Gyro.VibroAMPRegulF == 1) { Gyro.VibroAMPRegulF = 0; VibroAMPRegul(); - if(!MODFlag)PLCRegul(); + if( Gyro.LG_Type==0) + { + if(!MODFlag)PLCRegul(); + } + if(Gyro.LG_Type==1) + { + switch(Gyro.PLCDelay) { + case 0:PLCRegul();break; + } + HFORegul(); + } } // Регулеровка Амплитуды виброподвеса if (Gyro.VibroNoiseF == 1) {Gyro.VibroNoiseF = 0; OLDCalcAmpN();} - /* { - switch(Gyro.flag) { - case 1: Gyro.VibroNoiseF = 0; OLDCalcAmpN(); break; - case 2: Gyro.AmpMin =3;Gyro.AmpTD =10;Gyro.VibroNoiseF = 0;Calc2AmpN(); break; - case 3: Gyro.AmpMin =1;Gyro.AmpTD =10;Gyro.VibroNoiseF = 0;CalcAmpD(); break; - } - } */// регулеровка ошумления, наверно нужно объеденить с регулеровкой ампитуды - //if (Gyro.VibroOutF == 1) {Gyro.VibroOutF = 0; VibroOut();} // установка ног в регисторе тоже подумать , зачем отделный флаг? наверно }