forkd

Dependencies:   mbed

Fork of LGstaandart by Dmitry Kovalev

Revision:
232:130a2b5003e6
Parent:
231:079835d508ef
--- a/SPI.c	Thu Jan 25 13:59:43 2018 +0000
+++ b/SPI.c	Wed Jan 31 13:41:23 2018 +0000
@@ -47,10 +47,14 @@
     Spi.ADC_NewData = 0;
   /*Gyro.IN1_Accum	+=  Spi.ADC2;
     Gyro.IN2_Accum	+=  Spi.ADC3;*/
-    Gyro.Termo 	= (unsigned int)((((Spi.ADC1>>1)*100)*0.0122)-27300);
-	Gyro.DeltaT = (unsigned int)((((Spi.ADC2>>1)*100)*0.0122)-27300);
-	Gyro.Termo	= Spi.ADC1>>1;
-	Gyro.DeltaT	= Spi.ADC2>>1;
+
+    Spi.ADC1 = (int)(((((Spi.ADC1>>1)*100)*0.0122)-27300)+Gyro.Tmp_OffsetT4);
+    Spi.ADC2 = (int)(((((Spi.ADC2>>1)*100)*0.0122)-27300)+Gyro.Tmp_OffsetT5);
+    Gyro.Termo 	= Spi.ADC1;
+	Gyro.DeltaT = Spi.ADC2;
+   /*Gyro.Termo	= Spi.ADC1-44726;
+	Gyro.DeltaT	= Spi.ADC2-44726;*/
+	Gyro.DeltaTRate=(Spi.ADC2-Spi.ADC1);
     Gyro.TermLM = Spi.ADC1; 
 }
 
@@ -111,7 +115,7 @@
 	static  int TempModT5=0;
 	
 	static  int OldT4=0;
-	static  int OldT5=0;
+	static  int OldT5=0,LastTermoMod=0;;
 	static  int OldDeltaT4=0;
 	static  int OldDeltaT5=0;
 	static  int OldMod=0;
@@ -119,14 +123,11 @@
 	
 	AVR_T_Count++;
 	
-	
-	Gyro.T4=Spi.ADC1;
-	Gyro.T5=Spi.ADC2;
+
 	
 	TempModT4 = (int)(Gyro.T4-OldT4);
 	TempModT5 = (int)(Gyro.T5-OldT5);
 	
-	
 	OldT4=Gyro.T4;
 	OldT5=Gyro.T5;
 	
@@ -143,19 +144,30 @@
 	  	Gyro.DeltaT5+=Delt_T5[q];
 	  	Delt_T5[q]=0;
 	  	}
+
 	  	if(Gyro.DeltaT4==0)Gyro.DeltaT4=OldDeltaT4;
 	  	if(Gyro.DeltaT5==0)Gyro.DeltaT5=OldDeltaT5;
 	  	
 	  	OldDeltaT4=Gyro.DeltaT4;
 	  	OldDeltaT5=Gyro.DeltaT5;
+        
+         
+	  	Gyro.TermoMod = Gyro.DeltaT4+Gyro.DeltaT5;
+	 
+	  
+		
+		if     (Gyro.TermoMod> 0) Gyro.TermoMod=1;
+	 	else if(Gyro.TermoMod==0) Gyro.TermoMod=LastTermoMod ;
+		else                      Gyro.TermoMod=(-1);
 
-	  	Gyro.TermoMod = Gyro.DeltaT4 + Gyro.DeltaT5;
-
+	  LastTermoMod = Gyro.TermoMod;
       Gyro.DeltaT4=0;
 	  Gyro.DeltaT5=0;
 	  
       Gyro.TemperNewData=1;
 	  AVR_T_Count=0;  
+	  	
+
 	  
 	}
 	
@@ -189,8 +201,11 @@
         Spi.ADC1 = Spi.ADC1_Accum >> 5;			// подгоотавливаем данные (в той эе сетке) те 	 ADC1  0..65535
         Spi.ADC2 = Spi.ADC2_Accum >> 5;
         Spi.ADC3 = Spi.ADC3_Accum >> 5;
-        Spi.ADC4 = Spi.ADC4_Accum >> 5;
-        Spi.ADC5 = Spi.ADC5_Accum >> 5;
+        Spi.ADC4 = (Spi.ADC4_Accum >> 5);
+        Spi.ADC5 = (Spi.ADC5_Accum >> 5);
+            	
+			Gyro.T4=Spi.ADC1;
+			Gyro.T5=Spi.ADC2;
         Spi.ADC1_Accum  = 0;				    // сбрасывкем аккамулятор
         Spi.ADC2_Accum  = 0;
         Spi.ADC3_Accum  = 0;
@@ -233,7 +248,8 @@
 void  PLCRegul(void)
 {
 static unsigned int Flag_64=0, count;	    
-static int  CountFaza,Sin;
+static int  CountFaza,Sin,FlagGain;
+
 
 
  	 if(Gyro.RgConA&0x8)
@@ -241,21 +257,32 @@
 			if(PLC_Flag)
 			 {   
 			    PLC_Flag=0;
-				if(Gyro.PLCDelay) {	}
-	  			else Spi.DAC_B+=Gyro.PLC_Eror_count;
+				if(Gyro.PLCDelay) {	FlagGain=1;	}
+	  			else 
+	  			{
+	  				if(FlagGain) 
+	  				{
+	  					FlagGain=0;
+	  					Gyro.HFO_Gain = GyroP.Str.HFO_Gain;
+	  				}
+	  				Spi.DAC_B+=Gyro.PLC_Eror_count;
+	  			}
 	  	 	 }
 	  	 	 switch(Gyro.TermoMod) 
 	  	 	 {
        		 case -1:
 					if(Spi.DAC_B > Gyro.HighTreshold ) 
    						{
-   						Spi.DAC_B = (Gyro.ResetLevelCool);  
+   						Gyro.HFO_Gain = GyroP.Str.HFO_Gain_Reset_PLC; 
+   						Spi.DAC_B = (Gyro.ResetLevelCool);
    						Gyro.PLCDelay = GyroP.Str.PLCDelay; 
    						}  
    			 break;
+   			 
    			 case 1:
    					if(Spi.DAC_B < Gyro.DownTreshold ) 
     					{
+    					Gyro.HFO_Gain = GyroP.Str.HFO_Gain_Reset_PLC;
     					Spi.DAC_B = (Gyro.ResetLevelHeat);
     					Gyro.PLCDelay = GyroP.Str.PLCDelay; 
     					}