fork

Dependencies:   mbed

Fork of LG by igor Apu

Revision:
151:d565ce4d58c8
Parent:
150:29c9f7671bac
Child:
152:cff1321ab25e
--- a/SPI.c	Wed May 04 14:01:57 2016 +0000
+++ b/SPI.c	Thu May 05 11:03:59 2016 +0000
@@ -136,8 +136,8 @@
         int tempDelta;
         int tempDac;
        
-    LoopOn
-		PLC_In = Gyro.AD_Slow;									//выбираем даные для фильтрации
+//   LoopOn
+		PLC_In = Gyro.AD_Slow;											//выбираем даные для фильтрации
 //		PLC_In = Gyro.AD_Fast;
         //или+,или-(знак)
 		Gyro.PLC_Delta 	  = PLC_In - Gyro.PLC_Old;						// узнаем приращение
@@ -146,28 +146,36 @@
 		//AD_MAX=1943420832;
 		       //15728640
 		//AD_MAX=1943400;       
-		if(AD_MAX < Gyro.AD_Slow) {AD_MAX = Gyro.AD_Slow;l=0;}
-		else l++;
-		if(flagmod>2){
-			k++;
-			  if(k>30)
+		if(AD_MAX < Gyro.AD_Slow) {AD_MAX = Gyro.AD_Slow;l=0;}			//обновление максимального значения амплитуды обнуление счетчика малого понижения амплитуды.
+		else l++;														//ели небыло обновления максимальной амплитуды инкрементируем счетчика малого понижения амплитуды.
+		if((l>100)&&(Gyro.PLC_Lern>59)) {AD_MAX -= 3107200; l=0;}		//если счетчик малого понижения амплитуды больше 100(аммплитуда не обновлялась 100 раз). 
+		                                                         		//уменьшаем максимальную амплитуду, сбрасываем счетчик.
+		if(flagmod==3){         		//если максимальный режим регулирования 
+			k++;                		//инкрементируем счетчик большого понижения амплитуды
+			  if(k>35)          		//если счетчик бльше 35
 			    {
-				 k=0;  //1948558064
-			     AD_MAX -= 13107200; //= 50
+				 k=0;                	//обнуляем счетчик
+			     AD_MAX -= 13107200;	//уменьшаем максимальную амплитуду.
 			    }
-			}       //   5242880 = 20 
-			else k=0;
-		if(l>30) {AD_MAX -= 13107200; l=0;}
-        tempDelta=(unsigned int)(AD_MAX-Gyro.AD_Slow);
-        
-    if( (Gyro.PLC_Lern<51)&&(Gyro.PLC_Error2Mode != 0))//пробигаем по нескольким значениям цап(50*0х3с=0хВВ8) для определения максимальной амплитуды.
+			}       
+		else k=0;						//если это не серия максимальных регулировок обнуляем счетчик.
+			
+		
+
+        tempDelta=(unsigned int)(AD_MAX-Gyro.AD_Slow);//ищем разницу между желаемой и действительной амплитудами.
+	   
+
+
+    if( (Gyro.PLC_Lern<60)&&(Gyro.PLC_Error2Mode != 0))//пробигаем по нескольким значениям цап(50*0х3с=0хВВ8) для определения максимальной амплитуды.
     { 
       Gyro.PLC_Lern++;
-      Spi.DAC_B += 0x1e;
+      //Spi.DAC_B += 100;
+      Spi.DAC_B += 0x3c;
       if(AD_MAX < Gyro.AD_Slow) AD_MAX = Gyro.AD_Slow;
-      sprintf((Time)," Gyro.AD_Slow=%d Spi.DAC_B=%d AD_MAX=%d\r\n", Gyro.AD_Slow,Spi.DAC_B,AD_MAX);
-      WriteCon(Time);
+    // sprintf((Time),"Spi.DAC_B=%d  Gyro.AD_Slow=%d  AD_MAX=%d\r\n", Spi.DAC_B, Gyro.AD_Slow,AD_MAX);
+    // WriteCon(Time);
     }
