forkd

Dependencies:   mbed

Fork of LG2 by Dmitry Kovalev

Revision:
192:d32c8cf7bcd9
Parent:
191:40028201ddad
Child:
193:a0fe8bfc97e4
--- a/vibro.c	Mon Aug 29 11:58:52 2016 +0000
+++ b/vibro.c	Thu Sep 01 08:23:30 2016 +0000
@@ -1,7 +1,6 @@
 #include "Global.h"
 GyroT Gyro;
 GyroParam GyroP;
-
 volatile unsigned int Cheng_AMP_Flag=0;
 //int    reper=0;
 int    Rate2VibFlag,countA=0,tempDP;
@@ -61,7 +60,8 @@
     		} 
         tempDP=Gyro.AmpPerDel;
         srand(Global_Time);//инициализация функции rand() для получения новых случайных велечин.
-        Gyro.AmpPerDel = (rand() % Gyro.AmpTD+Gyro.AmpMin);// ОШУМЛЕНИЕ amp
+        if(Gyro.flag==1)  Gyro.AmpPerDel = 1; 
+        else  Gyro.AmpPerDel = (rand() % Gyro.AmpTD+Gyro.AmpMin);// ОШУМЛЕНИЕ amp
      }
   
     switch( Gyro.StrayHZ_flag) {
@@ -73,23 +73,20 @@
     LPC_TIM1->MR0 =(unsigned int)((103000000/(Gyro.Frq>>11))+ Gyro.StrayHZ);//запись в таймер нового значение частоты вибро + ошибка.
     break;
     }
-}/*
+}
 void OLDCalcAmpN(void)//расчет точек старта и стопа импульса вибропривода и расчет частоты ошумления.
 {
-    unsigned int OldMaxAmp=0;
-    static int PeriodCount = 0;
-    unsigned int Nmax=0;
-    Gyro.AmpSC = OldMaxAmp - Gyro.MaxAmp;
-    OldMaxAmp=Gyro.MaxAmp;
-    
+    static int PeriodCount;
+    unsigned int Nmax;
+        
     //расчет амплитуды относительно центральной точки
-    if(Gyro.MaxAmp >= Gyro.AmpT) { //если количество заходов в прерывание больше либо равно частоте ошумления.
+    if(PeriodCount >= Gyro.AmpT) { //если количество заходов в прерывание больше либо равно частоте ошумления.
        PeriodCount=0;//сбрасываем таймер
        
         if (Cheng_AMP_Flag==0) { //сейчас малая амплитуда?
-            if     ((Gyro.AmpPer+Gyro.AmpPerDel)> Gyro.AmpPerMax)   {Gyro.AmpPer= Gyro.AmpPerMax - Gyro.AmpPerDel;}   //проверка верхней граници амплитуды
+           /* if     ((Gyro.AmpPer+Gyro.AmpPerDel)> Gyro.AmpPerMax)   {Gyro.AmpPer= Gyro.AmpPerMax - Gyro.AmpPerDel;}   //проверка верхней граници амплитуды
             else if((Gyro.AmpPer+Gyro.AmpPerDel)< Gyro.AmpPerMin)   {Gyro.AmpPer= Gyro.AmpPerMin + Gyro.AmpPerDel;}  //проверка нижней граници амплитуды
-          
+          */
           Nmax   =   (unsigned int)((100000/(Gyro.Frq>>16))-1); 
           Gyro.AmpN1=(unsigned int)((Nmax*(100-Gyro.AmpPer))/(Gyro.Frq>>16));            //левая граница амплитуды
           Gyro.AmpN2=(unsigned int)((Nmax/2)-Gyro.AmpN1);                                //правая граница амплитуды
@@ -98,8 +95,8 @@
         }
 
         else {
-             if     ((Gyro.AmpPer+Gyro.AmpPerDel)> Gyro.AmpPerMax)   {Gyro.AmpPer= Gyro.AmpPerMax - Gyro.AmpPerDel;}   //проверка верхней граници амплитуды
-             else if((Gyro.AmpPer+Gyro.AmpPerDel)< Gyro.AmpPerMin)   {Gyro.AmpPer= Gyro.AmpPerMin + Gyro.AmpPerDel;}  //проверка нижней граници амплитуды
+         /*    if     ((Gyro.AmpPer+Gyro.AmpPerDel)> Gyro.AmpPerMax)   {Gyro.AmpPer= Gyro.AmpPerMax - Gyro.AmpPerDel;}   //проверка верхней граници амплитуды
+             else if((Gyro.AmpPer+Gyro.AmpPerDel)< Gyro.AmpPerMin)   {Gyro.AmpPer= Gyro.AmpPerMin + Gyro.AmpPerDel;}  //проверка нижней граници амплитуды*/
            
          Nmax    =  (unsigned int)((100000/(Gyro.Frq>>16))-1);      
          Gyro.AmpN1=(unsigned int)((Nmax*(100-Gyro.AmpPer+Gyro.AmpPerDel))/(Gyro.Frq>>16));//левая граница амплитуды
@@ -121,7 +118,7 @@
     LPC_TIM1->MR0 =(unsigned int)((103000000/(Gyro.Frq>>11))+ Gyro.StrayHZ);//запись в таймер нового значение частоты вибро + ошибка.
     break;
     }
-}*/
+}
 void VibroAMPRegul(void)  //подстройка амплитуды ВП
 {
    	Gyro.CaunPlus = CaunAddPlus;//амплитуда по модулю из востановленного синиуса Buff_Restored_sin
@@ -186,7 +183,23 @@
 	if (Gyro.ADS_NewData    == 1) {Gyro.ADS_NewData = 0;  if(Gyro.ModJump == 3){ShowMod();}  else {PlcRegul();}}   // был приход новых данных После Медленного фильтра AD (гдето раз в 0.63 секунды )//регулировка периметра.
     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.VibroNoiseF    == 1) 
+    { 
+    if(Gyro.flag==2)
+    {
+    	Gyro.AmpPerDel=2;
+    	Gyro.AmpMin=20000;
+    	Gyro.AmpTD=100;
+    	OLDCalcAmpN();
+    }
+    else
+    {
+    	Gyro.AmpMin =2;
+    	Gyro.AmpTD =6;
+    	Gyro.VibroNoiseF = 0;	
+    	CalcAmpN();	   
+    } 
+    }	// регулеровка ошумления, наверно нужно объеденить с регулеровкой ампитуды
     if (Gyro.VibroOutF      == 1) {Gyro.VibroOutF = 0;		 VibroOut();		}	// установка ног в регисторе тоже подумать , зачем отделный флаг? наверно 
 
 }