fork

Dependencies:   mbed

Fork of LG by igor Apu

Revision:
215:b58b887fd367
Parent:
214:4c70e452c491
Child:
216:189b0ea1dc38
--- a/SPI.c	Wed Aug 16 09:00:25 2017 +0000
+++ b/SPI.c	Tue Aug 29 06:33:08 2017 +0000
@@ -12,19 +12,16 @@
 int flagmod=0,Bdelta;
 int start=10;
 int dispersion=0,side=1,tempstrafe=15000;
-unsigned int Temp_ADC_2;
-unsigned int Temp_ADC_3;
-unsigned int Temp_ADC_4;
-unsigned int Temp_ADC_5;
 int ADC_5_T;
 unsigned int TempA;
 unsigned int TempTermLM;
 unsigned int conuntPLS;
 int ADC5Old,ADCDIF=0;
-int DACModReg;
+/*int DACModReg;*/
 int SinPls=0,SinMns=0;
 int TSinPls=0,TSinMns=0;
  int timer=750;
+int sum=0,znak=0;
  unsigned int testcount=0;
 unsigned int ADC5New;
 unsigned int Buff_ADC_1		[32];
@@ -35,45 +32,40 @@
 int RegulADC,DeltaRegul,tempDeltaRegul;
 
 
- int BuffADC_1Point		[255];
-unsigned int BuffADC_16Point	[64];
-int BuffADC_32Point	[64];		
-int BuffADC_64Point	[64];	
-unsigned int Buff_ADC_5		   [255];
-unsigned int BuffADC_testPoint	[64];
-int BuffADC_32PointD	[64];
+
+//int BuffADC_32Point	[64];		
 
-int Buff_Restored_Mod 	[64];
- int ADC_1Point;
- int ADC_32PointD;
- int ADC_64Point;
+//unsigned int Buff_ADC_5		   [255];
 
-unsigned int PulseADC_16Point;
-unsigned int PulseADC_32Point;
-unsigned int PulseADC_64Point;
-unsigned int PulseADC_32PointD;
+
 
 
-unsigned int Buff_AMP		[256];
-unsigned int Buff_AMP64P	[256];
+//unsigned int PulseADC_16Point;
+//unsigned int PulseADC_32Point;
+//unsigned int PulseADC_64Point;
+//unsigned int PulseADC_32PointD;
+
+
+//unsigned int Buff_AMP		[256];
+//unsigned int Buff_AMP64P	[256];
 unsigned int TypeMod=0;
 unsigned int ModArraySin	  [64] = {50,55,59,64,68,73,77,81,85,88,91,94,96,98,99,99,100,99,99,98,96,94,91,88,85,81,77,73,68,64,59,55,50,45,41,36,32,27,23,19,16,12,9,7,4,2,1,1,0,1,1,2,4,7,9,12,16,19,23,27,32,36,41,45};
-unsigned int ModArrayTriangle [64];
-unsigned int ModArraySaw	  [64];
+//unsigned int ModArrayTriangle [64];
+//unsigned int ModArraySaw	  [64];
 unsigned int Mod=0;                                           
 
 void InitMOD(void)
 {
      for (int i = 0; i < 64; i++ ) 
  	 { 
-   	 if(i<32)   { ModArrayTriangle[i]=Mod; Mod+=3;}
-   	 else       { ModArrayTriangle[i]=Mod; Mod-=3;}
+   	 /*if(i<32)   { ModArrayTriangle[i]=Mod; Mod+=3;}
+   	 else       { ModArrayTriangle[i]=Mod; Mod-=3;}*/
      }
     
      for (int i = 0; i < 16; i++ ) 
  	 { 
-      ModArraySaw[i]=Mod;
-      Mod+=1;
+     /* ModArraySaw[i]=Mod;
+      Mod+=1;*/
      }
 }
 void Modulator(void)
@@ -83,43 +75,70 @@
 	switch(TypeMod) 
 		{
 	    case 0: LPC_DAC->DACR = (ModArraySin		[(CountV64)&0x3f]*Gyro.ModAmp);    break;
-	    case 1: LPC_DAC->DACR = (ModArraySaw		[CountV64]*Gyro.ModAmp);  	break;
-	    case 2: LPC_DAC->DACR = (ModArrayTriangle	[(CountV64-2)&0x3f]*Gyro.ModAmp);  	break;
+	/*    case 1: LPC_DAC->DACR = (ModArraySaw		[CountV64]*Gyro.ModAmp);  	break;
+	    case 2: LPC_DAC->DACR = (ModArrayTriangle	[(CountV64-2)&0x3f]*Gyro.ModAmp);  	break;*/
 	    }
