Dmitry Kovalev
/
LGstaandart
forkd
Fork of LG2 by
QEI.c
- Committer:
- Kovalev_D
- Date:
- 2016-04-04
- Revision:
- 112:4a96133a1311
- Parent:
- 108:030cdde08314
- Child:
- 169:140743e3bb96
File content as of revision 112:4a96133a1311:
#include "Global.h" int Dif_QEI; int FFF=0;//для заплатки int Pulse_8Point; int Pulse_16Point; int Pulse_32Point; int Pulse_16PointD; int CaunAddPlus =0;//счетчик ипульсов энкодера"+" за такт ВП int CaunAddMin =0;//счетчик ипульсов энкодера"-" за такт ВП int unsigned Cur_QEI, Last_QEI; //текушее и предыдущее,(единичное) значение энкодера 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]; 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 ; // накопление в буфер еденичных значений приращения по каждому такту. ////////////////////////////////////////////////////////////////////////////////////////////// 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 тактов Gyro.Cnt_Dif = (Pulse_32Point); 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] ; if((Buff_Restored_sin [CountV31]) > 0) CaunAddPlus += Buff_Restored_sin [CountV31]; else CaunAddMin -= (Buff_Restored_sin [CountV31]); // расчет амплитуды Gyro.CuruAngle += Buff_32Point [CountV31]; }