fork

Dependencies:   mbed

Fork of LG by igor Apu

Revision:
155:94e7ac5fea58
Parent:
153:7086895c6ee3
Child:
157:1069c80f4944
--- a/SPI.c	Fri May 06 10:45:37 2016 +0000
+++ b/SPI.c	Fri May 06 14:08:54 2016 +0000
@@ -131,14 +131,13 @@
 
 
 
-void PlcRegul(void)			//Программа расчет напряжения для модулятора
+void PlcRegul(void)			//Программа расчет напряжения для модулятора//выполняется 1.25 микросек.
 {
+	    LoopOn
 	    int PLC_In;
         int tempDelta;
         int tempDac;
-        
-       
-//   LoopOn
+
     
 
 
@@ -151,8 +150,7 @@
 
 		
   
-    tempDelta=(unsigned int)(AD_MAX-Gyro.AD_Slow);//ищем разницу между желаемой и действительной амплитудами.
-
+   
 
 
 /*
@@ -177,20 +175,23 @@
 
 
 
-                                             //                                                    3600 (размер моды порядка 3000)
+                                                       //                                      3600 (размер моды порядка 3000)
     if( (Gyro.PLC_Lern<60)&&(Gyro.PLC_Error2Mode != 0))//пробигаем по нескольким значениям цап(60*0х3с=0хВВ8) для определения максимальной амплитуды.
     { 
-      Gyro.PLC_Lern++;
-      Spi.DAC_B += 0x3c;
-      if(AD_MAX < Gyro.AD_Slow) AD_MAX = Gyro.AD_Slow;
-    }
+      Gyro.PLC_Lern++;                                  //инкрементируем счетчик поиска максимальной амплитуды
+      if(AD_MAX < Gyro.AD_Slow) AD_MAX = Gyro.AD_Slow;  //если максимальная амплитуда меньше текущей записываем новую максимальную амплитуду.
+      Spi.DAC_B += 0x3c;                                //добовляем в значение цапа 60
+    } //работает только первые ~30-40 секунд (37 сек).
           
-	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(AD_MAX < Gyro.AD_Slow) {AD_MAX = Gyro.AD_Slow;   l=0;}			//обновление максимального значения амплитуды обнуление счетчика малого понижения амплитуды.
+	else l++;                                                           //инкрементируем счетчик малого понижения желаемой амплитуды (максимальной замеченной)
+	
+	tempDelta=(unsigned int)(AD_MAX-Gyro.AD_Slow);                      //ищем разницу между желаемой и действительной амплитудами.
+													                    //ели небыло обновления максимальной амплитуды инкрементируем счетчика малого понижения амплитуды.
+	if((l>100)&&(Gyro.PLC_Lern>59)) {AD_MAX -= 3107200; l=0;}		    //если счетчик малого понижения амплитуды больше 100(аммплитуда не обновлялась 100 раз). 
 
 
-	    if(Gyro.RgConA&0x2)											// если  контур регулирования замкнут
+	    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;}		// проверка на двух модовость
@@ -211,16 +212,16 @@
 		if(tempDelta>(50<<18)) 								// 3 режим регулирования 
 		{   
 		    tempDac=(unsigned int)(tempDelta>>18);
-		    if(tempDac>400) {tempDac=400;}
-			Spi.DAC_B += Gyro.PLC_ADC_DOld * tempDac;
-			tempDac   =  Gyro.PLC_ADC_DOld * tempDac;
+		    if(tempDac>400) {tempDac=400;}                 //ограничение на регулирование если очень большая разница амплитуд
+			Spi.DAC_B += Gyro.PLC_ADC_DOld * tempDac;      //новое значение в цап
+			tempDac   =  Gyro.PLC_ADC_DOld * tempDac;      //используется только для выдачи
 			flagmod=3;
 		}
         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);
+			tempDac    = Gyro.PLC_ADC_DOld * (tempDac);     //используется только для выдачи
 			flagmod=2;
 		}
 		else if(tempDelta<(2<<18))                         //режим если дельта равна 0;
@@ -238,10 +239,6 @@
 		}
 		
 		
-		
-		
-		
-		
 		if(flagmod==3){         		//если максимальный режим регулирования 
 		   k++;                		//инкрементируем счетчик большого понижения амплитуды
 		   if(k>35)          		//если счетчик бльше 35
@@ -252,15 +249,7 @@
 			}       
 		else k=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;}
@@ -272,7 +261,7 @@
 		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
  }