+	    
+	    
+         
+
+	 
 	}
 }
 void  PLCRegul(void)
 {	
     unsigned int temp, Temp_Dac_B=0,Side=0;
+
     static int  CountFaza; 	
     
 
-
-  // Temp_Dac_B=(0xffff-Spi.DAC_B);
-    if(conuntPLS<10)
-      {
-       /* for (CountFaza = 0;  CountFaza <16; CountFaza++)      	SinPls+=  BuffADC_64Point[ (CountFaza - Gyro.PLC_Phase)  & 0x3f];
-        for (CountFaza = 16; CountFaza <48; CountFaza++)		SinMns+=  BuffADC_64Point[ (CountFaza - Gyro.PLC_Phase)  & 0x3f];
-        for (CountFaza = 48; CountFaza <64; CountFaza++)		SinPls+=  BuffADC_64Point[ (CountFaza - Gyro.PLC_Phase)  & 0x3f];
-        conuntPLS++;*/
-      }
-  else
-      {
-       conuntPLS=0;
-       		Gyro.PLC_Eror = (SinMns-SinPls)>>16; 
-       		 /*sprintf((Time)," %d	%d		%d \r\n", SinMns,  SinPls,Gyro.PLC_Eror);
-             WriteCon(Time);*/
-            TSinPls= SinPls;
-      	    TSinMns=SinMns;
+    if(conuntPLS<30)
+    {
+  // Temp_Dac_B=(0xffff-Spi.DAC_B);Buff_Restored_Mod[CountV64] BuffADC_1Point[CountV255]
+     /*  if( (ModArraySin[(CountV64)&0x3f]-50)>0) znak=1;
+       else znak = -1;
+        for (CountFaza = 0;  CountFaza <32; CountFaza++)      	SinPls +=  ((Buff_Restored_Mod[ (CountFaza - Gyro.PLC_Phase)  & 0x3f]))>>5;
+        for (CountFaza = 32; CountFaza <64; CountFaza++)      	SinMns +=  ((Buff_Restored_Mod[ (CountFaza - Gyro.PLC_Phase)  & 0x3f]))>>5;*/
+       /* for (CountFaza = 0;  CountFaza <32; CountFaza++)        SinPls +=  (( BuffADC_1Point[ (CountFaza - Gyro.PLC_Phase)  & 0x3f]))>>5;
+        for (CountFaza = 32; CountFaza <64; CountFaza++)      	SinMns +=  (( BuffADC_1Point[ (CountFaza - Gyro.PLC_Phase)  & 0x3f]))>>5; */
+        /*for (CountFaza = 0; CountFaza <64; CountFaza++) 
+        {
+        	if(Buff_Restored_Mod[CountFaza]>0) SinPls+=(Buff_Restored_Mod[CountFaza])>>5;
+        	else SinMns+=(Buff_Restored_Mod[CountFaza])>>5;
+        	sum += (Buff_Restored_Mod[CountFaza])>>5;
+        }*/
+      
+        conuntPLS++;
+     }
+     else{
+       		
+       		TSinPls=SinPls;
+       	    TSinMns=SinMns;
+       		conuntPLS=0;
+       		Gyro.PLC_Eror = (TSinMns+TSinPls)>>5; 
+       	    sum+=Gyro.PLC_Eror ;
+            sprintf((Time)," %d     %d     %d      %d\r\n",  Buff_Restored_Mod[ (CountV64 - Gyro.PLC_Phase)  & 0x3f], Buff_Restored_Mod[ (CountV64 - Gyro.PLC_Phase+1)  & 0x3f],Buff_Restored_Mod[ (CountV64 - Gyro.PLC_Phase+2)  & 0x3f], Buff_Restored_Mod[ (CountV64 - Gyro.PLC_Phase+23)  & 0x3f]);
+            WriteCon(Time);
         	SinPls=0;
    			SinMns=0;
+   			
+   		
+   	
+		      /*	 if(Gyro.PLC_Eror>0) {Gyro.PLC_regul--;}
+		     	 else 			   	 {Gyro.PLC_regul++;}
+*/
+      	
       		if(Gyro.RgConA&0x8)
 				{
-		      	 if(Gyro.PLC_Eror>0) {Spi.DAC_B-=Gyro.PLC_Eror*Gyro.PLC_Gain;}
-		      	 else 				 {Spi.DAC_B+=Gyro.PLC_Eror*Gyro.PLC_Gain;}
+						Spi.DAC_B-=(Gyro.PLC_Eror>>4)*Gyro.PLC_Gain;
+		      	/* if(Gyro.PLC_Eror>0) {Spi.DAC_B+=Gyro.PLC_Eror*Gyro.PLC_Gain;}
+		      	 else 			   	 {Spi.DAC_B-=Gyro.PLC_Eror*Gyro.PLC_Gain;}*/
 		      	}
-		      	if(Gyro.PLC_Eror>0) {Gyro.PLC_Eror_count++;}
-     			else 				{Gyro.PLC_Eror_count--;}
+		      	
+		      	if(Gyro.PLC_Eror>0){ Gyro.PLC_Eror_count++;}
+     			else {Gyro.PLC_Eror_count--;}
+     			
+     		    Gyro.PLC_Eror=0;
      		
 	        if(Gyro.LG_Type==1)
        			{
@@ -127,13 +146,13 @@
       	    	  else if ( Spi.DAC_B > Gyro.DownTreshold ) Spi.DAC_B = (Gyro.ResetLevelCool);
       	    	
        	    	}
-       	   else
+       	    else
        	        {
-      			  if      ( Spi.DAC_B < 10300 )   Spi.DAC_B = 32000;            //проверка на переваливание за границу.  
+      			  if      ( Spi.DAC_B < 10300 )     Spi.DAC_B = 32000;            //проверка на переваливание за границу.  
       			  else if ( Spi.DAC_B > 57000 ) 	Spi.DAC_B = 32000;
       			}
+      }
      
-       }
 }
 
  
