fork

Dependencies:   mbed

Fork of LG by igor Apu

Revision:
202:c03b7b128e11
Parent:
201:76f4123bf22a
--- a/SPI.c	Wed Nov 02 14:05:24 2016 +0000
+++ b/SPI.c	Fri Nov 18 06:07:37 2016 +0000
@@ -2,16 +2,15 @@
 struct SPI Spi;
 //unsigned int Temp_AMP;
 unsigned int Temp_AMP64P;
-int ttt=1;
+int TempShift=1;
 unsigned int Count_AMP, ADD_AMP, Cur_Amp;
-int Znak_Amp;
 int AD_Regul = 0;
 int temp9,tempADC5;
 int AD_MAX=0;
-int k=0,l=0,r=0,n=0;//счетчики для регулировки периметра
+int k=0,l=0,r=0;//счетчики для регулировки периметра
 int flagmod=0,Bdelta;
 int start=1;
-int dispersion=0,side=1,tempstrafe=15000;
+int flagPLC=0,templm=0;
 unsigned int Temp_ADC_2;
 unsigned int Temp_ADC_3;
 unsigned int Temp_ADC_4;
@@ -19,7 +18,7 @@
 unsigned int TempA;
 unsigned int TempTermLM;
 
-int ADC5Old,ADCDIF=0;
+int ADC5Old,ADCDIF=0,ADCDIFconsol=0;
 int DACModReg;
 int SinPls=0,SinMns=0;
 unsigned int ADC5New;
@@ -47,7 +46,6 @@
 unsigned int TypeMod=0;
 unsigned int ModArraySin	  [64] = {50,55,59,64,68,73,77,81,85,88,91,94,96,98,99,99,100,99,99,98,96,94,91,88,85,81,77,73,68,64,59,55,50,45,41,36,32,27,23,19,16,12,9,7,4,2,1,1,0,1,1,2,4,7,9,12,16,19,23,27,32,36,41,45};
 unsigned int ModArrayTriangle [64];
-unsigned int ModArraySaw	  [64];
 unsigned int Mod=0;                                           
 
 void InitMOD(void)
@@ -57,48 +55,53 @@
    	 if(i<32)   { ModArrayTriangle[i]=Mod; Mod+=3;}
    	 else       { ModArrayTriangle[i]=Mod; Mod-=3;}
      }
