![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
fork
Fork of LG by
Diff: QEI.c
- Revision:
- 43:3f7c8a0ea59c
- Parent:
- 42:6fc307c4963e
- Child:
- 45:cbc955aecebe
--- a/QEI.c Sun Feb 07 12:24:11 2016 +0000 +++ b/QEI.c Sun Feb 07 16:01:14 2016 +0000 @@ -29,13 +29,12 @@ */ -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 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 @@ -47,11 +46,11 @@ -// ДАВАЙ попробуем сделать бушера в целых (знаковы) +// ДАВАЙ попробуем сделать буфера в целых (знаковы) void D_QEI_Int(void) { - Cur_QEI = LPC_QEI->POS & 0xFFFF; // считывание текущего значения энкодера. + Cur_QEI = LPC_QEI->POS & 0xFFFF; // считывание текущего значения энкодера. Dif_QEI = (Cur_QEI - Last_QEI); // получение приращения.() Last_QEI = Cur_QEI; // запись текущего значения энкодера в регистр предыдущего значения. @@ -73,39 +72,43 @@ } +// внимание , все расчеты в знаковых целых + ////////// ???? Заплатка ////////// ???? Проблема начального заполнения буферов ////////////////////////////////////////////////////////////////////////////////////////////// // если прошло 32 такта вибро подвеса начать заполнять остальные буверы. Pulse_8Point += Buff_1Point[CountV255]; - Pulse_8Point -= Buff_1Point[(CountV255-8) & 0xff]; // заполнение буфера накопленых приращений за 8 тактов + 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 тактов + 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 тактов Buff_32Point[CountV31] = Pulse_32Point; - - - - Gyro.Cnt_Dif = (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]; //Востанавливаем синус (для работы вибропривода) - Buff_16PointD[CountV31] = Pulse_16PointD; - + Gyro.Cnt_Dif = (Pulse_32Point); -// Buff_Restored_sin [CountVf]= (unsigned int)( ((Buff_16Point[CountVf]*2)) - Buff_32Point[CountVf] ); + if(Buff_Restored_sin [CountV31] > 0) + Temp_F_ras += Buff_Restored_sin [CountV31]; + else Temp_F_ras -= Buff_Restored_sin [CountV31]; // расчет амплитуды - Buff_Restored_sin [CountV31]= Buff_16PointD [ CountV31] - Buff_32Point[CountV31]; + if (CountV31 == 0) { // если определеный так, то переписываем амиплитуду + Gyro.F_ras = Temp_F_ras; + Temp_F_ras = 0; + } +// зачем это. @@ -118,20 +121,11 @@ Temp_F_ras -= Buff_32Point[CountV255]; } - //unsigned int T_Vib; } - - - - - - - - void D_QEI(void) { Dif_QEI=0;