![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
forkd
Fork of LGstaandart by
QEI.c
- Committer:
- Kovalev_D
- Date:
- 2016-03-29
- Revision:
- 98:95b8e79f13e1
- Parent:
- 92:c892f0311aa7
- Child:
- 105:bd01d8d20fb6
File content as of revision 98:95b8e79f13e1:
#include "Global.h" int CuruAngle ; int Dif_QEI; int FFF=0;//для заплатки int Pulse_8Point; int Pulse_16Point; int Pulse_32Point; int Pulse_16PointD; unsigned int Iras=0,Temp_F_ras=0; int yy = 0; 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] = /*(unsigned int)*/ (Dif_QEI /* + 0xffff*/ );// накопление в буфер еденичных значений приращения по каждому такту. //////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////////// if (LPC_QEI->STAT) { //e. "+" direction //r. стали вращаться в "+" сторону Gyro.Cnt_Mns = Dif_QEI; } else { Gyro.Cnt_Pls = -Dif_QEI; } ////////// ???? Заплатка ////////// ???? Проблема начального заполнения буферов ////////////////////////////////////////////////////////////////////////////////////////////// if(1)// if(FFF==1) { // если прошло 32 такта вибро подвеса начать заполнять остальные буверы. { Pulse_8Point += Buff_1Point[CountV255]; Pulse_8Point -= Buff_1Point[(CountV255-8) & 0xff]; // заполнение буфера накопленых приращений за 8 тактов Buff_8Point[CountV31] = /*(unsigned int)*/ (Pulse_8Point/* + 0xffff*/); Pulse_16Point += Buff_1Point[CountV255]; Pulse_16Point -= Buff_1Point[(CountV255-16) & 0xff]; // заполнение буфера накопленых приращений за 16 тактов Buff_16Point[CountV31] = /*(unsigned int)*/ (Pulse_16Point /*+ 0xffff*/); 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*/); 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] = /*(unsigned int)*/ (Pulse_16PointD /*+ 0xffff*/); Buff_Restored_sin [CountV31]= /*(unsigned int)*/( Buff_16PointD [ CountV31] /*+ 65536 */ - 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 (CountV31 == 0) { // если определеный так, то переписываем амиплитуду Gyro.F_ras = Temp_F_ras; Temp_F_ras = 0; } } else if(CountV255 == 255) { FFF=1;//временная заплатка для паузы перед заполнением остальных буферов // for (yy = 0; yy < 31; yy++ ) { /// Buff_1Point [yy] = 0x00; // Buff_16Point [yy] = 0x00; // Buff_32Point [yy] = 0x00; // Buff_16PointD [yy] = 0x0; // } } }