![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
forkd
Fork of LGstaandart by
Diff: vibro.c
- Revision:
- 202:c03b7b128e11
- Parent:
- 201:76f4123bf22a
diff -r 76f4123bf22a -r c03b7b128e11 vibro.c --- a/vibro.c Wed Nov 02 14:05:24 2016 +0000 +++ b/vibro.c Fri Nov 18 06:07:37 2016 +0000 @@ -15,100 +15,232 @@ // CMD_Delta_Bins(); } +void OLDCalcAmpN(void)//расчет точек старта и стопа импульса вибропривода и расчет частоты ошумления. +{ + static int PeriodCount = 0; + unsigned int Nmax=0; -void VibroOut(void) // выставка ног вибро + //расчет амплитуды относительно центральной точки + if(PeriodCount>= Gyro.AmpT) { //если количество заходов в прерывание больше либо равно частоте ошумления. + PeriodCount=0;//сбрасываем таймер + + if (Cheng_AMP_Flag==0) { //сейчас малая амплитуда? + if((Gyro.AmpPer+Gyro.AmpPerDel)>90) { + Gyro.AmpPer=90-Gyro.AmpPerDel; //проверка верхней граници амплитуды + } + Nmax =(unsigned int)((100000/(Gyro.Frq>>16))-1); // + Gyro.AmpN1=(unsigned int)((Nmax*(100-Gyro.AmpPer))/Gyro.FrqHZ); //левая граница амплитуды + Gyro.AmpN2=(unsigned int)((Nmax/2)-Gyro.AmpN1); //правая граница амплитуды + Cheng_AMP_Flag=1; + + } + + else { + if((Gyro.AmpPer+Gyro.AmpPerDel)>90) { + Gyro.AmpPer=90-Gyro.AmpPerDel; //проверка верхней граници амплитуды + } + + Nmax =(unsigned int)((100000/(Gyro.Frq>>16))-1); + Gyro.AmpN1=(unsigned int)((Nmax*(100-Gyro.AmpPer+Gyro.AmpPerDel))/Gyro.FrqHZ);//левая граница амплитуды + Gyro.AmpN2=(unsigned int)((Nmax/2)-Gyro.AmpN1); //правая граница амплитуды + Cheng_AMP_Flag=0; + + } + srand(Global_Time);//инициализация функции rand() для получения новых случайных велечин. + Gyro.AmpT = (rand() % Gyro.AmpTD+Gyro.AmpMin);// ОШУМЛЕНИЕ amp + + } else { + PeriodCount++;//таймер амплитуды + } + +LPC_TIM1->MR0 =(unsigned int)(100000000/((Gyro.Frq)>>11));//запись в таймер нового значение частоты вибро +} + +void OLD_CalcAmpN(void)//расчет точек старта и стопа импульса вибропривода и расчет частоты ошумления. { - if(CountV31>=16) - {//первая нога вибро - // левая граница вЫкл вибро 1 > Time_vibro <ПРАВАЯ граница вЫкл вибро 1 - if((Time_vibro>Gyro.AmpN1) && (Time_vibro<Gyro.AmpN2)) - { - Gyro.PinReg &= ~PinRegBit_1V;//установить в регистре PinReg бит "вибро 1" в "0" - } - else - { - Gyro.PinReg |= PinRegBit_1V;//установить в регистре PinReg бит "вибро 1" в "1" + static int PeriodCount = 0; + unsigned int Nmax=0,Nmid=0,Nper=0; + + //расчет амплитуды относительно центральной точки + if(PeriodCount>= Gyro.AmpT) { //если количество заходов в прерывание больше либо равно частоте ошумления. + PeriodCount=0;//сбрасываем таймер + + if (Cheng_AMP_Flag==0) { //сейчас малая амплитуда? + if((Gyro.AmpPer+Gyro.AmpPerDel)>90) { + Gyro.AmpPer=90-Gyro.AmpPerDel; //проверка верхней граници амплитуды + } + Nmax =(unsigned int)((100000/(Gyro.Frq>>16))-1); + Nmid=(unsigned int)(Nmax/2); + Nper=(unsigned int)((Nmax*Gyro.AmpPer)/200); + if(Nper<1)Nper=1; + + Gyro.AmpN1=(unsigned int) (Nmid - Nper); + Gyro.AmpN2=(unsigned int) (Nmid + Nper); + + Cheng_AMP_Flag=1; + } + + else { + /* if((Gyro.AmpPer+Gyro.AmpPerDel)>90) { + Gyro.AmpPer=90-Gyro.AmpPerDel; //проверка верхней граници амплитуды + }*/ + + Nmax = (unsigned int)((100000/(Gyro.Frq>>16))-1); + Nmid = (unsigned int) (Nmax/2); + Nper = (unsigned int)((Nmax*(Gyro.AmpPer + Gyro.AmpPerDel))/200); + if(Nper<1)Nper=2; + + Gyro.AmpN1 =(unsigned int) (Nmid - Nper); + Gyro.AmpN2 =(unsigned int) (Nmid + Nper); + Cheng_AMP_Flag=0; + } + srand(Global_Time);//инициализация функции rand() для получения новых случайных велечин. + Gyro.AmpT = (rand() % Gyro.AmpTD+Gyro.AmpMin);// ОШУМЛЕНИЕ amp + + } else { + PeriodCount++;//таймер амплитуды + } + +LPC_TIM1->MR0 =(unsigned int)(100000000/((Gyro.Frq)>>11));//запись в таймер нового значение частоты вибро +} - } - else {//вторая нога вибро - if((Time_vibro>Gyro.AmpN1)&&(Time_vibro<Gyro.AmpN2)) - { - Gyro.PinReg &= ~PinRegBit_2V; //установить в регистре PinReg бит "вибро 2" в "0" - } - else - { - Gyro.PinReg |= PinRegBit_2V;//установить в регистре PinReg бит "вибро 2" в "1" - } +void VibroAMPRegul(void) //подстройка амплитуды ВП +{ + Gyro.CaunPlus = CaunAddPlus;//амплитуда по модулю из востановленного синиуса Buff_Restored_sin + CaunAddPlus = 0; + Gyro.CaunMin = CaunAddMin; //амплитуда по модулю из востановленного синиуса Buff_Restored_sin + CaunAddMin = 0; + Gyro.MaxAmp = Gyro.CaunPlus + Gyro.CaunMin; //расчет максимальной амплитуды из востановленного синуса р-р. + if(Gyro.RgConA&0x20) { + Gyro.Amp -= (Gyro.MaxAmp - Gyro.AmpTarget) * Gyro.AmpSpeed; // расчет амплитуды ВП с учетом разници + 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>>15; //приведение амплитуды ВП к виду 0%-100% + sprintf((Time),"%d %d %d \r\n",Gyro.AmpN1,Gyro.AmpN2,Gyro.AmpPer);//выдаем в терминал для постройки граффика регулировки периметра. + WriteCon(Time); } } +void VibroFrqRegul(void)// расчет Фазы с учетор разници(подстройка частоты) +{ + static int TempFaza, CountFaza; + TempFaza = -4; + for (CountFaza = 0; CountFaza <8; CountFaza++ ) {if (Buff_Restored_sin [(CountV31 -12 + CountFaza) & 0xff] > 0 ) TempFaza++;} //резонанс когда CountV31 = 8 => Buff_Restored_sin = 0 + if(Gyro.RgConA&0x40) {Gyro.Frq += TempFaza*Gyro.FrqChengSpeed;} + + if (Gyro.Frq < Gyro.FrqHZmin) Gyro.Frq=Gyro.FrqHZmin;//нижнее ограничение частоты + else if(Gyro.Frq > Gyro.FrqHZmax) Gyro.Frq=Gyro.FrqHZmax;//верхнее ограничение частоты +} + +////////////////////////////////////////////////////////////////////////////// +/////////////////////////основного 32 тактного цикла////////////////////////// +////////////////////////////////////////////////////////////////////////////// +void cheng(void) +{ + switch(CountV31) { + case 0: Gyro.VibroAMPRegulF=1; Time_vibro=0; Gyro.VibroNoiseF=1; break; //расчет и установка нового заначения частоты ошумления и запись в таймер частоты ошумления. + case 16: Gyro.Reper_Event=1; Time_vibro=0; Gyro.VibroFrqRegulF=1; break; + } +} +void AllRegul (void) +{ ///////////////////////////контуры регулировки///////////////////////////// + + 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; + + }/// был приход новых данных После Медленного фильтра AD (гдето раз в 0.63 секунды )//регулировка периметра. + + + + if (Gyro.VibroFrqRegulF == 1) {Gyro.VibroFrqRegulF = 0; VibroFrqRegul(); } // Регулеровка частоты виброподвеса + if (Gyro.VibroAMPRegulF == 1) {Gyro.VibroAMPRegulF = 0; VibroAMPRegul(); } // Регулеровка Амплитуды виброподвеса + if (Gyro.VibroNoiseF == 1) + { + 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();} // установка ног в регисторе тоже подумать , зачем отделный флаг? наверно +} + -void Calc2AmpN(void)//расчет точек старта и стопа импульса вибропривода и расчет частоты ошумления. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +void CalcAmpI(void)//расчет точек старта и стопа импульса вибропривода и расчет частоты ошумления. { Gyro.AmpSC=0; - static int PeriodCount = 0; + static int PeriodCount = 0 ; unsigned int Nmax=0; - Gyro.AmpSC = Gyro.MaxAmp - OldMaxAmp ; - if(Gyro.AmpSC<0) Gyro.AmpSC=Gyro.AmpSC*(-1); - OldMaxAmp=Gyro.MaxAmp; + Gyro.AmpSC = Gyro.MaxAmp - OldMaxAmp ; + if(Gyro.AmpSC<0) Gyro.AmpSC=Gyro.AmpSC*(-1); + OldMaxAmp=Gyro.MaxAmp; - if(Gyro.AmpSC <55)countA++; - if(countA >2) - { - countA=0; - srand(Global_Time); - if(Cheng_AMP_Flag) - { - Cheng_AMP_Flag=0; - Gyro.AmpPerDel = (rand() % Gyro.AmpTD+Gyro.AmpMin);// ОШУМЛЕНИЕ amp - Nmax = (unsigned int)((100000/(Gyro.Frq>>16))-1); - Gyro.AmpN1=(unsigned int)((Nmax*(100-Gyro.AmpPer+Gyro.AmpPerDel))/(Gyro.Frq>>16)); //левая граница амплитуды - Gyro.AmpN2=(unsigned int)((Nmax/2)-Gyro.AmpN1); //правая граница амплитуды - } - else - { - Cheng_AMP_Flag=1; - Nmax = (unsigned int)((100000/(Gyro.Frq>>16))-1); - Gyro.AmpN1=(unsigned int)((Nmax*(100-Gyro.AmpPer))/(Gyro.Frq>>16)); //левая граница амплитуды - Gyro.AmpN2=(unsigned int)((Nmax/2)-Gyro.AmpN1); //правая граница амплитуды - } - } //8046 - - LPC_TIM1->MR0 =(unsigned int)(103000000/((Gyro.Frq)>>11));//запись в таймер нового значение частоты вибро -} - -void CalcAmpN(void)//расчет точек старта и стопа импульса вибропривода и расчет частоты ошумления. -{ - Gyro.AmpSC=0; - static int PeriodCount = 0; - unsigned int Nmax=0; - Gyro.AmpSC = Gyro.MaxAmp - OldMaxAmp; - if(Gyro.AmpSC<0) Gyro.AmpSC=Gyro.AmpSC*(-1); - OldMaxAmp=Gyro.MaxAmp; - - if(Gyro.AmpSC <5)countA++; - if(countA >3) - { - countA=0; + countA++; + if( Gyro.AmpSC<60) + { + // countA=0; Nmax = (unsigned int)((100000/(Gyro.Frq>>16))-1); Gyro.AmpN1=(unsigned int)((Nmax*(100-Gyro.AmpPer+Gyro.AmpPerDel))/(Gyro.Frq>>16)); //левая граница амплитуды Gyro.AmpN2=(unsigned int)((Nmax/2)-Gyro.AmpN1); //правая граница амплитуды Cheng_AMP_Flag=1; - tempDP=Gyro.AmpPerDel; - srand(Global_Time);//инициализация функции rand() для получения новых случайных велечин. - if(Gyro.flag==1) Gyro.AmpPerDel = 1; - else Gyro.AmpPerDel = (rand() % Gyro.AmpTD+Gyro.AmpMin);// ОШУМЛЕНИЕ amp + // tempDP=Gyro.AmpPerDel; + // srand(Global_Time);//инициализация функции rand() для получения новых случайных велечин. + if(Gyro.flag==1) Gyro.AmpPerDel = 1; + + switch(Znak) { + case 0: + Gyro.AmpPerDel--; + if (Gyro.AmpPerDel<1)Znak=1; + break; + + case 1: + Gyro.AmpPerDel++; + if (Gyro.AmpPerDel>13)Znak=0; + break; + } + } //8046 - LPC_TIM1->MR0 =(unsigned int)(103000000/((Gyro.Frq)>>11));//запись в таймер нового значение частоты вибро } - - void CalcAmpD(void) { unsigned int Nmax=0; @@ -172,199 +304,67 @@ - - -void CalcAmpI(void)//расчет точек старта и стопа импульса вибропривода и расчет частоты ошумления. +void CalcAmpN(void)//расчет точек старта и стопа импульса вибропривода и расчет частоты ошумления. { Gyro.AmpSC=0; - static int PeriodCount = 0 ; + static int PeriodCount = 0; unsigned int Nmax=0; - Gyro.AmpSC = Gyro.MaxAmp - OldMaxAmp ; - if(Gyro.AmpSC<0) Gyro.AmpSC=Gyro.AmpSC*(-1); - OldMaxAmp=Gyro.MaxAmp; + Gyro.AmpSC = Gyro.MaxAmp - OldMaxAmp; + if(Gyro.AmpSC<0) Gyro.AmpSC=Gyro.AmpSC*(-1); + OldMaxAmp=Gyro.MaxAmp; - countA++; - if( Gyro.AmpSC<60) - { - // countA=0; + if(Gyro.AmpSC <5)countA++; + if(countA >3) + { + countA=0; Nmax = (unsigned int)((100000/(Gyro.Frq>>16))-1); Gyro.AmpN1=(unsigned int)((Nmax*(100-Gyro.AmpPer+Gyro.AmpPerDel))/(Gyro.Frq>>16)); //левая граница амплитуды Gyro.AmpN2=(unsigned int)((Nmax/2)-Gyro.AmpN1); //правая граница амплитуды Cheng_AMP_Flag=1; - // tempDP=Gyro.AmpPerDel; - // srand(Global_Time);//инициализация функции rand() для получения новых случайных велечин. - if(Gyro.flag==1) Gyro.AmpPerDel = 1; - - switch(Znak) { - case 0: - Gyro.AmpPerDel--; - if (Gyro.AmpPerDel<1)Znak=1; - break; + tempDP=Gyro.AmpPerDel; + srand(Global_Time);//инициализация функции rand() для получения новых случайных велечин. + if(Gyro.flag==1) Gyro.AmpPerDel = 1; + else Gyro.AmpPerDel = (rand() % Gyro.AmpTD+Gyro.AmpMin);// ОШУМЛЕНИЕ amp + } //8046 - case 1: - Gyro.AmpPerDel++; - if (Gyro.AmpPerDel>13)Znak=0; - break; - } - - } //8046 LPC_TIM1->MR0 =(unsigned int)(103000000/((Gyro.Frq)>>11));//запись в таймер нового значение частоты вибро } -void OLDCalcAmpN(void)//расчет точек старта и стопа импульса вибропривода и расчет частоты ошумления. +void Calc2AmpN(void)//расчет точек старта и стопа импульса вибропривода и расчет частоты ошумления. { + Gyro.AmpSC=0; static int PeriodCount = 0; unsigned int Nmax=0; - - //расчет амплитуды относительно центральной точки - if(PeriodCount>= Gyro.AmpT) { //если количество заходов в прерывание больше либо равно частоте ошумления. - PeriodCount=0;//сбрасываем таймер - - if (Cheng_AMP_Flag==0) { //сейчас малая амплитуда? - if((Gyro.AmpPer+Gyro.AmpPerDel)>90) { - Gyro.AmpPer=90-Gyro.AmpPerDel; //проверка верхней граници амплитуды - } - Nmax =(unsigned int)((100000/(Gyro.Frq>>16))-1); // - Gyro.AmpN1=(unsigned int)((Nmax*(100-Gyro.AmpPer))/Gyro.FrqHZ); //левая граница амплитуды - Gyro.AmpN2=(unsigned int)((Nmax/2)-Gyro.AmpN1); //правая граница амплитуды - Cheng_AMP_Flag=1; - - } - - else { - if((Gyro.AmpPer+Gyro.AmpPerDel)>90) { - Gyro.AmpPer=90-Gyro.AmpPerDel; //проверка верхней граници амплитуды - } - - Nmax =(unsigned int)((100000/(Gyro.Frq>>16))-1); - Gyro.AmpN1=(unsigned int)((Nmax*(100-Gyro.AmpPer+Gyro.AmpPerDel))/Gyro.FrqHZ);//левая граница амплитуды - Gyro.AmpN2=(unsigned int)((Nmax/2)-Gyro.AmpN1); //правая граница амплитуды - Cheng_AMP_Flag=0; - + Gyro.AmpSC = Gyro.MaxAmp - OldMaxAmp ; + if(Gyro.AmpSC<0) Gyro.AmpSC=Gyro.AmpSC*(-1); + OldMaxAmp=Gyro.MaxAmp; + + if(Gyro.AmpSC <55)countA++; + if(countA >2) + { + countA=0; + srand(Global_Time); + if(Cheng_AMP_Flag) + { + Cheng_AMP_Flag=0; + Gyro.AmpPerDel = (rand() % Gyro.AmpTD+Gyro.AmpMin);// ОШУМЛЕНИЕ amp + Nmax = (unsigned int)((100000/(Gyro.Frq>>16))-1); + Gyro.AmpN1=(unsigned int)((Nmax*(100-Gyro.AmpPer+Gyro.AmpPerDel))/(Gyro.Frq>>16)); //левая граница амплитуды + Gyro.AmpN2=(unsigned int)((Nmax/2)-Gyro.AmpN1); //правая граница амплитуды } - srand(Global_Time);//инициализация функции rand() для получения новых случайных велечин. - Gyro.AmpT = (rand() % Gyro.AmpTD+Gyro.AmpMin);// ОШУМЛЕНИЕ amp - - } else { - PeriodCount++;//таймер амплитуды - } - -LPC_TIM1->MR0 =(unsigned int)(100000000/((Gyro.Frq)>>11));//запись в таймер нового значение частоты вибро -} -void VibroAMPRegul(void) //подстройка амплитуды ВП -{ - Gyro.CaunPlus = CaunAddPlus;//амплитуда по модулю из востановленного синиуса Buff_Restored_sin - CaunAddPlus = 0; - Gyro.CaunMin = CaunAddMin; //амплитуда по модулю из востановленного синиуса Buff_Restored_sin - CaunAddMin = 0; - Gyro.MaxAmp = Gyro.CaunPlus + Gyro.CaunMin; //расчет максимальной амплитуды из востановленного синуса р-р. - Gyro.Amp -= (Gyro.MaxAmp - Gyro.AmpTarget) * Gyro.AmpSpeed; // расчет амплитуды ВП с учетом разници - /*if((Gyro.Amp>>16) > Gyro.AmpPerMax) {Gyro.Amp = (Gyro.AmpPerMax << 16);} // временное ограничение роста амплитуды ВП в случае неподоженного гироскопа////////// - if((Gyro.Amp>>16) < Gyro.AmpPerMin) {Gyro.Amp = (Gyro.AmpPerMin << 16);} */ // временное ограничение роста амплитуды ВП в случае неподоженного гироскопа////////// - if(Gyro.RgConA&0x20) {Gyro.AmpPer = Gyro.Amp>>15;} //приведение амплитуды ВП к виду 0%-100% - - -} - - - -void VibroFrqRegul(void)// расчет Фазы с учетор разници(подстройка частоты) -{ - static int TempFaza, CountFaza; - TempFaza = -4; - for (CountFaza = 0; CountFaza <8; CountFaza++ ) {if (Buff_Restored_sin [(CountV31 -12 + CountFaza) & 0xff] > 0 ) TempFaza++;} //резонанс когда CountV31 = 8 => Buff_Restored_sin = 0 - if(Gyro.RgConA&0x40) {Gyro.Frq += TempFaza*Gyro.FrqChengSpeed;} - - if (Gyro.Frq < Gyro.FrqHZmin) Gyro.Frq=Gyro.FrqHZmin;//нижнее ограничение частоты - else if(Gyro.Frq > Gyro.FrqHZmax) Gyro.Frq=Gyro.FrqHZmax;//верхнее ограничение частоты + else + { + Cheng_AMP_Flag=1; + Nmax = (unsigned int)((100000/(Gyro.Frq>>16))-1); + Gyro.AmpN1=(unsigned int)((Nmax*(100-Gyro.AmpPer))/(Gyro.Frq>>16)); //левая граница амплитуды + Gyro.AmpN2=(unsigned int)((Nmax/2)-Gyro.AmpN1); //правая граница амплитуды + } + } //8046 + + LPC_TIM1->MR0 =(unsigned int)(103000000/((Gyro.Frq)>>11));//запись в таймер нового значение частоты вибро } -////////////////////////////////////////////////////////////////////////////// -/////////////////////////основного 32 тактного цикла////////////////////////// -////////////////////////////////////////////////////////////////////////////// -void cheng(void) -{ - switch(CountV31) { - case 0: - - Gyro.VibroAMPRegulF=1; - Time_vibro=0; - Gyro.VibroNoiseF=1;//расчет и установка нового заначения частоты ошумления и запись в таймер частоты ошумления. - - break; - - case 16: - - Gyro.Reper_Event=1; - Time_vibro=0; - Gyro.VibroFrqRegulF=1; // - break; - - case 31: - /* for (int i = 0; i < 32; i++ ) - { - Gyro.CuruAngle += Buff_32Point [i]; - Gyro.tempdelta += (Buff_Restored_sin[i]); - Gyro.tempdelta2 += (Buff_Restored_sin2[i]) - } - */ - if(Gyro.LogHZ) - { - sprintf((Time),"%d %d %d\r\n",ADCDIF,(ADCDIF>>5),(ADCDIF>>10)); - WriteCon(Time); - ADCDIF=0; - Gyro.CuruAngle=0; - Gyro.tempdelta=0; - Gyro.tempdelta2=0; - } /* - if(Gyro.ModJump==2) { ///прыжок с моды на моду. (-->) - Gyro.ModJump=0; - Spi.DAC_B += 4300; - Gyro.PLC_Error2Mode=1; - } - - if(Gyro.ModJump==1) { ///прыжок с моды на моду. (<--) - Gyro.OldCuruAngle=Gyro.CuruAngle; - Gyro.ModJump=0; - Spi.DAC_B -= 5900; - Gyro.PLC_Error2Mode=1; - } - - break;*/ - } -} -void AllRegul (void) -{ ///////////////////////////контуры регулировки///////////////////////////// - - 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 (Gyro.VibroNoiseF == 1) - { - 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();} // установка ног в регисторе тоже подумать , зачем отделный флаг? наверно -}