fork

Dependencies:   mbed

Fork of LG by igor Apu

Revision:
188:4c523cc373cc
Parent:
179:2b4e6bc277df
Child:
189:8a16378724c4
--- a/SPI.c	Mon Aug 01 14:03:08 2016 +0000
+++ b/SPI.c	Fri Aug 19 14:02:02 2016 +0000
@@ -10,7 +10,8 @@
 int temp9;
 int AD_MAX=0;
 int k=0,l=0,r=0;
-int flagmod=0;
+int flagmod=0,Bdelta;
+
 unsigned int Temp_ADC_2;
 unsigned int Temp_ADC_3;
 unsigned int Temp_ADC_4;
@@ -125,28 +126,29 @@
     int tempDac;
 
 
-    PLC_In =Gyro.AD_Slow;											//выбираем даные для фильтрации
+    PLC_In = Gyro.AD_Slow;											//выбираем даные для фильтрации
    // PLC_In = (unsigned int)(PLC_In>>1);	
     Gyro.PLC_Delta 	  = PLC_In - Gyro.PLC_Old;						// узнаем приращение
     Gyro.PLC_DeltaADD = Gyro.PLC_Delta * Gyro.PLC_ADC_DOld;			//приращение с учетом знака (и количества) прошлого приращения
     Gyro.PLC_Old 	  = PLC_In;										// запоминание значения
     
-    if(Gyro.flagGph_W){AD_MAX=0;Gyro.flagGph_W--;Gyro.PLC_Error2Mode=1;}   //если изменился коэфициент усиления ФД  //3600 (размер моды порядка 3000)
+    if(Gyro.flagGph_W){AD_MAX=0; Gyro.flagGph_W--; Gyro.PLC_Error2Mode=3;}   //если изменился коэфициент усиления ФД  //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 < PLC_In){AD_MAX = PLC_In;}    	 	//если максимальная амплитуда меньше текущей записываем новую максимальную амплитуду.      
-        else if ((AD_MAX>PLC_In)&&(AD_MAX>1502800000)) r++;    	//если текущая амплитуда меньше максимально найденной то инкрементируем счетчик.
-        if      (r>5){Gyro.PLC_Lern=150;Gyro.PLC_Error2Mode=5;}         //если текущая амплитуда меньше максимально найденной в течении 5 тактов то выходим из поиска
+        else if ((AD_MAX>PLC_In)&&(AD_MAX>1500800000)) r++;    	//если текущая амплитуда меньше максимально найденной то инкрементируем счетчик.
+        if      (r>10){Gyro.PLC_Lern=150;Gyro.PLC_Error2Mode=8;}         //если текущая амплитуда меньше максимально найденной в течении 5 тактов то выходим из поиска
                          
         Gyro.CuruAngle = 0;   //не считаем угол пока ищем максивальную амплитуду.
     } //работает только первые ~30-40 секунд (37 сек).
 
 
     
-    if(AD_MAX < PLC_In) {AD_MAX = PLC_In; 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(AD_MAX < PLC_In) {AD_MAX = PLC_In; l=0;}                      //обновление максимального значения амплитуды обнуление счетчика малого понижения амплитуды.                  
+    else l++;                                   
+    if((l == 40)&&(Gyro.PLC_Error2Mode == 0)) {AD_MAX -= 5107200;k=30;l=0;} //если счетчик малого понижения амплитуды больше 100(аммплитуда не обновлялась 100 раз). m 
+                                                                             //инкрементируем счетчик малого понижения желаемой амплитуды (максимальной замеченной)
     if     ((k == 30)&&(Gyro.PLC_Lern > 59))  Spi.DAC_B += 200;                    //после уменьшения максимальной амплитуды двигаем шевелем цап 
     else if((k ==  1)&&(Gyro.PLC_Lern > 59)) {Spi.DAC_B -= 200; k=0;l=0;}          //для быстрог поиска новог максимума.
     if(k>0)k--;
@@ -175,13 +177,16 @@
        Spi.DAC_B -= 12500;
        Gyro.PLC_Error2Mode=4;
     } 
+    if (Bdelta>20)
+    {AD_MAX=1510800000;}
     if(Gyro.RgConA&0x8) {
    		      if(Gyro.PlC_MaxD>(50<<17)) {							// 3 режим регулирования
       		  tempDac=(unsigned int)(Gyro.PlC_MaxD>>19);
-     		  if(tempDac>600) tempDac=600;   //ограничение на регулирование если очень большая разница амплитуд
+     		  if(tempDac>600) {tempDac=600;  Bdelta++; } //ограничение на регулирование если очень большая разница амплитуд
        		  Spi.DAC_B += Gyro.PLC_ADC_DOld * tempDac;      //новое значение в цап (±1 * значение регулировки)
       		  tempDac   =  Gyro.PLC_ADC_DOld * tempDac;      //используется только для выдачи
       		  flagmod=3;
+      		   		 
   		    } 
 		    else if(Gyro.PlC_MaxD>(12<<17)) {					// 2 режим регулирования
       		  tempDac=(unsigned int)(Gyro.PlC_MaxD>>19);
@@ -218,7 +223,7 @@
     //////////лог//////////
     ///////////////////////
     if(Gyro.LogPLC==1) {
-        sprintf((Time),"%d %d %d %d %d %d %d %d %d %d\r\n", Spi.DAC_B, temp9, r, tempDac, flagmod, AD_MAX, PLC_In, (Gyro.Frq>>16), Gyro.AmpPer, Gyro.CuruAngle);//выдаем в терминал для постройки граффика регулировки периметра.
+        sprintf((Time),"%d %d %d %d %d %d %d %d %d %d\r\n", Gyro.AD_Slow, temp9, r, tempDac, flagmod, AD_MAX, PLC_In, (Gyro.Frq>>16), Spi.DAC_A, Gyro.In2);//выдаем в терминал для постройки граффика регулировки периметра.
         WriteCon(Time);
     }
 }