Dmitry Kovalev / Mbed 2 deprecated LG2

Dependencies:   mbed

Fork of LG by igor Apu

Files at this revision

API Documentation at this revision

Comitter:
Kovalev_D
Date:
Wed May 04 14:01:57 2016 +0000
Parent:
149:abbf7663d27d
Child:
151:d565ce4d58c8
Commit message:
PLC

Changed in this revision

CntrlGLD.c Show annotated file Show diff for this revision Revisions of this file
Command.c Show annotated file Show diff for this revision Revisions of this file
Global.c Show annotated file Show diff for this revision Revisions of this file
HFO_Reg.c Show annotated file Show diff for this revision Revisions of this file
MTimer.c Show annotated file Show diff for this revision Revisions of this file
MTimer.h Show annotated file Show diff for this revision Revisions of this file
SPI.c Show annotated file Show diff for this revision Revisions of this file
main.c Show annotated file Show diff for this revision Revisions of this file
system_LPC17xx.c Show annotated file Show diff for this revision Revisions of this file
tabel.txt Show annotated file Show diff for this revision Revisions of this file
vibro.h Show annotated file Show diff for this revision Revisions of this file
--- a/CntrlGLD.c	Tue May 03 05:12:26 2016 +0000
+++ b/CntrlGLD.c	Wed May 04 14:01:57 2016 +0000
@@ -66,9 +66,9 @@
 /*
 void GLD_Status(void)     //r.---------- допусковый контроль параметров ГЛД --------------------------
 {
-    static uint32_t Device_Mode_Old = DM_INT_10KHZ_LATCH/*DM_EXT_LATCH_DELTA_SF_PULSE*/;
+    static uint32_t Device_Mode_Old = DM_INT_10KHZ_LATCH DM_EXT_LATCH_DELTA_SF_PULSE ;
 
-  /*  if ( loop_is_closed(GLD_ON) == 0 ) {
+    if ( loop_is_closed(GLD_ON) == 0 ) {
         open_all_loops();
         GLD_Stop();
     }
@@ -222,7 +222,7 @@
     }
 
 } // GLD_Pulse
-
+/*
 void contrl_GLD(void)     //r.========== процедура управления прибором ===============================
 {
     GLD_Start();   //r. запустить прибор, если есть запрос
@@ -230,7 +230,7 @@
     GLD_Stop();    //r. остановить прибор, если необходимо
     GLD_Pulse();   //r. генерация импульса поджига при наличии запроса
     GLD_Output();  //r. режимы выдачи данных из гироскопа
-} // contrl_GLD
+} */// contrl_GLD
 
 
 
--- a/Command.c	Tue May 03 05:12:26 2016 +0000
+++ b/Command.c	Wed May 04 14:01:57 2016 +0000
@@ -1016,18 +1016,18 @@
                 Spi.DAC_B -= 200;
              }
        ////////////////////////////////////////////////////////////////////////////////   
-                      /*Запись лога настройки частоты*/
+                      /*Запись лога регулировки частоты*/
             if (Time[0] == 'y')   Gyro.LogHZ=1;           //включит передачу
             if (Time[0] == 'u')   Gyro.StrayHZ_flag = 1;  //LPC_TIM1->MR0+1000  вносим помеху        
             if (Time[0] == 'i')   Gyro.StrayHZ_flag = 0;  //LPC_TIM1->MR0       убираем помеху  
             if (Time[0] == 'o')   Gyro.LogHZ=0;           //Отключить передачу
        ////////////////////////////////////////////////////////////////////////////////////     
-                      /*Запись лога настройки периметра*/
+                      /*Запись лога регулировки периметра*/
             if (Time[0] == 'g')   Gyro.LogPLC=1;           //включит передачу
