forkd

Dependencies:   mbed

Fork of LGstaandart by Dmitry Kovalev

Revision:
152:cff1321ab25e
Parent:
151:d565ce4d58c8
Child:
153:7086895c6ee3
--- a/SPI.c	Thu May 05 11:03:59 2016 +0000
+++ b/SPI.c	Thu May 05 14:00:36 2016 +0000
@@ -9,7 +9,7 @@
 int temp9;
 int AD_MAX=0;
 int k=0,l=0;
- int flagmod=0;
+int flagmod=0;
 unsigned int Temp_ADC_2;
 unsigned int Temp_ADC_3;
 unsigned int Temp_ADC_4;
@@ -131,8 +131,7 @@
 
 void PlcRegul(void)			//Программа расчет напряжения для модулятора
 {
-		
-		int PLC_In;
+	    int PLC_In;
         int tempDelta;
         int tempDac;
        
@@ -143,9 +142,7 @@
 		Gyro.PLC_Delta 	  = PLC_In - Gyro.PLC_Old;						// узнаем приращение
 		Gyro.PLC_DeltaADD = Gyro.PLC_Delta * Gyro.PLC_ADC_DOld;			//приращение с учетом знака (и количества) прошлого приращения
 		Gyro.PLC_Old 	  = PLC_In;										// запоминание значения
-		//AD_MAX=1943420832;
-		       //15728640
-		//AD_MAX=1943400;       
+      
 		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 раз). 
@@ -159,31 +156,21 @@
 			    }
 			}       
 		else k=0;						//если это не серия максимальных регулировок обнуляем счетчик.
-			
-		
 
-        tempDelta=(unsigned int)(AD_MAX-Gyro.AD_Slow);//ищем разницу между желаемой и действительной амплитудами.
-	   
-
-
+    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 += 100;
       Spi.DAC_B += 0x3c;
       if(AD_MAX < Gyro.AD_Slow) AD_MAX = Gyro.AD_Slow;
-    // 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;
-    
-        
-        
+
 	    if(Gyro.RgConA&0x2)											// если включон контур регулирования
 	    {	
 			if 		( Gyro.PLC_Error2Mode > 0)				{Gyro.PLC_Error2Mode --; 						Gyro.PLC_ADC_DOld = 0;} 	// если ошибка(нахожление в двух модовом)
 			else if ( Gyro.PLC_Delta > 	(3500 * 65536)) 	{Spi.DAC_B += 2500;	Gyro.PLC_Error2Mode = 5; 	Gyro.PLC_ADC_DOld = 0;}		// проверка на двух модовость
-			else if ( Gyro.PLC_Delta < 	(-3500 * 65536)) 	{Spi.DAC_B += 2500;	Gyro.PLC_Error2Mode = 5; 	Gyro.PLC_ADC_DOld = 0;}
+			else if ( Gyro.PLC_Delta < 	(-3500 * 65536)) 	{Spi.DAC_B += 2500;	Gyro.PLC_Error2Mode = 5; 	Gyro.PLC_ADC_DOld = 0;}		// проверка на двух модовость
 	  	    else if ( Gyro.PLC_DeltaADD > 0)        		{Gyro.PLC_ADC_DOld =  1;}
 	  	    else if ( Gyro.PLC_DeltaADD < 0)      			{Gyro.PLC_ADC_DOld = -1;}
 			else
@@ -194,7 +181,7 @@
 		else {Gyro.PLC_Error2Mode = 1; Gyro.PLC_DeltaADD = 0;}
 		
 		
-		if(tempDelta>(50<<18))
+		if(tempDelta>(50<<18)) 								// 3 режим регулирования 
 		{   
 		    tempDac=(unsigned int)(tempDelta>>18);
 		    if(tempDac>400) {tempDac=400;}
@@ -202,29 +189,29 @@
 			tempDac   =  Gyro.PLC_ADC_DOld * tempDac;
 			flagmod=3;
 		}
-        else if(tempDelta>(12<<18))
+        else if(tempDelta>(12<<18)) 						// 2 режим регулирования
 		{
 			tempDac=(unsigned int)(tempDelta>>18);
 			Spi.DAC_B += Gyro.PLC_ADC_DOld * (tempDac);
 			tempDac    = Gyro.PLC_ADC_DOld * (tempDac);
 			flagmod=2;
 		}
-		else if(tempDelta>(2<<18))
+		else if(tempDelta<(2<<18))                         //режим если дельта равна 0;
 		{
-		 tempDac=5;
+		 tempDac=2;
 		 Spi.DAC_B += Gyro.PLC_ADC_DOld * tempDac;
 		 flagmod=1;
 		}
         else
         {
-           	tempDac=(unsigned int)(tempDelta>>19);
+           	tempDac=(unsigned int)(tempDelta>>19); 			// 1 режим регулирования
            	Spi.DAC_B += Gyro.PLC_ADC_DOld *tempDac;
 			tempDac = Gyro.PLC_ADC_DOld * tempDac;
 			flagmod=1;
 		}
 			
 		
-		if ( Spi.DAC_B < 1000 ) 	{Spi.DAC_B = 32000;  Gyro.PLC_Error2Mode = 5; Gyro.PLC_DeltaADD = 0;}
+		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)