fork

Dependencies:   mbed

Fork of LG by igor Apu

Revision:
141:c6de20b9b483
Parent:
140:1fbf117fc120
Child:
142:7a6f68601291
--- a/SPI.c	Mon Apr 25 13:33:57 2016 +0000
+++ b/SPI.c	Tue Apr 26 13:42:09 2016 +0000
@@ -6,7 +6,7 @@
 unsigned int Count_AMP, ADD_AMP, Cur_Amp;
 int Znak_Amp;
 int AD_Regul = 0;
-
+int temp9;
 
 
 unsigned int Temp_ADC_2;
@@ -67,6 +67,118 @@
 
 }
 
+
+
+
+
+void PlcRegul(void)			//Программа расчет напряжения для модулятора
+{
+		int k;
+		int PLC_In;
+
+
+		PLC_In = Gyro.AD_Slow;									//выбираем даные для фильтрации
+//		PLC_In = Gyro.AD_Fast;
+        //или+,или-(знак)
+		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.RgConA&0x2)											// если включон контур регулирования
+	    {	
+	  
+	  	    if 		( Gyro.PLC_Delta >	( 100 * 65536)) k=256;
+	  	    else if ( Gyro.PLC_Delta < 	(-100 * 65536)) k=256;
+	  	    
+	  	    else if ( Gyro.PLC_Delta >	( 55 * 65536)) k=64;
+	  	    else if ( Gyro.PLC_Delta < 	(-55 * 65536)) k=64;
+	  	    
+	  	    else if ( Gyro.PLC_Delta >	( 37 * 65536)) k=20;
+	  	    else if ( Gyro.PLC_Delta < 	(-37 * 65536)) k=20;
+	  	    
+	  	    else if ( Gyro.PLC_Delta >  ( 25 * 65536)) k=16;
+	  	    else if ( Gyro.PLC_Delta < 	(-25 * 65536)) k=16;
+	  	    
+	  	    else if ( Gyro.PLC_Delta >  ( 15*65536)) k=8;
+	  	    else if ( Gyro.PLC_Delta < 	(-15*65536)) k=8;
+
+	  	    else if ( Gyro.PLC_Delta >  ( 5*65536)) k=6;
+	  	    else if ( Gyro.PLC_Delta < 	(-5*65536)) k=6;
+	  	    
+	  	    else if ( Gyro.PLC_Delta >  ( 2*65536)) k=4;
+	  	    else if ( Gyro.PLC_Delta < 	(-2*65536)) k=4;
+	  	    	  	    
+	  	
+			if 		(Gyro.PLC_Error2Mode > 0)				{Gyro.PLC_Error2Mode --; 						Gyro.PLC_ADC_DOld = 0; } 	// если ошибка(нахожление в двух модовом)
+			else if ( Gyro.PLC_Delta > 	(3000 * 65536)) 	{Spi.DAC_B += 2500;	Gyro.PLC_Error2Mode = 5; 	Gyro.PLC_ADC_DOld = 0;}		// проверка на двух модовость
+			else if ( Gyro.PLC_Delta < 	(-3000 * 65536)) 	{Spi.DAC_B += 2500;	Gyro.PLC_Error2Mode = 5; 	Gyro.PLC_ADC_DOld = 0;}
+			/*
+	  	    else if ( Gyro.PLC_Delta >	( 1500 * 65536)) k=128;
+	  	    else if ( Gyro.PLC_Delta < 	(-1500 * 65536)) k=128;
+	  	    
+	  	    else if ( Gyro.PLC_Delta >	( 1000 * 65536)) k=64;
+	  	    else if ( Gyro.PLC_Delta < 	(-1000 * 65536)) k=64;
+	  	    
+	  	    else if ( Gyro.PLC_Delta >	( 500 * 65536)) k=32;
+	  	    else if ( Gyro.PLC_Delta < 	(-500 * 65536)) k=32;
+	  	    
+	  	    else if ( Gyro.PLC_Delta >  ( 200 * 65536)) k=16;
+	  	    else if ( Gyro.PLC_Delta < 	(-200 * 65536)) k=16;
+	  	    
+	  	    else if ( Gyro.PLC_Delta >  ( 100*65536)) k=8;
+	  	    else if ( Gyro.PLC_Delta < 	(-100*65536)) k=8;
+
+	  	    else if ( Gyro.PLC_Delta >  ( 50*65536)) k=4;
+	  	    else if ( Gyro.PLC_Delta < 	(-50*65536)) k=4;
+	  	    
+	  	    else if ( Gyro.PLC_Delta >  ( 10*65536)) k=2;
+	  	    else if ( Gyro.PLC_Delta < 	(-10*65536)) k=2;
+	  	    	  	    
+	  	    */
+	  	    else if (Gyro.PLC_DeltaADD > 0)  
+			{
+	
+//				Gyro.PLC_ADC_DOld =	(Gyro.PLC_DeltaADD /6553600 )+1;
+			Gyro.PLC_ADC_DOld = 1;
+			}
+	  	    else if (Gyro.PLC_DeltaADD < 0)  
+			{
+
+//				Gyro.PLC_ADC_DOld =	(Gyro.PLC_DeltaADD /6553600 )-1;
+				Gyro.PLC_ADC_DOld = -1;
+			}
+			else
+			{
+				Gyro.PLC_ADC_DOld = 1;
+			}
+		}
+		else 
+		{
+			Gyro.PLC_Error2Mode = 1; Gyro.PLC_DeltaADD = 0;
+		}
+		
+	
+		Spi.DAC_B += Gyro.PLC_ADC_DOld * /*32*/ k;
+		
+		
+		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\r\n", Spi.DAC_B, Gyro.StrayPLC_flag, temp9,(Gyro.PLC_Delta/65536));//выдаем в терминал для постройки граффика регулировки периметра.
+        WriteCon(Time);
+        }
+ 
+ }
+
+
+
+
+
+/*
 void PlcRegul(void)			//Программа расчет напряжения для модулятора
 {
 		int PLC_In;
@@ -108,28 +220,24 @@
 			Gyro.PLC_Error2Mode = 1; Gyro.PLC_DeltaADD = 0;
 		}
 		
-		
-		switch( Gyro.StrayPLC_flag) {
-        case 0:
-        Spi.DAC_B += Gyro.PLC_ADC_DOld * 16;
-        break;
-        case 1:
-        Spi.DAC_B += ((Gyro.PLC_ADC_DOld * 16)+Gyro.StrayPLC);//вносим помеху
-  		break;
-		case 2:
-        Spi.DAC_B += ((Gyro.PLC_ADC_DOld * 16)+Gyro.StrayPLC_2Mode);//вгоняем в многомодовый режим
-  		break;
-  		}
-		//Spi.DAC_B += Gyro.PLC_ADC_DOld * 16;
+	
+		Spi.DAC_B += Gyro.PLC_ADC_DOld * 16;
 		
 		
 		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;}
+		
+		if(Gyro.LogPLC==1)
+		{
+		
+		sprintf((Time),"%d %d %d\r\n", Spi.DAC_B, Gyro.StrayPLC_flag, temp9);//выдаем в терминал для постройки граффика регулировки периметра.
+        WriteCon(Time);
+        }
  
  }
 
 
-
+*/
 
 void PlcRegul_old(void)  // на всяни	й случай
 {
@@ -176,9 +284,27 @@
     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 передавать.
-        LPC_SSP0->DR = (Spi.DAC_B); 	        	//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;
+        LPC_SSP0->DR = temp9;
+        
+        break;
+		case 2://большое воздействие
+		temp9=Spi.DAC_B + Gyro.StrayPLC_2Mode;
+        LPC_SSP0->DR = temp9;//вгоняем в многомодовый режим
+        break;
+    	}  		
+     // LPC_SSP0->DR = Spi.DAC_B;        	//e. передача 12 бит
+      	 
     }
 }