@@ -142,6 +161,12 @@
     unsigned int temp;
     static int  CountFaza; 	
     temp = MODCount;
+   
+       /* for (CountFaza = 0;  CountFaza <16; CountFaza++)      	SinPls+=  (Buff_Restored_Mod[ (CountFaza - Gyro.PLC_Phase)  & 0x3f]);
+        for (CountFaza = 16; CountFaza <32; CountFaza++)      	SinMns-=  (Buff_Restored_Mod[ (CountFaza - Gyro.PLC_Phase)  & 0x3f]);
+        for (CountFaza = 32; CountFaza <48; CountFaza++)		SinPls+=  (Buff_Restored_Mod[ (CountFaza - Gyro.PLC_Phase)  & 0x3f]);
+        for (CountFaza = 48; CountFaza <64; CountFaza++)      	SinMns-=  (Buff_Restored_Mod[ (CountFaza - Gyro.PLC_Phase)  & 0x3f]);*/
+  
      /*   for (CountFaza = 0; CountFaza <32; CountFaza++ )      	SinPls+=  BuffADC_64Point[ (CountFaza - Gyro.PLC_Phase)  & 0x3f];
         for (CountFaza = 32; CountFaza <64; CountFaza++)		SinMns+=  BuffADC_64Point[ (CountFaza - Gyro.PLC_Phase)  & 0x3f];*/
         Gyro.PLC_Eror = SinMns-SinPls; 
@@ -152,8 +177,8 @@
 		      if(Gyro.PLC_Eror>0) {Spi.DAC_B+=1 * Gyro.PLC_Gain;}
 		      else 				  {Spi.DAC_B-=1 * Gyro.PLC_Gain;}
 		    }  
-		if(Gyro.PLC_Eror>0) {Gyro.PLC_Eror_count++;}
-     	else 				{Gyro.PLC_Eror_count--;}
+	/*	if(Gyro.PLC_Eror>0) {Gyro.PLC_Eror_count++;}
+     	else 				{Gyro.PLC_Eror_count--;}*/
      
       	if      ( Spi.DAC_B < 10300 )   Spi.DAC_B = 32000;            //проверка на переваливание за границу.  
       	else if ( Spi.DAC_B > 57000 ) 	Spi.DAC_B = 32000;
