![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
forkd
Fork of LG2 by
Diff: QEI.c
- Revision:
- 87:7e575d26d6d0
- Parent:
- 86:398da56ef751
- Child:
- 92:c892f0311aa7
--- a/QEI.c Thu Mar 24 08:20:43 2016 +0000 +++ b/QEI.c Thu Mar 24 09:16:55 2016 +0000 @@ -31,94 +31,8 @@ int unsigned Cur_QEI, Last_QEI; - - - - - - // ДАВАЙ попробуем сделать буфера в целых (знаковы) - -void D_QEI_Int(void) -{ - - Cur_QEI = LPC_QEI->POS & 0xFFFF; // считывание текущего значения энкодера. - Dif_QEI = (Cur_QEI - Last_QEI); // получение приращения.() - Last_QEI = Cur_QEI; // запись текущего значения энкодера в регистр предыдущего значения. - - if (Dif_QEI < -0xfff) Dif_QEI += 0x10000; // обработка прохода значения через ноль - if (Dif_QEI > 0xfff) Dif_QEI -= 0x10000; // обработка прохода значения через ноль - - - Buff_1Point[CountV255] = Dif_QEI;// накопление в буфер еденичных значений приращения по каждому такту. - - //////////////////////////////////////////////////////////////////////////////////////////// - /////////////////////////////////////////////////////////////////////////////////////////// - -// зачем это. мож к этому воремени стали вращатся назад - - if (LPC_QEI->STAT) { //e. "+" direction //r. стали вращаться в "+" - Gyro.Cnt_Mns = Dif_QEI; - } else { - Gyro.Cnt_Pls = -Dif_QEI; - } - - -// внимание , все расчеты в знаковых целых - - - ////////// ???? Заплатка - ////////// ???? Проблема начального заполнения буферов - ////////////////////////////////////////////////////////////////////////////////////////////// - // если прошло 32 такта вибро подвеса начать заполнять остальные буверы. - Pulse_8Point += Buff_1Point[CountV255]; - Pulse_8Point -= Buff_1Point[(CountV255-8) & 0xff]; // заполнение буфера накопленых приращений за 8 тактов - Buff_8Point[CountV31] =Pulse_8Point; - - Pulse_16Point += Buff_1Point[CountV255]; - Pulse_16Point -= Buff_1Point[(CountV255-16) & 0xff]; // заполнение буфера накопленых приращений за 16 тактов - Buff_16Point[CountV31] = Pulse_16Point; - - Pulse_32Point += Buff_1Point[CountV255]; - Pulse_32Point -= Buff_1Point[(CountV255-32) & 0xff]; // заполнение буфера накопленых приращений за 32 тактов - Buff_32Point[CountV31] = Pulse_32Point; - - Pulse_16PointD += Buff_1Point[CountV255]; - Pulse_16PointD -= Buff_1Point[(CountV255-16) & 0xff]; // заполнение буфера накопленых приращений за 16 тактов Двойныз - Pulse_16PointD += Buff_1Point[(CountV255-32) & 0xff]; // - Pulse_16PointD -= Buff_1Point[(CountV255-48) & 0xff]; // з - Buff_16PointD[CountV31] = Pulse_16PointD; - Buff_Restored_sin [CountV31]= Buff_16PointD [ CountV31] - Buff_32Point[CountV31]; //Востанавливаем синус (для работы вибропривода) - - Gyro.Cnt_Dif = (Pulse_32Point); - - if(Buff_Restored_sin [CountV31] > 0) - Temp_F_ras += Buff_Restored_sin [CountV31]; - else Temp_F_ras -= Buff_Restored_sin [CountV31]; // расчет амплитуды - - if (CountV31 == 0) { // если определеный так, то переписываем амиплитуду - Gyro.F_ras = Temp_F_ras; - Temp_F_ras = 0; - } -// зачем это. - - - - /* if(Buff_32Point[CountV255]>0) { - Temp_F_ras += Buff_32Point[CountV255]; - } else if ((CountV255 & 0x1f)==0) { - Gyro.F_ras=Temp_F_ras; - Temp_F_ras=0; - } else { - Temp_F_ras -= Buff_32Point[CountV255]; - } - -*/ -} - - - void D_QEI(void) { Dif_QEI=0; @@ -165,23 +79,19 @@ Buff_16PointD[CountV255] = /*(unsigned int)*/ (Pulse_16PointD /*+ 0xffff*/); - -// Buff_Restored_sin [CountVf]= (unsigned int)( ((Buff_16Point[CountVf]*2)) - Buff_32Point[CountVf] ); - Buff_Restored_sin [CountV255]= /*(unsigned int)*/( Buff_16PointD [ CountV255] /*+ 65536 */ - Buff_32Point[CountV255] ); - if(Buff_32Point[CountV255]>0) { - Temp_F_ras += Buff_32Point[CountV255]; - } else if ((CountV255 & 0x1f)==0) { - Gyro.F_ras=Temp_F_ras; - Temp_F_ras=0; - } else { - Temp_F_ras -= Buff_32Point[CountV255]; - } + if(Buff_Restored_sin [CountV31] > 0) + Temp_F_ras += Buff_Restored_sin [CountV31]; + else Temp_F_ras -= Buff_Restored_sin [CountV31]; // расчет амплитуды - //unsigned int T_Vib; + if (CountV31 == 0) { // если определеный так, то переписываем амиплитуду + Gyro.F_ras = Temp_F_ras; + Temp_F_ras = 0; + } + } else if(CountV255 == 255) { FFF=1;//временная заплатка для паузы перед заполнением остальных буферов