forkd

Dependencies:   mbed

Fork of LG2 by Dmitry Kovalev

Revision:
193:a0fe8bfc97e4
Parent:
192:d32c8cf7bcd9
Child:
195:bcc769f5292b
--- a/SPI.c	Thu Sep 01 08:23:30 2016 +0000
+++ b/SPI.c	Thu Sep 15 11:09:00 2016 +0000
@@ -115,37 +115,41 @@
 
 void PlcRegul(void)																//Программа расчет напряжения для модулятора(//выполняется 1.25 микросек.)
 {
-    //LoopOn
     int PLC_In;
     int tempDac;
     if(!(Gyro.PinReg & PinRegBitL) && (start>0)) start--; 
-  if((start==0)){
-     if(!(Gyro.PinReg & PinRegBitL))  PLC_In = Gyro.AD_Slow;					//выбираем даные для фильтрации
+    if((start==0))
+      {
+         PLC_In = Gyro.AD_Slow;					//выбираем даные для фильтрации
    		 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=3;
+         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) для определения максимальной амплитуды.
-        	Spi.DAC_B += 0x3c;         			                               	//добовляем в значение цапа 60
-        	if(AD_MAX < PLC_In){AD_MAX = PLC_In;}    	 	          		    //если максимальная амплитуда меньше текущей записываем новую максимальную амплитуду.      
-        	else if ((AD_MAX>PLC_In)&&(AD_MAX>1500800000)) r++;    	      		//если текущая амплитуда меньше максимально найденной то инкрементируем счетчик.
-        	if (r>10){
-        		Gyro.PLC_Lern=150;
-        		Gyro.PLC_Error2Mode=3;
+         if((Gyro.PLC_Lern < 150) && (Gyro.PLC_Error2Mode != 0)) 
+            {    			//пробигаем по нескольким значениям цап(60*0х3с=0хВВ8) для определения максимальной амплитуды.
+        		Spi.DAC_B += 0x3c;         			                               	//добовляем в значение цапа 60
+        		if(AD_MAX < PLC_In){AD_MAX = PLC_In;}    	 	          		    //если максимальная амплитуда меньше текущей записываем новую максимальную амплитуду.      
+        		else if ((AD_MAX>PLC_In)&&(AD_MAX>1500800000)) r++;    	      		//если текущая амплитуда меньше максимально найденной то инкрементируем счетчик.
+        		if (r>10)
+        		{
+        			Gyro.PLC_Lern=150;
+        			Gyro.PLC_Error2Mode=3;
         		}		       													//если текущая амплитуда меньше максимально найденной в течении 5 тактов то выходим из поиска
-         Gyro.CuruAngle = 0;   													//не считаем угол пока ищем максивальную амплитуду.
-        } 																		//работает только первые ~30-40 секунд (37 сек).
-     if (Gyro.PLC_Lern<250) Gyro.PLC_Lern++;  
+         		Gyro.CuruAngle = 0;   													//не считаем угол пока ищем максивальную амплитуду.
+        	} 																		//работает только первые ~30-40 секунд (37 сек).
+     if (Gyro.PLC_Lern<160) Gyro.PLC_Lern++;  
+     
      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--;
+     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;                //после уменьшения максимальной амплитуды двигаем шевелем цап 
+     else if((k ==  1)&&(Gyro.PLC_Lern > 150))  {Spi.DAC_B -= 200; k=0;l=0;}      //для быстрог поиска новог максимума.
+     if(k>0)k--;*/
                                                           
      Gyro.PlC_MaxD=(unsigned int)(AD_MAX-PLC_In);              					//ищем разницу между желаемой и действительной амплитудами.  
  
@@ -176,7 +180,8 @@
     
     tempADC5=0x7fff-Spi.ADC5;
     //  контур замкнут       включен лазер			
-    if((Gyro.RgConA&0x8) && (tempADC5>1000)) {
+    if((Gyro.RgConA&0x8) && (tempADC5>1000)) 
+      {
    		      if(Gyro.PlC_MaxD>(50<<17)) {										//3 режим регулирования
       		  tempDac=(unsigned int)(Gyro.PlC_MaxD>>19);
      		  if(tempDac>600) {tempDac=600;} 									//ограничение на регулирование если очень большая разница амплитуд