fork

Dependencies:   mbed

Fork of LG by igor Apu

Revision:
159:38f39c0c143f
Parent:
158:0c8342e1837a
Child:
160:6170df6f5a5c
--- a/SPI.c	Wed May 11 14:04:57 2016 +0000
+++ b/SPI.c	Fri May 13 11:01:16 2016 +0000
@@ -4,7 +4,6 @@
 unsigned int Temp_AMP64P;
 
 int ttt = 0;
-float TimPlc=0;
 unsigned int Count_AMP, ADD_AMP, Cur_Amp;
 int Znak_Amp;
 int AD_Regul = 0;
@@ -105,7 +104,7 @@
 
 
 
-void ShowMod(void)
+void ShowMod(void)//технологическая функция для просмотра мод на всем диапазпне цап
 {
 	
     //////////////////////////////////////////////////////////////////////////////////////////////////
@@ -113,14 +112,12 @@
     ///////////////////////////////////////////////////////////////////////////////////////////////////
       if( (Gyro.PLC_Lern<1092)&&(Gyro.PLC_Error2Mode != 0))//пробигаем по нескольким значениям цап(60*0х3с=0хВВ8) для определения максимальной амплитуды.
         {
-          
           Gyro.PLC_Error2Mode--;
           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);
           WriteCon(Time);
-          TimPlc+=0.63;
         }    
 }
 
@@ -128,7 +125,7 @@
 
 
 
-void PlcRegul(void)			//Программа расчет напряжения для модулятора//выполняется 1.25 микросек.
+void PlcRegul(void)			//Программа расчет напряжения для модулятора(//выполняется 1.25 микросек.)
 {
 
     int PLC_In;
@@ -155,17 +152,23 @@
         Gyro.PLC_Lern++;                                     //инкрементируем счетчик поиска максимальной амплитуды
         if(AD_MAX < Gyro.AD_Slow) AD_MAX = Gyro.AD_Slow;     //если максимальная амплитуда меньше текущей записываем новую максимальную амплитуду.                                                                 *
         Spi.DAC_B += 0x3c;                                   //добовляем в значение цапа 60
+        Gyro.CuruAngle = 0;
     } //работает только первые ~30-40 секунд (37 сек).
 
 
 
     if(AD_MAX < Gyro.AD_Slow) { AD_MAX = Gyro.AD_Slow; l=0; }//обновление максимального значения амплитуды обнуление счетчика малого понижения амплитуды.                                                          *
-    else l++;
-                                                            //инкрементируем счетчик малого понижения желаемой амплитуды (максимальной замеченной)
+    else if((l == 100)&&(Gyro.PLC_Error2Mode == 0)) { AD_MAX -= 5107200;k=1;l=0;} //если счетчик малого понижения амплитуды больше 100(аммплитуда не обновлялась 100 раз). 
+    else l++; 
+    
+    if((k == 1)&&(Gyro.PLC_Error2Mode == 0))  {Spi.DAC_B += 200; k=2;}
+    //if((k == 2)&&(Gyro.PLC_Error2Mode == 0))  {Spi.DAC_B -= 200; k=0;l=0;}
+                                                          //инкрементируем счетчик малого понижения желаемой амплитуды (максимальной замеченной)
     Gyro.PlC_MaxD=(unsigned int)(AD_MAX-Gyro.AD_Slow);              //ищем разницу между желаемой и действительной амплитудами.  
          
     //ели небыло обновления максимальной амплитуды инкрементируем счетчика малого понижения амплитуды.
-    if((l>50)&&(Gyro.PLC_Lern>59)) { AD_MAX -= 3107200; l=0; } //если счетчик малого понижения амплитуды больше 100(аммплитуда не обновлялась 100 раз). 
+    
+
   
     if(Gyro.RgConA&0x2) {	       // если  контур регулирования замкнут
          /*			else if ( Gyro.PLC_Delta > 	(3500 * 65536)) 	{Spi.DAC_B += 2500;	Gyro.PLC_Error2Mode = 5; 	Gyro.PLC_ADC_DOld = 0;}		// проверка на двух модовость
@@ -179,7 +182,7 @@
 
     if(Gyro.PlC_MaxD>(50<<18)) {							// 3 режим регулирования
         tempDac=(unsigned int)(Gyro.PlC_MaxD>>18);
-        if(tempDac>1500) tempDac=1500;   //ограничение на регулирование если очень большая разница амплитуд
+        if(tempDac>600) tempDac=600;   //ограничение на регулирование если очень большая разница амплитуд
         Spi.DAC_B += Gyro.PLC_ADC_DOld * tempDac;      //новое значение в цап (±1 * значение регулировки)
         tempDac   =  Gyro.PLC_ADC_DOld * tempDac;      //используется только для выдачи
         flagmod=3;
@@ -201,16 +204,16 @@
         tempDac = Gyro.PLC_ADC_DOld * tempDac;
         flagmod=1;
     }
-
-
+   
+ /*
     if(flagmod==3) {k++;         	//если максимальный режим регулирования //инкрементируем счетчик большого понижения амплитуды
-      if(k>100){k=0;AD_MAX -= 13107200;} //если счетчик бльше 50 //обнуляем счетчик //уменьшаем максимальную амплитуду.   
+      if(k>100){k=0;AD_MAX -= 6107200;} //если счетчик бльше 50 //обнуляем счетчик //уменьшаем максимальную амплитуду.   
     }
     else k=0;						//если это не серия максимальных регулировок обнуляем счетчик.
 
-    
+    */
     
-      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;}            //проверка на переваливание за границу.  
  else if ( Spi.DAC_B > 63000 ) 	{Spi.DAC_B = 32000; Gyro.PLC_Error2Mode = 5; Gyro.PLC_DeltaADD = 0;}
        
 
@@ -221,8 +224,9 @@
     if(Gyro.LogPLC==1) {
         //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, Gyro.PlC_MaxD>>18, tempDac, flagmod, AD_MAX, Gyro.AD_Slow, k);//выдаем в терминал для постройки граффика регулировки периметра.
+        sprintf((Time),"%d %d %d %d %d %d %d %d %d %d\r\n", Spi.DAC_B, temp9, l, tempDac, flagmod, AD_MAX, Gyro.AD_Slow, k, Gyro.CuruAngle, Gyro.TermLM);//выдаем в терминал для постройки граффика регулировки периметра.
         WriteCon(Time);
+       // Gyro.CuruAngle = 0;
     }
 }
 
@@ -253,7 +257,7 @@
 	  	    else if (Gyro.PLC_DeltaADD > 0)
 			{
 
-//				Gyro.PLC_ADC_DOld =	(Gyro.PLC_DeltaADD /6553600 )+1;
+//			Gyro.PLC_ADC_DOld =	(Gyro.PLC_DeltaADD /6553600 )+1;
 			Gyro.PLC_ADC_DOld = 1;
 			}
 	  	    else if (Gyro.PLC_DeltaADD < 0)