Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of LG2 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)