forkd

Dependencies:   mbed

Fork of LGstaandart by Dmitry Kovalev

Revision:
226:4a4d5bd5fcd7
Parent:
225:f8fee6c586cc
Child:
227:2774b56bfab0
--- a/SPI.c	Tue Dec 12 05:53:39 2017 +0000
+++ b/SPI.c	Tue Dec 26 05:14:09 2017 +0000
@@ -32,7 +32,7 @@
 int Buff_OUT1	[64];
 int Buff_OUT	[64];
 int RegulADC,DeltaRegul,tempDeltaRegul;
-int count10v=0,AmpWorms,MinWorms,MaxWorms,AMPSUM,AMPSUMP,AMPSUMM,AMPSUM_DESP,AMPSUMPout,AMPSUMMout,AMPSUMout,SumDelta,PLC_EROR,PLC_Flag,HFO_Flag,HFOdelta,HFOregul,HFOSumDelta;
+int count10HFO=0, count10v=0, AmpWorms,MinWorms,MaxWorms,AMPSUM,AMPSUMP,AMPSUMM,AMPSUM_DESP,AMPSUMPout,AMPSUMMout,AMPSUMout,SumDelta,PLC_EROR,PLC_Flag,HFO_Flag,HFOdelta,HFOregul,HFOSumDelta;
 
 
 //int BuffADC_32Point	[64];		
@@ -120,40 +120,7 @@
    		SinPls=0;
    		SinMns=0; 
 }
-          
-                
- 
-/* void  HFORegul2(void)
-{
-static unsigned int countHFO;
-	
-	 countHFO=0;
-	 if(Gyro.RgConA&0x2) 
-		 {
-		 	if(HFO_Flag)
-		 	{
- 	        DeltaRegul+=(Gyro.HFO_ref-(AMPSUM>>8));
-	        
-	        sprintf((Time),"%d  %d  %d\r\n", AMPSUM>>8, DeltaRegul, Gyro.HFO_ref);
-    	 	WriteCon(Time);
-    	 	HFO_Flag=0;
-    	 	AMPSUM=0;
-       		}
-            switch(DeltaRegul) {
-            case  1: DeltaRegul=0; break;
-            case -1: DeltaRegul=0; break;
-           }
-        	Spi.DAC_A-=(DeltaRegul>>2)*Gyro.HFO_Gain;
-        	DeltaRegul=0;
-		 }
- 	 else DeltaRegul=0;
-    if(Spi.DAC_A>Gyro.HFO_Min-1)	  Spi.DAC_A=Gyro.HFO_Min-2;
- 	else if(Spi.DAC_A<Gyro.HFO_Max+1) Spi.DAC_A=Gyro.HFO_Max+2;
- 	
-}      */    
-           
-// Spi.DAC_B-=ADCDIF>>6;
-        
+
 void ADS_Acum(void)
 {
     Spi.ADC_NewData = 0;
@@ -202,15 +169,43 @@
         Gyro.ADS_NewData = 1;
 	}
 }