+    //else Gyro.LogPLC=0;
     
         
         
@@ -186,7 +194,7 @@
 		else {Gyro.PLC_Error2Mode = 1; Gyro.PLC_DeltaADD = 0;}
 		
 		
-		if(((tempDelta>>18)>50)||((tempDelta>>18)<(-50)))
+		if(tempDelta>(50<<18))
 		{   
 		    tempDac=(unsigned int)(tempDelta>>18);
 		    if(tempDac>400) {tempDac=400;}
@@ -194,14 +202,14 @@
 			tempDac   =  Gyro.PLC_ADC_DOld * tempDac;
 			flagmod=3;
 		}
-        else if(((tempDelta>>18)>20)||((tempDelta>>18)<(-20)))
+        else if(tempDelta>(12<<18))
 		{
 			tempDac=(unsigned int)(tempDelta>>18);
-			Spi.DAC_B += Gyro.PLC_ADC_DOld * (tempDac-5);
-			tempDac    = Gyro.PLC_ADC_DOld * (tempDac-5);
+			Spi.DAC_B += Gyro.PLC_ADC_DOld * (tempDac);
+			tempDac    = Gyro.PLC_ADC_DOld * (tempDac);
 			flagmod=2;
 		}
-		else if(tempDelta>>18<2)
+		else if(tempDelta>(2<<18))
 		{
 		 tempDac=5;
 		 Spi.DAC_B += Gyro.PLC_ADC_DOld * tempDac;
@@ -215,16 +223,18 @@
 			flagmod=1;
 		}
 			
-			
+		
 		if ( Spi.DAC_B < 1000 ) 	{Spi.DAC_B = 32000;  Gyro.PLC_Error2Mode = 5; Gyro.PLC_DeltaADD = 0;}
 		if ( Spi.DAC_B > 63000 ) 	{Spi.DAC_B = 32000;  Gyro.PLC_Error2Mode = 5; Gyro.PLC_DeltaADD = 0;}
 		
 		if(Gyro.LogPLC==1)
 		{
-		sprintf((Time),"%d %d %d %d %d %d %d %d\r\n", Spi.DAC_B, temp9,tempDelta>>18,flagmod,tempDac,AD_MAX, Gyro.AD_Slow, k/*(Gyro.PLC_ADC_DOld * Gyro.PLC_Delta>>18)*/);//выдаем в терминал для постройки граффика регулировки периметра.
+		//sprintf((Time),"%d %d %d %d\r\n",Gyro.PLC_Lern, Spi.DAC_B, Gyro.AD_Slow, Gyro.AD_Slow>>18 );//выдаем в терминал для постройки граффика регулировки периметра.
+        //WriteCon(Time);
+		sprintf((Time),"%d %d %d %d %d %d %d %d\r\n", Spi.DAC_B, temp9,tempDelta>>18,tempDac, flagmod, AD_MAX, Gyro.AD_Slow, k);//выдаем в терминал для постройки граффика регулировки периметра.
         WriteCon(Time);
         }
-LoopOff
+//LoopOff
  }
 
 
@@ -283,7 +293,7 @@
 		if(Gyro.LogPLC==1)
 		{
 		
-		sprintf((Time),"%d %d %d\r\n", Spi.DAC_B, Gyro.StrayPLC_flag, temp9);//выдаем в терминал для постройки граффика регулировки периметра.
+		sprintf((Time),"%d %d %d %d %d %d\r\n", Spi.DAC_B, temp9,flagmod, AD_MAX, Gyro.AD_Slow, k);//выдаем в терминал для постройки граффика регулировки периметра.
         WriteCon(Time);
         }
  
@@ -291,7 +301,6 @@
 
 
 */
-
 void PlcRegul_old(void)  // на всяни	й случай
 {
 	int Delta;