fork

Dependencies:   mbed

Fork of LG by igor Apu

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