fork

Dependencies:   mbed

Fork of LG by igor Apu

QEI.c

Committer:
Kovalev_D
Date:
2016-06-08
Revision:
170:d099c3025f87
Parent:
169:140743e3bb96
Child:
179:2b4e6bc277df

File content as of revision 170:d099c3025f87:

#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];
}