123

Dependencies:   mbed

Fork of LG by igor Apu

Revision:
160:6170df6f5a5c
Parent:
159:38f39c0c143f
Child:
162:44e4ded32c6a
--- a/SPI.c	Fri May 13 11:01:16 2016 +0000
+++ b/SPI.c	Fri May 13 14:04:22 2016 +0000
@@ -9,7 +9,7 @@
 int AD_Regul = 0;
 int temp9;
 int AD_MAX=0;
-int k=0,l=0;
+int k=0,l=0,r=0;
 int flagmod=0;
 unsigned int Temp_ADC_2;
 unsigned int Temp_ADC_3;
@@ -132,11 +132,6 @@
     int tempDac;
 
 
-//	 PLC_In = Gyro.AD_Fast;
-    //или+,или-(знак)
-
-   // Gyro.AD_Slow=Gyro.AD_Slow<<3;
-
     PLC_In = Gyro.AD_Slow;											//выбираем даные для фильтрации
     Gyro.PLC_Delta 	  = PLC_In - Gyro.PLC_Old;						// узнаем приращение
     Gyro.PLC_DeltaADD = Gyro.PLC_Delta * Gyro.PLC_ADC_DOld;			//приращение с учетом знака (и количества) прошлого приращения
@@ -147,28 +142,28 @@
     
     
     
-    //                                                                                               3600 (размер моды порядка 3000)
-    if((Gyro.PLC_Lern < 60) && (Gyro.PLC_Error2Mode != 0)) { //пробигаем по нескольким значениям цап(60*0х3с=0хВВ8) для определения максимальной амплитуды.
-        Gyro.PLC_Lern++;                                     //инкрементируем счетчик поиска максимальной амплитуды
-        if(AD_MAX < Gyro.AD_Slow) AD_MAX = Gyro.AD_Slow;     //если максимальная амплитуда меньше текущей записываем новую максимальную амплитуду.                                                                 *
-        Spi.DAC_B += 0x3c;                                   //добовляем в значение цапа 60
-        Gyro.CuruAngle = 0;
+    //                                                                                                   3600 (размер моды порядка 3000)
+    if((Gyro.PLC_Lern < 150) && (Gyro.PLC_Error2Mode != 0)) {     		//пробигаем по нескольким значениям цап(60*0х3с=0хВВ8) для определения максимальной амплитуды.
+        Gyro.PLC_Lern++;                                          		//инкрементируем счетчик поиска максимальной амплитуды
+        Spi.DAC_B += 0x3c;                                        		//добовляем в значение цапа 60
+        if     (AD_MAX < Gyro.AD_Slow) AD_MAX = Gyro.AD_Slow;    	 	//если максимальная амплитуда меньше текущей записываем новую максимальную амплитуду.      
+        else if ((AD_MAX>Gyro.AD_Slow)&&(AD_MAX>1930000000)) r++;    	//если текущая амплитуда меньше максимально найденной то инкрементируем счетчик.
+        if      (r>5){Gyro.PLC_Lern=150;Gyro.PLC_Error2Mode=5;}         //если текущая амплитуда меньше максимально найденной в течении 5 тактов то выходим из поиска
+                         
+        Gyro.CuruAngle = 0;   //не считаем угол пока ищем максивальную амплитуду.
     } //работает только первые ~30-40 секунд (37 сек).
 
 
 
-    if(AD_MAX < Gyro.AD_Slow) { AD_MAX = Gyro.AD_Slow; l=0; }//обновление максимального значения амплитуды обнуление счетчика малого понижения амплитуды.                                                          *
-    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;}
-                                                          //инкрементируем счетчик малого понижения желаемой амплитуды (максимальной замеченной)
+    if(AD_MAX < Gyro.AD_Slow) { AD_MAX = Gyro.AD_Slow; l=0; }                      //обновление максимального значения амплитуды обнуление счетчика малого понижения амплитуды.                                                          *
+    else if((l == 150)&&(Gyro.PLC_Error2Mode == 0)) { AD_MAX -= 5107200;k=30;l=0;} //если счетчик малого понижения амплитуды больше 100(аммплитуда не обновлялась 100 раз). 
+    else if(Gyro.PLC_Error2Mode == 0) l++;                                         //инкрементируем счетчик малого понижения желаемой амплитуды (максимальной замеченной)
+    if     ((k == 30)&&(Gyro.PLC_Lern > 59))  Spi.DAC_B += 400;                    //после уменьшения максимальной амплитуды двигаем шевелем цап 
+    else if((k ==  1)&&(Gyro.PLC_Lern > 59)) {Spi.DAC_B -= 400; k=0;l=0;}          //для быстрог поиска новог максимума.
+    if(k>0)k--;
+                                                          
     Gyro.PlC_MaxD=(unsigned int)(AD_MAX-Gyro.AD_Slow);              //ищем разницу между желаемой и действительной амплитудами.  
-         
-    //ели небыло обновления максимальной амплитуды инкрементируем счетчика малого понижения амплитуды.
-    
-
+ 
   
     if(Gyro.RgConA&0x2) {	       // если  контур регулирования замкнут
          /*			else if ( Gyro.PLC_Delta > 	(3500 * 65536)) 	{Spi.DAC_B += 2500;	Gyro.PLC_Error2Mode = 5; 	Gyro.PLC_ADC_DOld = 0;}		// проверка на двух модовость
@@ -196,7 +191,7 @@
     else if(Gyro.PlC_MaxD<(2<<18)) {                     //режим если дельта равна 0;
         tempDac=2;
         Spi.DAC_B += Gyro.PLC_ADC_DOld * tempDac;
-        flagmod=1;
+        flagmod=0;
     } 
     else {
         tempDac=(unsigned int)(Gyro.PlC_MaxD>>19); 			// 1 режим регулирования
@@ -224,7 +219,7 @@
     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 %d %d\r\n", Spi.DAC_B, temp9, l, tempDac, flagmod, AD_MAX, Gyro.AD_Slow, k, Gyro.CuruAngle, Gyro.TermLM);//выдаем в терминал для постройки граффика регулировки периметра.
+        sprintf((Time),"%d %d %d %d %d %d %d %d %d %d\r\n", Spi.DAC_B, temp9, r, tempDac, flagmod, AD_MAX, Gyro.AD_Slow, Gyro.CuruAngle, Gyro.TermLM, Gyro.PLC_Lern );//выдаем в терминал для постройки граффика регулировки периметра.
         WriteCon(Time);
        // Gyro.CuruAngle = 0;
     }