![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
fork
Fork of LG by
Diff: vibro.c
- Revision:
- 192:d32c8cf7bcd9
- Parent:
- 191:40028201ddad
- Child:
- 193:a0fe8bfc97e4
--- a/vibro.c Mon Aug 29 11:58:52 2016 +0000 +++ b/vibro.c Thu Sep 01 08:23:30 2016 +0000 @@ -1,7 +1,6 @@ #include "Global.h" GyroT Gyro; GyroParam GyroP; - volatile unsigned int Cheng_AMP_Flag=0; //int reper=0; int Rate2VibFlag,countA=0,tempDP; @@ -61,7 +60,8 @@ } tempDP=Gyro.AmpPerDel; srand(Global_Time);//инициализация функции rand() для получения новых случайных велечин. - Gyro.AmpPerDel = (rand() % Gyro.AmpTD+Gyro.AmpMin);// ОШУМЛЕНИЕ amp + if(Gyro.flag==1) Gyro.AmpPerDel = 1; + else Gyro.AmpPerDel = (rand() % Gyro.AmpTD+Gyro.AmpMin);// ОШУМЛЕНИЕ amp } switch( Gyro.StrayHZ_flag) { @@ -73,23 +73,20 @@ LPC_TIM1->MR0 =(unsigned int)((103000000/(Gyro.Frq>>11))+ Gyro.StrayHZ);//запись в таймер нового значение частоты вибро + ошибка. break; } -}/* +} void OLDCalcAmpN(void)//расчет точек старта и стопа импульса вибропривода и расчет частоты ошумления. { - unsigned int OldMaxAmp=0; - static int PeriodCount = 0; - unsigned int Nmax=0; - Gyro.AmpSC = OldMaxAmp - Gyro.MaxAmp; - OldMaxAmp=Gyro.MaxAmp; - + static int PeriodCount; + unsigned int Nmax; + //расчет амплитуды относительно центральной точки - if(Gyro.MaxAmp >= Gyro.AmpT) { //если количество заходов в прерывание больше либо равно частоте ошумления. + if(PeriodCount >= Gyro.AmpT) { //если количество заходов в прерывание больше либо равно частоте ошумления. PeriodCount=0;//сбрасываем таймер if (Cheng_AMP_Flag==0) { //сейчас малая амплитуда? - if ((Gyro.AmpPer+Gyro.AmpPerDel)> Gyro.AmpPerMax) {Gyro.AmpPer= Gyro.AmpPerMax - Gyro.AmpPerDel;} //проверка верхней граници амплитуды + /* if ((Gyro.AmpPer+Gyro.AmpPerDel)> Gyro.AmpPerMax) {Gyro.AmpPer= Gyro.AmpPerMax - Gyro.AmpPerDel;} //проверка верхней граници амплитуды else if((Gyro.AmpPer+Gyro.AmpPerDel)< Gyro.AmpPerMin) {Gyro.AmpPer= Gyro.AmpPerMin + Gyro.AmpPerDel;} //проверка нижней граници амплитуды - + */ 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); //правая граница амплитуды @@ -98,8 +95,8 @@ } else { - if ((Gyro.AmpPer+Gyro.AmpPerDel)> Gyro.AmpPerMax) {Gyro.AmpPer= Gyro.AmpPerMax - Gyro.AmpPerDel;} //проверка верхней граници амплитуды - else if((Gyro.AmpPer+Gyro.AmpPerDel)< Gyro.AmpPerMin) {Gyro.AmpPer= Gyro.AmpPerMin + Gyro.AmpPerDel;} //проверка нижней граници амплитуды + /* if ((Gyro.AmpPer+Gyro.AmpPerDel)> Gyro.AmpPerMax) {Gyro.AmpPer= Gyro.AmpPerMax - Gyro.AmpPerDel;} //проверка верхней граници амплитуды + else if((Gyro.AmpPer+Gyro.AmpPerDel)< Gyro.AmpPerMin) {Gyro.AmpPer= Gyro.AmpPerMin + Gyro.AmpPerDel;} //проверка нижней граници амплитуды*/ Nmax = (unsigned int)((100000/(Gyro.Frq>>16))-1); Gyro.AmpN1=(unsigned int)((Nmax*(100-Gyro.AmpPer+Gyro.AmpPerDel))/(Gyro.Frq>>16));//левая граница амплитуды @@ -121,7 +118,7 @@ LPC_TIM1->MR0 =(unsigned int)((103000000/(Gyro.Frq>>11))+ Gyro.StrayHZ);//запись в таймер нового значение частоты вибро + ошибка. break; } -}*/ +} void VibroAMPRegul(void) //подстройка амплитуды ВП { Gyro.CaunPlus = CaunAddPlus;//амплитуда по модулю из востановленного синиуса Buff_Restored_sin @@ -186,7 +183,23 @@ if (Gyro.ADS_NewData == 1) {Gyro.ADS_NewData = 0; if(Gyro.ModJump == 3){ShowMod();} else {PlcRegul();}} // был приход новых данных После Медленного фильтра AD (гдето раз в 0.63 секунды )//регулировка периметра. if (Gyro.VibroFrqRegulF == 1) {Gyro.VibroFrqRegulF = 0; VibroFrqRegul(); } // Регулеровка частоты виброподвеса if (Gyro.VibroAMPRegulF == 1) {Gyro.VibroAMPRegulF = 0; VibroAMPRegul(); } // Регулеровка Амплитуды виброподвеса - if (Gyro.VibroNoiseF == 1) {Gyro.VibroNoiseF = 0; CalcAmpN(); } // регулеровка ошумления, наверно нужно объеденить с регулеровкой ампитуды + if (Gyro.VibroNoiseF == 1) + { + if(Gyro.flag==2) + { + Gyro.AmpPerDel=2; + Gyro.AmpMin=20000; + Gyro.AmpTD=100; + OLDCalcAmpN(); + } + else + { + Gyro.AmpMin =2; + Gyro.AmpTD =6; + Gyro.VibroNoiseF = 0; + CalcAmpN(); + } + } // регулеровка ошумления, наверно нужно объеденить с регулеровкой ампитуды if (Gyro.VibroOutF == 1) {Gyro.VibroOutF = 0; VibroOut(); } // установка ног в регисторе тоже подумать , зачем отделный флаг? наверно }