-            if (Time[0] == 'h')   Gyro.StrayPLC_flag = 1;  //LPC_TIM1->MR0+1000  вносим помеху
-            if (Time[0] == 'j')   Gyro.StrayPLC_flag = 0;  
-            if (Time[0] == 'b')   Gyro.StrayPLC_flag = 3;  //LPC_TIM1->MR0-1000  вносим помеху
-            if (Time[0] == 'n')   Gyro.StrayPLC_flag = 2;  //LPC_TIM1->MR0       убираем помеху  
+            if (Time[0] == 'h')   Gyro.StrayPLC_flag = 1;  //LPC_TIM1->MR0+1000  вносим помеху +
+            if (Time[0] == 'j')   Gyro.StrayPLC_flag = 0;  //LPC_TIM1->MR0       убираем помеху  
+            if (Time[0] == 'b')   Gyro.StrayPLC_flag = 3;  //LPC_TIM1->MR0-1000  вносим помеху -
+            if (Time[0] == 'n')   Gyro.StrayPLC_flag = 2;  //LPC_TIM1->MR0+2500  большая помеха.  
             if (Time[0] == 'k')   Gyro.LogPLC=0;           //Отключить передачу       
       //////////////////////////////////////////////////////////////////////////////////////     
             if (Time[0] == '8') {		// выдача технологическая
--- a/Global.c	Tue May 03 05:12:26 2016 +0000
+++ b/Global.c	Wed May 04 14:01:57 2016 +0000
@@ -71,6 +71,9 @@
     Gyro.StrayPLC_2Mode	= 2000;
     Gyro.StrayPLC_flag	= 0;
     Gyro.LogPLC 		= 0;
+    Gyro.PLC_Lern=0;
+    Gyro.PLC_Error2Mode = 55;  // начальная задержка (работает СРП)
+    
 /////////////////////////////////////////////
 /////////////////////////////////////////////
 
--- a/HFO_Reg.c	Tue May 03 05:12:26 2016 +0000
+++ b/HFO_Reg.c	Wed May 04 14:01:57 2016 +0000
@@ -22,7 +22,7 @@
 
     /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
     //r. фильтрация выхода ампл. детектора перед передачей в контур ГВЧ
-    /*int HFO_MovAverFilt (int Input)
+   int HFO_MovAverFilt (int Input)
     {
     static __int64 smooth_HF = 0;
 
@@ -38,11 +38,11 @@
     i_HF &= (BUF_SIZE-1);
 
     return (smooth_HF>>22);	//shift on additional 6 bits for smoothing 2^6 = 64
-    }*/
+    }
 
 
-//                                                     HFO_SHIFT - число разрядов дробной части в 32-хбитовой переменной hf_reg32
-  /*  Input.StrIn.HF_out = HFO_MovAverFilt(Input.StrIn.HF_out<<HFO_SHIFT);
+                                                     HFO_SHIFT - число разрядов дробной части в 32-хбитовой переменной hf_reg32
+  Input.StrIn.HF_out = HFO_MovAverFilt(Input.StrIn.HF_out<<HFO_SHIFT);
 ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 
     Output.Str.HF_dif = L_sub(Device_blk.Str.HF_ref, Input.StrIn.HF_out); // HF_dif	= HF_out - Device_blk.Str.HF_ref;
--- a/MTimer.c	Tue May 03 05:12:26 2016 +0000
+++ b/MTimer.c	Wed May 04 14:01:57 2016 +0000
@@ -53,7 +53,7 @@
         Event1K --;
         Time1K++;//первый ++ работает каждые 125 (event100kHz)второй был в 100 кГц
         Time500Hz++;
-     LoopOn
+     //LoopOn
         if (Time1K == 1000) 
         {
             Time1K = 0;
@@ -65,7 +65,7 @@
             Time500Hz = 0;
             Event500Hz ++;
        }
-       LoopOff
+    //   LoopOff
           
     }
 }
--- a/MTimer.h	Tue May 03 05:12:26 2016 +0000
+++ b/MTimer.h	Wed May 04 14:01:57 2016 +0000
@@ -8,7 +8,9 @@
 extern void enable_timer2(void);
 extern unsigned int CountV31;
 extern unsigned int CountV255;
+extern unsigned int Init_TIM1 (unsigned int TimerInterval);
 
+extern unsigned int Init_TIM2 (void);
 extern void Event_500Hz(void);
 extern void Event_1Hz(void);        // событие раз в 1 Гц
 extern void Event_1KHz(void)  ;     // событие раз в 1 кГц
--- a/SPI.c	Tue May 03 05:12:26 2016 +0000
+++ b/SPI.c	Wed May 04 14:01:57 2016 +0000
@@ -8,7 +8,8 @@
 int AD_Regul = 0;
 int temp9;
 int AD_MAX=0;
-
+int k=0,l=0;
+ int flagmod=0;
 unsigned int Temp_ADC_2;
 unsigned int Temp_ADC_3;
 unsigned int Temp_ADC_4;
@@ -50,8 +51,8 @@
 
 		if (Gyro.ADF_Count > 15)					// если прошло 16 тактов виброподвеса
 		{
-			Gyro.AD_Fast = Gyro.ADF_Accum << 12;	//обновляем данные и приводим в один масштаб
-			Gyro.ADF_Count = 0;
+			Gyro.AD_Fast = Gyro.ADF_Accum << 12;	//обновляем данные и приводим в один масштаб 
+			Gyro.ADF_Count = 0;//                                                                   
 			Gyro.ADF_Accum = 0;
 			Gyro.ADF_NewData = 1;
 		}
@@ -130,12 +131,12 @@
 
 void PlcRegul(void)			//Программа расчет напряжения для модулятора
 {
-		int k;
+		
 		int PLC_In;
         int tempDelta;
         int tempDac;
-        int flagmod;
-     
+       
+    LoopOn
 		PLC_In = Gyro.AD_Slow;									//выбираем даные для фильтрации
 //		PLC_In = Gyro.AD_Fast;
         //или+,или-(знак)
@@ -145,9 +146,31 @@
 		//AD_MAX=1943420832;
 		       //15728640
 		//AD_MAX=1943400;       
-		if(AD_MAX<Gyro.AD_Slow)
-		{AD_MAX=Gyro.AD_Slow/*+2621440*10;*/;}
-        tempDelta=AD_MAX-Gyro.AD_Slow;
+		if(AD_MAX < Gyro.AD_Slow) {AD_MAX = Gyro.AD_Slow;l=0;}
+		else l++;
+		if(flagmod>2){
+			k++;
+			  if(k>30)
+			    {
+				 k=0;  //1948558064
+			     AD_MAX -= 13107200; //= 50
+			    }
+			}       //   5242880 = 20 
+			else k=0;
+		if(l>30) {AD_MAX -= 13107200; l=0;}
+        tempDelta=(unsigned int)(AD_MAX-Gyro.AD_Slow);
+        
+    if( (Gyro.PLC_Lern<51)&&(Gyro.PLC_Error2Mode != 0))//пробигаем по нескольким значениям цап(50*0х3с=0хВВ8) для определения максимальной амплитуды.
+    { 
+      Gyro.PLC_Lern++;
+      Spi.DAC_B += 0x1e;
+      if(AD_MAX < Gyro.AD_Slow) AD_MAX = Gyro.AD_Slow;
+      sprintf((Time)," Gyro.AD_Slow=%d Spi.DAC_B=%d AD_MAX=%d\r\n", Gyro.AD_Slow,Spi.DAC_B,AD_MAX);
+      WriteCon(Time);
+    }
+    
+        
+        
 	    if(Gyro.RgConA&0x2)											// если включон контур регулирования
 	    {	
 			if 		( Gyro.PLC_Error2Mode > 0)				{Gyro.PLC_Error2Mode --; 						Gyro.PLC_ADC_DOld = 0;} 	// если ошибка(нахожление в двух модовом)
@@ -160,25 +183,30 @@
 				Gyro.PLC_ADC_DOld = 1;
 			}
 		}
