![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
forkd
Fork of LGstaandart by
Diff: vibro.c
- Revision:
- 214:4c70e452c491
- Parent:
- 211:ac8251b067d2
- Child:
- 215:b58b887fd367
--- a/vibro.c Wed Jul 26 13:24:39 2017 +0000 +++ b/vibro.c Wed Aug 16 09:00:25 2017 +0000 @@ -43,7 +43,7 @@ } } } - +/* void OLDCalcAmpN(void)//расчет точек старта и стопа импульса вибропривода и расчет частоты ошумления. { @@ -53,21 +53,18 @@ if(PeriodCount>= Gyro.AmpT) { //если количество заходов в прерывание больше либо равно частоте ошумления. PeriodCount=0;//сбрасываем таймер - /* sprintf((Time),"%d %d %d\r\n", Gyro.AmpN1, Gyro.AmpN2-Gyro.AmpN1, Gyro.AmpPer); - WriteCon(Time);*/ + 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) - { - Gyro.AmpPer=90-Gyro.AmpPerDel; //проверка верхней граници амплитуды - } //26214400 + if((Gyro.AmpPer+Gyro.AmpPerDel)>90) Gyro.AmpPer=90-Gyro.AmpPerDel; //проверка верхней граници амплитуды Nmax = (unsigned int)((100000/(Gyro.Frq>>16))-1);//256 // Gyro.AmpN1=(unsigned int)((Nmax*(100-Gyro.AmpPer))/Gyro.FrqHZ); //левая граница амплитуды 63 Gyro.AmpN2=(unsigned int)((Nmax/2)-Gyro.AmpN1); //правая граница амплитуды 65 Gyro.L_vibro=Gyro.AmpPer*208; - /* sprintf((Time),"%d %d %d \r\n",Gyro.L_vibro,Gyro.AmpPer,Cheng_AMP_Flag); - WriteCon(Time);*/ + sprintf((Time),"%d %d %d \r\n",Gyro.L_vibro,Gyro.AmpPer,Cheng_AMP_Flag); + WriteCon(Time); Cheng_AMP_Flag=1; } else @@ -79,8 +76,8 @@ Gyro.AmpN1=(unsigned int)((Nmax*(100-Gyro.AmpPer-Gyro.AmpPerDel))/Gyro.FrqHZ); //левая граница амплитуды 61 Gyro.AmpN2=(unsigned int)((Nmax/2)-Gyro.AmpN1); //правая граница амплитуды 67 Gyro.L_vibro=(Gyro.AmpPer+Gyro.AmpPerDel)*208; - /*sprintf((Time),"%d %d %d \r\n",Gyro.L_vibro,Gyro.AmpPer,Cheng_AMP_Flag); - WriteCon(Time); */ + sprintf((Time),"%d %d %d \r\n",Gyro.L_vibro,Gyro.AmpPer,Cheng_AMP_Flag); + WriteCon(Time); } Cheng_AMP_Flag=0; } @@ -88,11 +85,42 @@ srand(Global_Time);//инициализация функции rand() для получения новых случайных велечин. Gyro.AmpT = (rand() % Gyro.AmpTD+Gyro.AmpMin);// ОШУМЛЕНИЕ amp - // Gyro.L_vibro= ((Gyro.AmpN2-Gyro.AmpN1))*(16383/Nmax); - // Gyro.L_vibro=((16000 *(Gyro.AmpN2-Gyro.AmpN1))/(Nmax/2)); } else { PeriodCount++;//таймер амплитуды } +}*/ +void OLDCalcAmpN(void)//расчет точек старта и стопа импульса вибропривода и расчет частоты ошумления. +{ + static int PeriodCount = 0,Period=0; + unsigned int Nmax=0, lowper=1; + Gyro.FrqHZ=Gyro.Frq>>16; + if(PeriodCount>= Gyro.AmpT) + { + PeriodCount=0;//сбрасываем таймер + if(Cheng_AMP_Flag==0) + { + //if((Gyro.AmpPer+Gyro.AmpPerDel*100)>9000) Gyro.AmpPer=9000-Gyro.AmpPerDel*100; //проверка верхней граници амплитуды + T_vib_1 = Gyro.AmpPer * T_vibP; + T_vib_2 = T_vibP * (10000-Gyro.AmpPer); + Gyro.L_vibro=Gyro.AmpPer*3; + Cheng_AMP_Flag=1; + } + else + { + //if((Gyro.AmpPer+Gyro.AmpPerDel*100)>9000) Gyro.AmpPer=9000-Gyro.AmpPerDel*100; //проверка верхней граници амплитуды + if((Gyro.RgConA&0x20)) + { + T_vib_1 = T_vibP * (Gyro.AmpPer +(Gyro.AmpPerDel*100)); + T_vib_2 = T_vibP * (10000 -(Gyro.AmpPer+(Gyro.AmpPerDel*100))); + Gyro.L_vibro=(Gyro.AmpPer+Gyro.AmpPerDel)*3; + } + Cheng_AMP_Flag=0; + } + + srand(Global_Time);//инициализация функции rand() для получения новых случайных велечин. + Gyro.AmpT = (rand() % Gyro.AmpTD+Gyro.AmpMin);// ОШУМЛЕНИЕ amp + } + else {PeriodCount++;} } @@ -117,36 +145,26 @@ } else { - /* 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_ras=Gyro.F_rasAdd>>9; Gyro.F_rasAdd=0; countFras=0; } - - if(Gyro.RgConA&0x20) { //расчет максимальной амплитуды из востановленного синуса р-р. - temp=(int)(((Gyro.MaxAmp -Gyro.AmpTarget/((Gyro.Frq)>>16)) * Gyro.AmpSpeed)); + temp=(int)(((Gyro.MaxAmp - Gyro.AmpTarget*2/((Gyro.Frq)>>16)) * Gyro.AmpSpeed)); temp=temp>>6; 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% + Gyro.Amp -= temp; // расчет амплитуды ВП с учетом разници + 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% } + + LPC_MCPWM->MAT1 = T_vib_1; + LPC_MCPWM->MAT2 = T_vib_2; } @@ -164,8 +182,9 @@ } // Gyro.FrqPhaseEror = TempFaza<<10; if (Gyro.Frq < Gyro.FrqHZmin) Gyro.Frq=Gyro.FrqHZmin;//нижнее ограничение частоты - else if(Gyro.Frq > Gyro.FrqHZmax) Gyro.Frq=Gyro.FrqHZmax;//верхнее ограничение частоты - LPC_TIM1->MR0 =(unsigned int)(103000000/((Gyro.Frq)>>11));//запись в таймер нового значение частоты вибро + else if(Gyro.Frq > Gyro.FrqHZmax) Gyro.Frq=Gyro.FrqHZmax;//верхнее ограничение частоты*/ + LPC_TIM1->MR0 =(unsigned int)(103200000/(Gyro.Frq>>11));//запись в таймер нового значение частоты вибро + // LPC_TIM1->MR0 =(unsigned int) F_vib; } ////////////////////////////////////////////////////////////////////////////// @@ -175,16 +194,42 @@ { switch(CountV31) { case 0: + BackLightON + BackLightON + BackLightON + ReVib();///обновление значений вибро Gyro.VibroAMPRegulF=1; Time_vibro=0; - Gyro.VibroNoiseF++;//расчет и установка нового заначения частоты ошумления и запись в таймер частоты ошумления. + Gyro.VibroNoiseF++;//расчет и установка нового заначения частоты ошумления и запись в таймер частоты ошумления. + BackLightOFF + BackLightOFF + BackLightOFF break; - + case 8: + BackLightON + + LPC_MCPWM->CON_CLR |= (1<<8); + LPC_MCPWM->CON_CLR |= (1<<16); + + LPC_MCPWM->TC1 =1; + LPC_MCPWM->TC2 =1; + + LPC_MCPWM->CON_SET |= (1<<8); + LPC_MCPWM->CON_SET |= (1<<16); //вкл + + BackLightOFF + break; + case 16: // Gyro.Reper_Event=1; Time_vibro=0; Gyro.VibroFrqRegulF=1; // break; + + case 31: + // Gyro.Reper_Event=1; + //LPC_MCPWM->LIM0=0; + break; } } void AllRegul (void)