-    
-     for (int i = 0; i < 64; i++ ) 
- 	 { 
-      ModArraySaw[i]=Mod;
-      Mod+=2;
-     }
 }
 void Modulator(void)
 {
 	switch(TypeMod) 
 		{
 	    case 0: LPC_DAC->DACR = (ModArraySin		[CountV64]*Gyro.ModAmp);    break;
-	    case 1: LPC_DAC->DACR = (ModArraySaw		[CountV64]*Gyro.ModAmp);  	break;
 	    case 2: LPC_DAC->DACR = (ModArrayTriangle	[CountV64]*Gyro.ModAmp);  	break;
 	    }
 }
 void  PLCRegul(void)
 {
- 
- if (CountV64 == 63) 
-        {
-          for (int i = 0; i < 32; i++ )
-                {
-                	SinPls+=  BuffADC_64Point[i];
-                }
-           for (int i = 32; i < 64; i++ )
-                {
-                	SinMns+=  BuffADC_64Point[i];
-                }
-        ADCDIF = SinPls - SinMns;    
-  	
-       /* if(ADCDIF>0) Spi.DAC_B-=3;
-        else Spi.DAC_B+=3;*/
-        Spi.DAC_B -= ADCDIF>>7;
-        if      ( Spi.DAC_B < 15300 )	Spi.DAC_B = 32000;            //проверка на переваливание за границу.  
-        else if ( Spi.DAC_B > 53000 ) 	Spi.DAC_B = 32000;
-
-      /*sprintf((Time),"%d %d %d %d %d \r\n", SinPls, SinMns, Gyro.Start, Gyro.Termo, Spi.DAC_B);//выдаем в терминал для постройки граффика регулировки периметра.
-          WriteCon(Time);*/
-   		SinPls=0;
-   		SinMns=0;
+ if(Gyro.Start==200)
+ 	{//           +25 С°
+ 	  if(flagPLC==0)
+ 	    {  //Spi.DAC_B=32767;
+    		templm = (Gyro.TermoNKU-Gyro.Termo); //дельта температуры от нку
+      		Spi.DAC_B+=templm; //сдвиг начальной точки цап
+    		flagPLC=1;//выставка флага для начала регулирования
+    	}
+    }
+   if(Gyro.LogPLC)//Gyro.LogPLC=1-без выдачи, 2 - с выдачей, 0 - дисперсионка.
+    {
+ 	  if(flagPLC)
+ 		{
+ 			if (CountV64 == 63) //прошло 2 такта виброподвеса 200Hz
+       			 {
+	        	  for (int i = 0; i < 31; i++ )//считаем сумму амплитуд по положительной полуволне
+	           	      {
+	           			SinPls+=  BuffADC_64Point[i];
+	               	  }
+			      for (int i = 32; i < 63; i++ )
+	           		  {
+			        	SinMns+=  BuffADC_64Point[i];//по отрицательной полуволне
+			          }		
+       			  ADCDIF = SinPls - SinMns;    // разница между полуволнами
+/* if(ADCDIF>0) Spi.DAC_B-=3;
+else Spi.DAC_B+=3;*/
+    			  Spi.DAC_B -= ADCDIF>>9;// регулировка периметра в зависимости от величины разници двух полуволн.
+       			  ADCDIFconsol+=ADCDIF>>9;
+       			 
+       			  if      ( Spi.DAC_B < 15300 )	Spi.DAC_B = 32000;            //проверка на переваливание за границу.  
+        		  else if ( Spi.DAC_B > 53000 ) Spi.DAC_B = 32000;
+   				  SinPls=0;
+   				  SinMns=0;
+                 }
         }
+     }   
 }
 
 
@@ -138,16 +141,16 @@
 void SPI_Exchange(void)  // новая функция чтения, в нецй не должно быть ничего лишнего
 { 
     unsigned int DummySPI;
-  /*  
-    if(Gyro.Start>2000) DummySPI = LPC_SSP0->DR;*/
-    //unsigned int ADC5Dif;
-    
+ 
+  //  BackLightON
     ADC5New = LPC_SSP0->DR;// Чтение АЦП
   //Spi.ADC5_Accum += LPC_SSP0->DR;
     Spi.ADC4_Accum += LPC_SSP0->DR;
     Spi.ADC3_Accum += LPC_SSP0->DR;
     Spi.ADC2_Accum += LPC_SSP0->DR;
     Spi.ADC1_Accum += LPC_SSP0->DR;
+    
+    
     Spi.ADC5_Accum += ADC5New;	
    
        
@@ -155,6 +158,7 @@
     DummySPI = LPC_SSP0->DR;   //если буфер SPI не пуст.//очистить буфер.
     }
     DAC_OutPut();
+    
     if (CountV31 == 0) {						// просто фильтруем по 32 точкам.
          										// выставояем бит, что есть новы данные
         Spi.ADC1 = Spi.ADC1_Accum >> 5;			// подгоотавливаем данные (в той эе сетке) те 	 ADC1  0..65535
@@ -172,8 +176,33 @@
         BuffADC_64Point[CountV64]=ADC5New;
         Buff_ADC_5[CountV255] = (0x7fff-ADC5New)<<2;
         PLCRegul();
+      // BackLightOFF
 }
 
+
+void ShowMod(void)//технологическая функция для просмотра в ориджине мод на всем диапазпне цап
+{
+	
+    //////////////////////////////////////////////////////////////////////////////////////////////////
+    //////////////////////////////////смотрим все моды/////////////////////////////////////////////////
+    ///////////////////////////////////////////////////////////////////////////////////////////////////
+   
+      if( (Gyro.PLC_Lern<60000)&&(Gyro.PLC_Error2Mode >1))//пробигаем по нескольким значениям цап(60*0х3с=0хВВ8) для определения максимальной амплитуды.
+        {
+          Gyro.PLC_Error2Mode--;
+          Gyro.PLC_Lern++;
+          Spi.DAC_B += 40;
+        } 
+      else {Gyro.LogPLC=1;}  
+     
+      sprintf((Time),"%d %d %d %d \r\n", Gyro.CuruAngle, Spi.DAC_B, Gyro.AD_Slow, Gyro.Termo);
+      Gyro.CuruAngle=0;
+      WriteCon(Time);
+}
+
+
+
+/*
 void ShowMod(void)//технологическая функция для просмотра в ориджине мод на всем диапазпне цап
 {
 	
@@ -199,9 +228,7 @@
       Gyro.CuruAngle=0;
       WriteCon(Time);
 }
-
-
-
+*/
 
 
 void PlcRegul(void)		
@@ -213,13 +240,13 @@
     int tempDac;
     if(start<=5)
     {
-    	if(ttt)
+    	if(TempShift)
     	{//           +25 С°
     	templm = (Gyro.TermoNKU-Gyro.Termo); //дельта 
     	if(templm>0) Gyro.Ktermo=1;
     	else Gyro.Ktermo=0;
     	Spi.DAC_B+=templm;
-    	ttt=0;
+    	TempShift=0;
     	}
     }
  
@@ -333,13 +360,13 @@
     //////////лог//////////
     ///////////////////////
     if(Gyro.LogPLC==1) {
-       // LoopOn
+
         sprintf((Time),"%d %d  %d %d %d %d %d %d %d \r\n",Gyro.CuruAngle, Gyro.Frq, Gyro.MaxAmp, Spi.DAC_B, tempDac,  flagmod, AD_MAX, PLC_In, Gyro.Termo);//выдаем в терминал для постройки граффика регулировки периметра.
         Gyro.CuruAngle=0;
         Gyro.tempdelta=0;
         Gyro.tempdelta2=0;
         WriteCon(Time);
-      //  LoopOff     
+      //       
     }
 }
 