-		else 
-		{
-			Gyro.PLC_Error2Mode = 1; Gyro.PLC_DeltaADD = 0;
-		}
-		if(((tempDelta>>18)>30)||((tempDelta>>18)<(-30)))
+		else {Gyro.PLC_Error2Mode = 1; Gyro.PLC_DeltaADD = 0;}
+		
+		
+		if(((tempDelta>>18)>50)||((tempDelta>>18)<(-50)))
 		{   
 		    tempDac=(unsigned int)(tempDelta>>18);
-		    if(tempDac>450) {tempDac=400;}
-			Spi.DAC_B += Gyro.PLC_ADC_DOld * tempDac/*Gyro.PLC_Delta>>18*/;
+		    if(tempDac>400) {tempDac=400;}
+			Spi.DAC_B += Gyro.PLC_ADC_DOld * tempDac;
 			tempDac   =  Gyro.PLC_ADC_DOld * tempDac;
 			flagmod=3;
 		}
-		else if(((tempDelta>>18)>10)||((tempDelta>>18)<(-10)))
+        else if(((tempDelta>>18)>20)||((tempDelta>>18)<(-20)))
 		{
 			tempDac=(unsigned int)(tempDelta>>18);
-			Spi.DAC_B += Gyro.PLC_ADC_DOld * (tempDac);
-			tempDac    = Gyro.PLC_ADC_DOld * (tempDac);
+			Spi.DAC_B += Gyro.PLC_ADC_DOld * (tempDac-5);
+			tempDac    = Gyro.PLC_ADC_DOld * (tempDac-5);
 			flagmod=2;
 		}
