![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
fork
Fork of LG by
Diff: QEI.c
- Revision:
- 193:a0fe8bfc97e4
- Parent:
- 192:d32c8cf7bcd9
- Child:
- 194:8f3cb37a5541
--- a/QEI.c Thu Sep 01 08:23:30 2016 +0000 +++ b/QEI.c Thu Sep 15 11:09:00 2016 +0000 @@ -8,6 +8,7 @@ int FFF=0;//для заплатки +int tempdelta; int Pulse_8Point; int Pulse_16Point; @@ -19,9 +20,9 @@ int unsigned Cur_QEI, Last_QEI; //текушее и предыдущее,(единичное) значение энкодера -int Buff_1Point [256]; +int Buff_1Point [512]; int Buff_32Point [32]; -//int Buff_64Point [32]; +int Buff_64Point [32]; int Buff_16Point [32]; int Buff_16PointD [32]; int Buff_8Point [32]; @@ -31,13 +32,15 @@ { 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]; @@ -53,11 +56,11 @@ Gyro.Cnt_Dif = (Pulse_32Point); Buff_32Point[CountV31] = (Pulse_32Point ); -/* Pulse_64Point += Buff_1Point[CountV255]; - Pulse_64Point -= Buff_1Point[(CountV255-64) & 0xff]; // заполнение буфера накопленых приращений за два 32 тактов + Pulse_64Point += Buff_1Point[CountV255]; + Pulse_64Point -= Buff_1Point[(CountV255-32) & 0xff]; // заполнение буфера накопленых приращений за два 32 тактов Gyro.Cnt_Dif = (Pulse_64Point); Buff_64Point[CountV31] = (Pulse_64Point ); -*/ + Pulse_16PointD += Buff_1Point[CountV255]; Pulse_16PointD -= Buff_1Point[(CountV255-16) & 0xff]; // заполнение буфера накопленых приращений за 16 тактов Двойныз @@ -65,10 +68,38 @@ Pulse_16PointD -= Buff_1Point[(CountV255-48) & 0xff]; // Buff_16PointD[CountV31] = Pulse_16PointD ; - - + /*Gyro.AmpSC = Gyro.MaxAmp - OldMaxAmp ; + if(Gyro.AmpSC<0) Gyro.AmpSC=Gyro.AmpSC*(-1);*/ +//QEIznak; 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]; //счетчик отрицательных импульсов // расчет амплитуды + if((Buff_Restored_sin [CountV31]) > 0) + { + CaunAddPlus += Buff_Restored_sin [CountV31]; + if(Gyro.QEIznak2) + { + //Gyro.Reper_Event=1; + Gyro.QEIznak2=0; + } + + } // счетчик положительных импульсов + else {CaunAddMin -= Buff_Restored_sin [CountV31]; Gyro.QEIznak2=1;} //счетчик отрицательных импульсов // расчет амплитуды Gyro.CuruAngle += Buff_32Point [CountV31]; + Gyro.tempdelta += Buff_Restored_sin[CountV31]; + } +void CurAngle(void) +{ + for (int i = 0; i < 32; i++ ) + { + Gyro.tempdelta += Buff_Restored_sin[i]; + Gyro.CuruAngle += Buff_32Point[i]; + } +} +void CurAngleLOG(void) +{ + sprintf((Time)," %d %d \r\n", Gyro.tempdelta,Gyro.CuruAngle); + WriteCon(Time); + Gyro.CuruAngle=0; + Gyro.tempdelta=0; + } + \ No newline at end of file