@@ -445,8 +472,10 @@
 */
 
 void DAC_OutPut(void)//выдача в цапы
-{
-    Modulator();
+{  
+    if(Gyro.LogPLC) Modulator();
+    
+
     LPC_SSP0->DR=0x5555;
     LPC_SSP0->DR=0x5555;
     LPC_SSP0->DR=0x5555;
@@ -454,35 +483,14 @@
     if (CountV31 & 1) {                      	//если нечетный такт то
         LPC_SSP0->DR = WRITE_DAC0;   			//e.команда для ЦАП_0 передавать.
         LPC_SSP0->DR = (Spi.DAC_A);         	//e. передача 12 бит
-    } else { //если такт четный.
-        LPC_SSP0->DR = WRITE_DAC1 ; //e.команда для ЦАП_1 передавать.
-
-        switch( Gyro.StrayPLC_flag) {
-
-            case 0://режим без воздействия
-                LPC_SSP0->DR = (Spi.DAC_B);
-                temp9=Spi.DAC_B;
-                break;
-/*
-            case 1://малое воздействие +
-                temp9=Spi.DAC_B + Gyro.StrayPLC_Pls;
-                LPC_SSP0->DR = temp9;
-                break;
-
-            case 3://малое воздействие -
-                temp9=Spi.DAC_B + Gyro.StrayPLC_Mns;
-                LPC_SSP0->DR = temp9;
-                break;
-
-            case 2://большое воздействие +
-                temp9=Spi.DAC_B + Gyro.StrayPLC_2Mode;
-                LPC_SSP0->DR = temp9;//вгоняем в многомодовый режим
-                break;
-*/
+    } 
+    else { //если такт четный.
+        LPC_SSP0->DR = WRITE_DAC1; //e.команда для ЦАП_1 передавать.
+        LPC_SSP0->DR = (Spi.DAC_B);
+        temp9=Spi.DAC_B;
         }
-        // LPC_SSP0->DR = Spi.DAC_B;        	//e. передача 12 бит
-
-    }
+    
+   
 }