-void ModFilt(void)
+
+void HFOFilt(void)
 {
-	       static int SumBuff,Delta, OldDelta;
-	      
+	      if (count10HFO>=64*8)
+ 		 	 {
+ 		  		count10HFO=0;
+ 		  		for(int q=0; q<64; q++)
+      	    	{
+      	    	 	AMPSUM+=BuffADC_10v[q];
+      	    	}
+      	    AMPSUM=AMPSUM>>6;
+          	AMPSUM=AMPSUM>>3; 
+        	//AMPSUM=AMPSUM>>3;
         
-        
+           	AMPSUM_DESP=AMPSUM;
+           	HFOdelta=(int)((Gyro.HFO_ref)-AMPSUM);
+           	
+           	
+           	HFOSumDelta+=HFOdelta;
+           	HFOregul=HFOSumDelta/(int)(Gyro.HFO_Gain);
+           	
+           	HFOSumDelta-=Gyro.HFO_Gain*HFOregul;
+           	
+	     //   tempDeltaRegul = HFOregul;
+	        tempDeltaRegul += HFOregul;
+	        AMPSUM=0;
+	        HFO_Flag=1;
+ 		  }
+}
+
+void PLCFilt(void)
+{
+	     static int SumBuff,Delta, OldDelta;          
+	     
          if (count10v>=64*32)
  		  {
- 		  	LoopOn
+ 		 
  	        count10v=0;
         
  	        for(int q=0; q<32; q++)
@@ -232,7 +227,7 @@
        	               
     	    for(int q=0; q<64; q++)
       	    	{
-      	    	 	AMPSUM+=BuffADC_10v[q];
+      	    	 //	AMPSUM+=BuffADC_10v[q];
       	    	 	AMPSUMout+=BuffADC_10v_F[q];   	    	 	
 	       	 		BuffADC_10v_OLD[q]= BuffADC_10v[q];
     	   		 	BuffADC_10v[q] =0;				
@@ -259,33 +254,27 @@
             SumDelta-=Gyro.PLC_Gain*Gyro.PLC_Eror_count;
           	
           	PLC_EROR+=Gyro.PLC_Eror_count;
-          	 
-          	 
-          	 
-          	AMPSUM=AMPSUM>>6;
-          	AMPSUM=AMPSUM>>3; 
-        	AMPSUM=AMPSUM>>2;
-        
-           	AMPSUM_DESP=AMPSUM;
-           	HFOdelta=(int)((Gyro.HFO_ref)-AMPSUM);
-           	
-           	
-           	HFOSumDelta+=HFOdelta;
-           	HFOregul=HFOSumDelta/(int)(Gyro.HFO_Gain);
-           	
-           	HFOSumDelta-=Gyro.HFO_Gain*HFOregul;
-           	
-	        tempDeltaRegul=HFOregul;
-	        tempDeltaRegul+=HFOdelta;
-	        
-            HFO_Flag=1;
+          	
             PLC_Flag=1;
     	 	AMPSUMM=0;
     	 	AMPSUMP=0;
-    	    AMPSUM=0;
-    	    LoopOff
+    	    
+    	   // LoopOff
           }
 }
+void ModFilt(void)
+{
+  
+	      
+	      PLCFilt();
+	      if(PLC_Flag)
+	      {
+	     		
+	     	 	HFOSumDelta=0;
+	      }
+	      else 	HFOFilt();
+     	 
+}
 
 void SPI_Exchange(void)  // новая функция чтения, в нецй не должно быть ничего лишнего
 {
@@ -336,10 +325,10 @@
         
    
         count10v++;
+        count10HFO++;
         BuffADC_10v[CountV64] += BuffADC_1Point[CountV255];
-        
+      //  BuffADC_10HFO[CountV64] += BuffADC_1Point[CountV255];
         ModFilt();
-  
        }
             
 }
@@ -354,16 +343,6 @@
 		 {
 		   	if(HFO_Flag)
 		   	{
-		   /*	switch(HFOregul){
-		   
-	case  1:  HFOregul=0; break;
- 	case -1:  HFOregul=0; break;
-	  	case  2:  HFOregul=1; break;
-	   	case -2:  HFOregul=1; break; 	
-		   	
-		   	
-		   	}*/
-
 		    Spi.DAC_A -= HFOregul;
 		   	HFO_Flag=0;
         	DeltaRegul=0;
@@ -389,14 +368,11 @@
 		{
 		if(PLC_Flag)
 			{  
-	  	  	 	PLC_Flag=0;
-	  	  	 	if   (Gyro.PLCDelay)
+	  	  	  	if   (Gyro.PLCDelay)
 	  	  	 	{
 
 	  	  	 	}
-	  	  	 	else Spi.DAC_B+=(Gyro.PLC_Eror_count);
-	  	  		
-	  	  		
+	  	  	 	else Spi.DAC_B+=(Gyro.PLC_Eror_count); 	  		
 			}
    		 }   
    		Gyro.PLC_Eror_count=0;  		 	
@@ -417,7 +393,11 @@
     {
     	if      ( Spi.DAC_B < 10300 )	Spi.DAC_B = 32000;            //проверка на переваливание за границу.  
       	else if ( Spi.DAC_B > 57000 )	Spi.DAC_B = 32000;
-    }     
+    } 
+    if(PLC_Flag)
+	{  
+    PLC_Flag=0; 
+    }   
 }