![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
fork
Fork of LG by
Diff: QEI.c
- Revision:
- 112:4a96133a1311
- Parent:
- 108:030cdde08314
- Child:
- 169:140743e3bb96
--- a/QEI.c Mon Apr 04 03:21:25 2016 +0000 +++ b/QEI.c Mon Apr 04 11:09:56 2016 +0000 @@ -13,76 +13,44 @@ int Pulse_16Point; int Pulse_32Point; int Pulse_16PointD; -int Iras=0,Temp_F_ras=0; -int CaunAddPlus =0; -int CaunAddMin =0; - -int CaunPlus =0; -int CaunMin =0; +int CaunAddPlus =0;//счетчик ипульсов энкодера"+" за такт ВП +int CaunAddMin =0;//счетчик ипульсов энкодера"-" за такт ВП - - +int unsigned Cur_QEI, Last_QEI; //текушее и предыдущее,(единичное) значение энкодера -int yy = 0; - - - - +int Buff_1Point [256]; // этот на 256 int Buff_32Point [32]; int Buff_16Point [32]; int Buff_16PointD [32]; int Buff_8Point [32]; int Buff_Restored_sin [32]; -int Buff_1Point [256]; // этот на 256 - - - -int unsigned Cur_QEI, Last_QEI; - -// ДАВАЙ попробуем сделать буфера в целых (знаковы) -/*__irq void QEI_IRQHandler (void) -{ - Cur_QEI = LPC_QEI->POS & 0xFFFF; //e. read accumulated value of counter - LPC_QEI->CLR = 0x1fff; //e. reset interrupt request //r. сбросить запрос прерывания -}*/ - void D_QEI(void) { Dif_QEI=0; 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 -= Cur_QEI; - } else { - Gyro.Cnt_Pls = Cur_QEI; - } -*/ - ////////// ???? Заплатка - ////////// ???? Проблема начального заполнения буферов + ////////////////////////////////////////////////////////////////////////////////////////////// Pulse_8Point += Buff_1Point[CountV255]; Pulse_8Point -= Buff_1Point[(CountV255-8) & 0xff]; // заполнение буфера накопленых приращений за 8 тактов - Buff_8Point[CountV31] = /*(unsigned int)*/ (Pulse_8Point/* + 0xffff*/); + Buff_8Point[CountV31] = (Pulse_8Point); Pulse_16Point += Buff_1Point[CountV255]; Pulse_16Point -= Buff_1Point[(CountV255-16) & 0xff]; // заполнение буфера накопленых приращений за 16 тактов - Buff_16Point[CountV31] = /*(unsigned int)*/ (Pulse_16Point /*+ 0xffff*/); + Buff_16Point[CountV31] = (Pulse_16Point ); Pulse_32Point += Buff_1Point[CountV255]; Pulse_32Point -= Buff_1Point[(CountV255-32) & 0xff]; // заполнение буфера накопленых приращений за 32 тактов - Gyro.Cnt_Dif = (Pulse_32Point/*+ 0xffff*/); - Buff_32Point[CountV31] = /*(unsigned int)*/ (Pulse_32Point /*+ 0xffff*/); + Gyro.Cnt_Dif = (Pulse_32Point); + Buff_32Point[CountV31] = (Pulse_32Point ); Pulse_16PointD += Buff_1Point[CountV255]; Pulse_16PointD -= Buff_1Point[(CountV255-16) & 0xff]; // заполнение буфера накопленых приращений за 16 тактов Двойныз @@ -94,11 +62,10 @@ Buff_Restored_sin [CountV31]= Buff_16PointD [ CountV31] - Buff_32Point[CountV31] ; - // if(Buff_Restored_sin [CountV31] > 0)Temp_F_ras += Buff_Restored_sin [CountV31]; - // else Temp_F_ras -= Buff_Restored_sin [CountV31]; // расчет амплитуды + if((Buff_Restored_sin [CountV31]) > 0) CaunAddPlus += Buff_Restored_sin [CountV31]; else CaunAddMin -= (Buff_Restored_sin [CountV31]); // расчет амплитуды - + Gyro.CuruAngle += Buff_32Point [CountV31]; }