fork

Dependencies:   mbed

Fork of LG by igor Apu

Revision:
195:bcc769f5292b
Parent:
193:a0fe8bfc97e4
Child:
196:f76dbc081e63
--- a/SPI.c	Thu Sep 15 14:00:43 2016 +0000
+++ b/SPI.c	Tue Sep 20 10:39:30 2016 +0000
@@ -2,7 +2,7 @@
 struct SPI Spi;
 //unsigned int Temp_AMP;
 unsigned int Temp_AMP64P;
-
+int tt=0;
 unsigned int Count_AMP, ADD_AMP, Cur_Amp;
 int Znak_Amp;
 int AD_Regul = 0;
@@ -103,7 +103,7 @@
           Gyro.PLC_Lern++;
           Spi.DAC_B += 0x3c;
           if(AD_MAX < Gyro.AD_Slow) AD_MAX = Gyro.AD_Slow;
-          sprintf((Time),"%d %d %d %d  \r\n",Gyro.TermLM,Spi.DAC_B, Gyro.AD_Slow, AD_MAX);
+          sprintf((Time),"%d %d %d %d  \r\n",Gyro.TermLM, Spi.DAC_B, Gyro.AD_Slow, AD_MAX);
           WriteCon(Time);
         } 
       else {Gyro.ModJump=0;}  
@@ -113,12 +113,26 @@
 
 
 
-void PlcRegul(void)																//Программа расчет напряжения для модулятора(//выполняется 1.25 микросек.)
-{
+void PlcRegul(void)		
+ 														//Программа расчет напряжения для модулятора(//выполняется 1.25 микросек.)
+{   
+    
+    int templm=0;
     int PLC_In;
     int tempDac;
     if(!(Gyro.PinReg & PinRegBitL) && (start>0)) start--; 
-    if((start==0))
+    else if(start==2)
+    {
+    	if(tt==0)
+    	{//           +25°
+    	templm = (Gyro.TermoNKU-Gyro.Termo)*2; //дельта 
+    	if(templm>0) Gyro.Ktermo=1;
+    	else Gyro.Ktermo=0;
+    	Spi.DAC_B+=templm;
+    	tt=1;
+    	}
+    }
+    else if(start==0)
       {
          PLC_In = Gyro.AD_Slow;					//выбираем даные для фильтрации
    		 Gyro.PLC_Delta    = PLC_In - Gyro.PLC_Old;								//узнаем приращение
@@ -132,7 +146,9 @@
          	}      																//если изменился коэфициент усиления ФД  //3600 (размер моды порядка 3000)
          if((Gyro.PLC_Lern < 150) && (Gyro.PLC_Error2Mode != 0)) 
             {    			//пробигаем по нескольким значениям цап(60*0х3с=0хВВ8) для определения максимальной амплитуды.
-        		Spi.DAC_B += 0x3c;         			                               	//добовляем в значение цапа 60
+        		
+        		if(Gyro.Ktermo)Spi.DAC_B += 0x3c;         			                               	//добовляем в значение цапа 60
+        		else Spi.DAC_B -= 0x3c;
         		if(AD_MAX < PLC_In){AD_MAX = PLC_In;}    	 	          		    //если максимальная амплитуда меньше текущей записываем новую максимальную амплитуду.      
         		else if ((AD_MAX>PLC_In)&&(AD_MAX>1500800000)) r++;    	      		//если текущая амплитуда меньше максимально найденной то инкрементируем счетчик.
         		if (r>10)
@@ -146,10 +162,10 @@
      
      if(AD_MAX < PLC_In) {AD_MAX = PLC_In; l=0;}                      			//обновление максимального значения амплитуды обнуление счетчика малого понижения амплитуды.                  
      else l++;                                   								//инкрементируем счетчик малого понижения желаемой амплитуды (максимальной замеченной)
-     if((l > 40)&&(Gyro.PLC_Error2Mode == 0)) {AD_MAX -= 2107200;k=15;l=0;} 	//если счетчик малого понижения амплитуды больше 100(аммплитуда не обновлялась 100 раз). m 
-    /* if     ((k == 15)&&(Gyro.PLC_Lern > 150))   Spi.DAC_B += 200;                //после уменьшения максимальной амплитуды двигаем шевелем цап 
+     if((l > 100)&&(Gyro.PLC_Error2Mode == 0)) {AD_MAX -= 2107200;k=15;l=0;} 	//если счетчик малого понижения амплитуды больше 100(аммплитуда не обновлялась 100 раз). m 
+     if     ((k == 15)&&(Gyro.PLC_Lern > 150))   Spi.DAC_B += 200;                //после уменьшения максимальной амплитуды двигаем шевелем цап 
      else if((k ==  1)&&(Gyro.PLC_Lern > 150))  {Spi.DAC_B -= 200; k=0;l=0;}      //для быстрог поиска новог максимума.
-     if(k>0)k--;*/
+     if(k>0)k--;
                                                           
      Gyro.PlC_MaxD=(unsigned int)(AD_MAX-PLC_In);              					//ищем разницу между желаемой и действительной амплитудами.  
  
@@ -207,17 +223,18 @@
               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;}            //проверка на переваливание за границу.  
- else if ( Spi.DAC_B > 63000 ) 	{Spi.DAC_B = 32000; Gyro.PLC_Error2Mode = 5; Gyro.PLC_DeltaADD = 0;}
-       
+  	 	} 
+  	 	
+ if      ( Spi.DAC_B < 18300 )	{Spi.DAC_B = 32000; Gyro.PLC_Error2Mode = 5; Gyro.PLC_DeltaADD = 0;}            //проверка на переваливание за границу.  
+ else if ( Spi.DAC_B > 53000) 	{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 %d %d\r\n", l, temp9, r, tempDac, flagmod, AD_MAX, PLC_In, 0x7fff-Spi.ADC5,Gyro.PlC_MaxD,0);//выдаем в терминал для постройки граффика регулировки периметра.
+        sprintf((Time),"%d %d %d %d %d %d\r\n", Spi.DAC_B, templm, start, tt, PLC_In, Gyro.Termo);//выдаем в терминал для постройки граффика регулировки периметра.
         WriteCon(Time);
     }
 }
@@ -341,7 +358,7 @@
                 LPC_SSP0->DR = (Spi.DAC_B);
                 temp9=Spi.DAC_B;
                 break;
-
+/*
             case 1://малое воздействие +
                 temp9=Spi.DAC_B + Gyro.StrayPLC_Pls;
                 LPC_SSP0->DR = temp9;
@@ -356,7 +373,7 @@
                 temp9=Spi.DAC_B + Gyro.StrayPLC_2Mode;
                 LPC_SSP0->DR = temp9;//вгоняем в многомодовый режим
                 break;
-
+*/
         }
         // LPC_SSP0->DR = Spi.DAC_B;        	//e. передача 12 бит