@@ -202,7 +227,7 @@
     Gyro.IN1_Accum	+=  Spi.ADC2;
     Gyro.IN2_Accum	+=  Spi.ADC3;
    // Gyro.DeltaT = (unsigned int)(((Spi.ADC4>>1) +  Gyro.Tmp_OffsetT5) *  Gyro.Tmp_scaleT5);
-   Gyro.DeltaT = (unsigned int)(Spi.ADC4>>1);
+    Gyro.DeltaT = (unsigned int)(Spi.ADC4>>1);
  
     TempA = (0xffff - Spi.ADC5);  		// перевернем знак  и умножим на два (было 32000...0 стало 0 ...32000 /*сдвиг(<<1) стало 0 ...64000*/)
     Gyro.TermLM = Spi.ADC1; 
@@ -239,6 +264,7 @@
 }
 void SPI_Exchange(void)  // новая функция чтения, в нецй не должно быть ничего лишнего
 {
+   
     unsigned int DummySPI;
     //unsigned int ADC5Dif;
     ADC5New = LPC_SSP0->DR;// Чтение АЦП
@@ -269,25 +295,47 @@
         Spi.ADC_NewData = 1;
 
        }
-   
- 
-        BuffADC_1Point[CountV255]=(0x7fff-ADC5New);
+        if(Time1Hz>6)
+        {    
+        BuffADC_1Point[CountV255]=ADC5New;//(0x7fff-ADC5New)&0x7fff;
 
-        ADC_64Point += BuffADC_1Point[CountV255 ];
-        ADC_64Point -= BuffADC_1Point[(CountV255 - 64) & 0xff];  								// заполнение буфера накопленых приращений за 64 тактов
+        ADC_64Point += BuffADC_1Point[CountV255];
+        ADC_64Point -= BuffADC_1Point[(CountV255 - 64) & 0xff];						// заполнение буфера накопленых приращений за 64 тактов
         BuffADC_64Point[CountV64] = ADC_64Point;
+
+           
            
-        
+        ADC_32PointD += BuffADC_1Point[CountV255];  
         ADC_32PointD -= BuffADC_1Point[(CountV255 - 32) & 0xff]; 							// заполнение буфера накопленых приращений за 32 тактов
-        ADC_32PointD += BuffADC_1Point[CountV255];
+        ADC_32PointD += BuffADC_1Point[(CountV255 - 64) & 0xff];  
+        ADC_32PointD -= BuffADC_1Point[(CountV255 - 96) & 0xff]; 
         BuffADC_32PointD[CountV64] =  ADC_32PointD;
+
        
-        Buff_Restored_Mod[CountV64] = BuffADC_32PointD[CountV64]*2 -  BuffADC_64Point[CountV64];
-	
+        ADC_16Point += BuffADC_1Point[CountV255];  
+        ADC_16Point -= BuffADC_1Point[(CountV255 - 16) & 0xff];
+        BuffADC_16Point	[CountV64] =  ADC_16Point; 
+
+            
+        Buff_Restored_Mod[CountV64] =(int)(BuffADC_32PointD[CountV64] -  BuffADC_64Point[CountV64]);
+        
+        
+        
+       /* if( (ModArraySin[(CountV64)&0x3f]-50)>0) znak=1;
+        else znak = -1;*/
+        if (CountV64<32)      	SinPls +=  (Buff_Restored_Mod[ (CountV64 - Gyro.PLC_Phase)  & 0x3f]/*znak*/)>>5;
+        else  					SinMns +=  (Buff_Restored_Mod[ (CountV64 - Gyro.PLC_Phase)  & 0x3f]/*znak*/)>>5;
+        }
+      
+	      /*if(Gyro.LogMod)
+	      {
+	      	sprintf((Time),"%i\r\n", Buff_Restored_Mod[CountV64]);
+            WriteCon(Time);
+	      }*/
       
        
      // BuffADC_64Point[CountV64]=ADC5New;
-        Buff_ADC_5[CountV255] = (0x7fff-ADC5New)<<2;
+      //  Buff_ADC_5[CountV255] = (0x7fff-ADC5New)<<2;
    
         
 }