Dmitry Kovalev
/
LGstaandart
forkd
Fork of LG2 by
Diff: vibro.c
- Revision:
- 203:3a6615de9581
- Parent:
- 197:7a05523bf588
- Child:
- 204:e7e9762bf609
diff -r 7a05523bf588 -r 3a6615de9581 vibro.c --- a/vibro.c Wed Oct 19 10:55:05 2016 +0000 +++ b/vibro.c Fri Nov 18 14:06:22 2016 +0000 @@ -23,22 +23,22 @@ // левая граница вЫкл вибро 1 > Time_vibro <ПРАВАЯ граница вЫкл вибро 1 if((Time_vibro>Gyro.AmpN1) && (Time_vibro<Gyro.AmpN2)) { - Gyro.PinReg &= ~PinRegBit_1V;//установить в регистре PinReg бит "вибро 1" в "0" + SetV1//установить в регистре PinReg бит "вибро 1" в "0" } else { - Gyro.PinReg |= PinRegBit_1V;//установить в регистре PinReg бит "вибро 1" в "1" + ClrV1 //установить в регистре PinReg бит "вибро 1" в "1" } } else {//вторая нога вибро if((Time_vibro>Gyro.AmpN1)&&(Time_vibro<Gyro.AmpN2)) { - Gyro.PinReg &= ~PinRegBit_2V; //установить в регистре PinReg бит "вибро 2" в "0" + SetV2 //установить в регистре PinReg бит "вибро 2" в "0" } else { - Gyro.PinReg |= PinRegBit_2V;//установить в регистре PinReg бит "вибро 2" в "1" + ClrV2//установить в регистре PinReg бит "вибро 2" в "1" } } } @@ -218,7 +218,7 @@ void OLDCalcAmpN(void)//расчет точек старта и стопа импульса вибропривода и расчет частоты ошумления. { static int PeriodCount = 0; - unsigned int Nmax=0; + unsigned int Nmax=0, lowper; //расчет амплитуды относительно центральной точки if(PeriodCount>= Gyro.AmpT) { //если количество заходов в прерывание больше либо равно частоте ошумления. @@ -229,8 +229,15 @@ Gyro.AmpPer=90-Gyro.AmpPerDel; //проверка верхней граници амплитуды } Nmax =(unsigned int)((100000/(Gyro.Frq>>16))-1); // - Gyro.AmpN1=(unsigned int)((Nmax*(100-Gyro.AmpPer))/Gyro.FrqHZ); //левая граница амплитуды + Gyro.AmpN1=(unsigned int)((Nmax*(100-Gyro.AmpPer))/Gyro.FrqHZ); //левая граница амплитуды Gyro.AmpN2=(unsigned int)((Nmax/2)-Gyro.AmpN1); //правая граница амплитуды + if(Gyro.AmpPer<6) + { + lowper = Gyro.AmpN2-Gyro.AmpN1; + lowper=lowper/2; + Gyro.AmpN2= Gyro.AmpN2+lowper; + } + // Gyro.AmpN2=Gyro.AmpN1+2; Cheng_AMP_Flag=1; } @@ -243,9 +250,18 @@ 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); //правая граница амплитуды + if(Gyro.AmpPer<6) + { + lowper = Gyro.AmpN2-Gyro.AmpN1; + lowper=lowper/2; + Gyro.AmpN2= Gyro.AmpN2+lowper+1; + } + // Gyro.AmpN2=Gyro.AmpN1+2; Cheng_AMP_Flag=0; } + /* sprintf((Time),"%d %d %d %d\r\n", Gyro.AmpPer, Nmax, Gyro.AmpN1, Gyro.AmpN2 );//выдаем в терминал для постройки граффика регулировки периметра. + WriteCon(Time);*/ srand(Global_Time);//инициализация функции rand() для получения новых случайных велечин. Gyro.AmpT = (rand() % Gyro.AmpTD+Gyro.AmpMin);// ОШУМЛЕНИЕ amp @@ -366,5 +382,5 @@ case 3: Gyro.AmpMin =1;Gyro.AmpTD =10;Gyro.VibroNoiseF = 0;CalcAmpD(); break; } } // регулеровка ошумления, наверно нужно объеденить с регулеровкой ампитуды - if (Gyro.VibroOutF == 1) {Gyro.VibroOutF = 0; VibroOut();} // установка ног в регисторе тоже подумать , зачем отделный флаг? наверно + //if (Gyro.VibroOutF == 1) {Gyro.VibroOutF = 0; VibroOut();} // установка ног в регисторе тоже подумать , зачем отделный флаг? наверно }