+		else if(tempDelta>>18<2)
+		{
+		 tempDac=5;
+		 Spi.DAC_B += Gyro.PLC_ADC_DOld * tempDac;
+		 flagmod=1;
+		}
         else
         {
            	tempDac=(unsigned int)(tempDelta>>19);
@@ -190,15 +218,13 @@
 			
 		if ( Spi.DAC_B < 1000 ) 	{Spi.DAC_B = 32000;  Gyro.PLC_Error2Mode = 5; Gyro.PLC_DeltaADD = 0;}
 		if ( Spi.DAC_B > 63000 ) 	{Spi.DAC_B = 32000;  Gyro.PLC_Error2Mode = 5; Gyro.PLC_DeltaADD = 0;}
-
-k=1;
 		
 		if(Gyro.LogPLC==1)
 		{
-		sprintf((Time),"%d %d %d %d %d\r\n", Spi.DAC_B, temp9,tempDelta>>18,tempDac,flagmod/*(Gyro.PLC_ADC_DOld * Gyro.PLC_Delta>>18)*/);//выдаем в терминал для постройки граффика регулировки периметра.
+		sprintf((Time),"%d %d %d %d %d %d %d %d\r\n", Spi.DAC_B, temp9,tempDelta>>18,flagmod,tempDac,AD_MAX, Gyro.AD_Slow, k/*(Gyro.PLC_ADC_DOld * Gyro.PLC_Delta>>18)*/);//выдаем в терминал для постройки граффика регулировки периметра.
         WriteCon(Time);
         }
- 
+LoopOff
  }
 
 
--- a/main.c	Tue May 03 05:12:26 2016 +0000
+++ b/main.c	Wed May 04 14:01:57 2016 +0000
@@ -36,27 +36,29 @@
 int main (void)
 {
 SystemInit1();  // Инициализация контроллера: установка тактовых частот
-SystemCoreClockUpdate1(); // расчет тактовой частоты процессора перед инициализацией UART - 100MHz
+SystemCoreClockUpdate1(); // расчет тактовой частоты процессора перед инициализацией UART - 103MHz
 GLD_Init();
 
-      UART_InitSet (0, 921600, 0x03);  // надо проверить, мож чо с ногам
+      UART_InitSet (0, 921600, 0x03); 
    // UART_InitSet (1, 921600, 0x03);
       UART_InitSet (1, 115200, 0x03);
 
-    IntLatch_Init();		  // инициализация внутренней защелки.
-    ExtLatch_Init();		  // инициализация внешней защелки.
-    LoadFlashParam(FromFLASH); 	//загрузка параметров.
-    init_PLC();                                //Инициализация СРП(регулировка периметра)
-    init_Dither_reg();                         //инициализация вибропривода
+// IntLatch_Init();		  // инициализация внутренней защелки.
+// ExtLatch_Init();		  // инициализация внешней защелки.
+// LoadFlashParam(FromFLASH); 	//загрузка параметров.
+// init_PLC();                                //Инициализация СРП(регулировка периметра)
+// init_Dither_reg();                         //инициализация вибропривода
 
     Out_G_photo(200,200);        //запись в буфер мастера принятые от функции данные (60,60) и установка флага старта передачи и занятой шины.
     WriteCon1("\n\r ...GL start programm uart ACK.... ");
     WriteCon("\n\r ...GL start programm uart Tech.... ");
     sprintf(Time,"\r\nCompiled: %s %s.",__DATE__,  __TIME__ );                 //Подготовка даты и времени компиляции
     WriteCon(Time);
+    
 
-Gyro.PLC_Error2Mode = 10;  // начальная задержка (неработает СРП)
-    while ( 1 ) { //основной цикл.
+
+while ( 1 ){ //основной цикл.
+
        	G_Photo_Exchange();	
         Concol ();				// Проврка 0 консоли  (вход и выход)
         Concol1 ();		        // Проврка 0 консоли  (вход и выход)
@@ -71,29 +73,37 @@
         Event_500Hz();
         Event_1Hz();
         Event_Vibro();
-        
-	 switch(Gyro.ModeOut) {
-     case 1:
-            if(Gyro.Rate1_Event    == 1) CMD_Rate();
-     break;  
-     case 2:
-            if(Gyro.Rate2_Event    == 1) CMD_Rate2();
-     break;    
-     case 3:
-            if(Gyro.Delta500_Event == 1) CMD_Delta_500Hz();
-     break;   
-     case 4:
-            if(Gyro.EXT_Latch      == 1) CMD_Delta_Ext();
-     break;       		   		
-     } 
-    if (Spi.ADC_NewData     == 1) {ADS_Acum();								 	}  // был приход новых данных по ацп сдесь сделать обработку информации и подготовку для выдачи делается 1 раз за вибро
-	if (Gyro.ADF_NewData    == 1) {Gyro.ADF_NewData = 0;                    	}  // был приход новых данных После быстрого фильтра AD	
-	if (Gyro.ADS_NewData    == 1) {Gyro.ADS_NewData = 0;     PlcRegul();     	}  // был приход новых данных После Медленного фильтра AD
-    if (Gyro.VibroFrqRegulF == 1) {Gyro.VibroFrqRegulF = 0;	 VibroFrqRegul();	}	//Регулеровка частоты виброподвеса    
-    if (Gyro.VibroAMPRegulF == 1) {Gyro.VibroAMPRegulF = 0;	 VibroAMPRegul();   }	//Регулеровка Амплитуды виброподвеса
-    if (Gyro.VibroNoiseF    == 1) {Gyro.VibroNoiseF = 0;	 CalcAmpN();	    }//регулеровка ошумления, наверно нужно объеденить с регулеровкой ампитуды
-    if(Gyro.VibroOutF       == 1) {Gyro.VibroOutF = 0;		 VibroOut();		}// установка ног в регисторе тоже подумать , зачем отделный флаг? наверно 
-    if( (Gyro.LogHZ == 1)&&(Gyro.Event_500Hz==1))				
+   
+   
+    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+    ////////////////////////////////////выдача параметров через Rate////////////////////////////////////////////////////////////////
+    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////   
+	switch(Gyro.ModeOut) {
+    case 1: if(Gyro.Rate1_Event    == 1) CMD_Rate();  		   break;  
+    case 2: if(Gyro.Rate2_Event    == 1) CMD_Rate2(); 		   break;    
+    case 3: if(Gyro.Delta500_Event == 1) CMD_Delta_500Hz();    break;   
+    case 4: if(Gyro.EXT_Latch      == 1) CMD_Delta_Ext();      break;       		   		
+    }
+   
+   
+    ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+    /////////////////////////////////////////////////контуры регулировки///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+    /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 
+    if (Spi.ADC_NewData     == 1) {ADS_Acum();								 	}   // был приход новых данных по ацп сдесь сделать обработку информации и подготовку для выдачи делается 1 раз за вибро
+	if (Gyro.ADF_NewData    == 1) {Gyro.ADF_NewData = 0;                    	}   // был приход новых данных После быстрого фильтра AD	
+	if (Gyro.ADS_NewData    == 1) {Gyro.ADS_NewData = 0;     PlcRegul();     	}   // был приход новых данных После Медленного фильтра AD (гдето раз в 38 - 40 секунд )//регулировка периметра.
+    if (Gyro.VibroFrqRegulF == 1) {Gyro.VibroFrqRegulF = 0;	 VibroFrqRegul();	}	// Регулеровка частоты виброподвеса    
+    if (Gyro.VibroAMPRegulF == 1) {Gyro.VibroAMPRegulF = 0;	 VibroAMPRegul();   }	// Регулеровка Амплитуды виброподвеса
+    if (Gyro.VibroNoiseF    == 1) {Gyro.VibroNoiseF = 0;	 CalcAmpN();	    }	// регулеровка ошумления, наверно нужно объеденить с регулеровкой ампитуды
+    if (Gyro.VibroOutF      == 1) {Gyro.VibroOutF = 0;		 VibroOut();		}	// установка ног в регисторе тоже подумать , зачем отделный флаг? наверно 
+    
+    
+  
+   /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+   ////////////////////////////////////////////////////выдача частоты в терминал длля записи лога///////////////////////////////////////////////////////////////////////////////////////////////////////
+   /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+   //////G=1,K=0 в терменале 
+    if((Gyro.LogHZ == 1)&&(Gyro.Event_500Hz==1))	//Запись длля Ориджина.		
     {
     	 Gyro.Event_500Hz=0;
      	 sprintf((Time),"%d \r\n",LPC_TIM1->MR0);
--- a/system_LPC17xx.c	Tue May 03 05:12:26 2016 +0000
+++ b/system_LPC17xx.c	Wed May 04 14:01:57 2016 +0000
@@ -703,8 +703,6 @@
 
 
 void SystemInitDef (void)
-
-
 {
 
 
--- a/tabel.txt	Tue May 03 05:12:26 2016 +0000
+++ b/tabel.txt	Wed May 04 14:01:57 2016 +0000
@@ -95,7 +95,7 @@
 |------------------------|---------------------------------------------------------------|----------------------|----------------------------------|------------------------------------|   
 |                        |                                                               |                      |                                  | Gyro.Termo=Spi.ADC2_Accum >> 5;    | 
 |     Gyro.DeltaT        |                    данные с второго АЦП                       |      unsigned int    |  ------------------------------  |  Spi.ADC2_Accum - накопленные      |
-|                        |      (градиент температур между двумя термодатчиками (Hel509) |                      |  ------------------------------  |   данные за такт виброподвеса      |
+|                        |      (градиент температур между двумя термодатчиками0         |                      |  ------------------------------  |   данные за такт виброподвеса      |
 |                        |                                                               |                      |                                  |                                    |
 |------------------------|---------------------------------------------------------------|----------------------|----------------------------------|------------------------------------|   
 |                        |                                                               |                      |                                  |  Gyro.Termo=Spi.ADC3_Accum >> 5;   | 
--- a/vibro.h	Tue May 03 05:12:26 2016 +0000
+++ b/vibro.h	Wed May 04 14:01:57 2016 +0000
@@ -17,6 +17,7 @@
 #define  TIME_INTERVAL	(7812)
 
 
+
 extern int tempAMP;
 typedef struct _Gyro {
    
@@ -30,7 +31,7 @@
    unsigned int StrayPLC_2Mode;
    unsigned int	StrayPLC_flag;
    unsigned int	LogPLC;
-   
+   unsigned int	PLC_Lern;
    
    
    unsigned int Test_time;
@@ -293,6 +294,8 @@
 extern void VibroOut(void);
 extern void Discharg (void);
 extern void BackLight (void);
+extern void VibroAMPRegul(void);
+extern void VibroFrqRegul(void);
 extern unsigned int FrecTp;
 extern int Pulse_midl;
 extern struct VIBRO Vib;