fork

Dependencies:   mbed

Fork of LG by igor Apu

Revision:
202:c03b7b128e11
Parent:
201:76f4123bf22a
--- a/vibro.c	Wed Nov 02 14:05:24 2016 +0000
+++ b/vibro.c	Fri Nov 18 06:07:37 2016 +0000
@@ -15,100 +15,232 @@
   // CMD_Delta_Bins(); 
 }
 
+void OLDCalcAmpN(void)//расчет точек старта и стопа импульса вибропривода и расчет частоты ошумления.
+{
+    static int PeriodCount = 0;
+    unsigned int Nmax=0;
 
-void VibroOut(void) 	// выставка ног вибро
+    //расчет амплитуды относительно центральной точки
+    if(PeriodCount>= Gyro.AmpT) { //если количество заходов в прерывание больше либо равно частоте ошумления.
+        PeriodCount=0;//сбрасываем таймер
+
+        if (Cheng_AMP_Flag==0) { //сейчас малая амплитуда?
+            if((Gyro.AmpPer+Gyro.AmpPerDel)>90) {
+                Gyro.AmpPer=90-Gyro.AmpPerDel;   //проверка верхней граници амплитуды
+            }
+            Nmax =(unsigned int)((100000/(Gyro.Frq>>16))-1);                    //
+            Gyro.AmpN1=(unsigned int)((Nmax*(100-Gyro.AmpPer))/Gyro.FrqHZ);            //левая граница амплитуды
+            Gyro.AmpN2=(unsigned int)((Nmax/2)-Gyro.AmpN1);                     //правая граница амплитуды
+            Cheng_AMP_Flag=1;
+            
+            }
+
+        else {
+            if((Gyro.AmpPer+Gyro.AmpPerDel)>90) {
+                Gyro.AmpPer=90-Gyro.AmpPerDel;   //проверка верхней граници амплитуды
+            }
+           
+            Nmax =(unsigned int)((100000/(Gyro.Frq>>16))-1);
+            Gyro.AmpN1=(unsigned int)((Nmax*(100-Gyro.AmpPer+Gyro.AmpPerDel))/Gyro.FrqHZ);//левая граница амплитуды
+            Gyro.AmpN2=(unsigned int)((Nmax/2)-Gyro.AmpN1);                        //правая граница амплитуды
+            Cheng_AMP_Flag=0;
+            
+        }
+        srand(Global_Time);//инициализация функции rand() для получения новых случайных велечин.
+        Gyro.AmpT = (rand() % Gyro.AmpTD+Gyro.AmpMin);// ОШУМЛЕНИЕ amp
+ 
+    } else {
+        PeriodCount++;//таймер амплитуды
+    }
+    
+LPC_TIM1->MR0 =(unsigned int)(100000000/((Gyro.Frq)>>11));//запись в таймер нового  значение частоты вибро
+}
+
+void OLD_CalcAmpN(void)//расчет точек старта и стопа импульса вибропривода и расчет частоты ошумления.
 {
-    if(CountV31>=16) 
-      {//первая нога вибро
-         // левая граница вЫкл вибро 1 > Time_vibro <ПРАВАЯ  граница вЫкл вибро 1
-        if((Time_vibro>Gyro.AmpN1) && (Time_vibro<Gyro.AmpN2))	
-        {
-            Gyro.PinReg &= ~PinRegBit_1V;//установить в регистре PinReg бит "вибро 1" в "0"
-        } 
-        else 
-        {
-            Gyro.PinReg |= PinRegBit_1V;//установить в регистре PinReg бит "вибро 1" в "1"
+    static int PeriodCount = 0;
+    unsigned int Nmax=0,Nmid=0,Nper=0;
+
+    //расчет амплитуды относительно центральной точки
+    if(PeriodCount>= Gyro.AmpT) { //если количество заходов в прерывание больше либо равно частоте ошумления.
+        PeriodCount=0;//сбрасываем таймер
+
+        if (Cheng_AMP_Flag==0) { //сейчас малая амплитуда?
+           if((Gyro.AmpPer+Gyro.AmpPerDel)>90) {
+                Gyro.AmpPer=90-Gyro.AmpPerDel;   //проверка верхней граници амплитуды
+            }
+            Nmax =(unsigned int)((100000/(Gyro.Frq>>16))-1);
+            Nmid=(unsigned int)(Nmax/2);
+            Nper=(unsigned int)((Nmax*Gyro.AmpPer)/200);
+            if(Nper<1)Nper=1;
+ 
+            Gyro.AmpN1=(unsigned int)  (Nmid - Nper);       
+            Gyro.AmpN2=(unsigned int)  (Nmid + Nper); 
+           
+            Cheng_AMP_Flag=1;
+            }
+
+        else {
+          /*  if((Gyro.AmpPer+Gyro.AmpPerDel)>90) {
+                Gyro.AmpPer=90-Gyro.AmpPerDel;   //проверка верхней граници амплитуды
+            }*/
+           
+            Nmax = 		(unsigned int)((100000/(Gyro.Frq>>16))-1);
+            Nmid = 		(unsigned int) (Nmax/2);
+            Nper = 		(unsigned int)((Nmax*(Gyro.AmpPer + Gyro.AmpPerDel))/200);
+            if(Nper<1)Nper=2;
+          
+            Gyro.AmpN1 =(unsigned int) (Nmid - Nper);       
+            Gyro.AmpN2 =(unsigned int) (Nmid + Nper);  
+            Cheng_AMP_Flag=0;
+            
         }
+        srand(Global_Time);//инициализация функции rand() для получения новых случайных велечин.
+        Gyro.AmpT = (rand() % Gyro.AmpTD+Gyro.AmpMin);// ОШУМЛЕНИЕ amp
+ 
+    } else {
+        PeriodCount++;//таймер амплитуды
+    }
+    
+LPC_TIM1->MR0 =(unsigned int)(100000000/((Gyro.Frq)>>11));//запись в таймер нового  значение частоты вибро
+}
 
-      } 
-    else {//вторая нога вибро
-        if((Time_vibro>Gyro.AmpN1)&&(Time_vibro<Gyro.AmpN2))	
-        {
-            Gyro.PinReg &= ~PinRegBit_2V; //установить в регистре PinReg бит "вибро 2" в "0"
-        } 
-        else
-        {
-            Gyro.PinReg |= PinRegBit_2V;//установить в регистре PinReg бит "вибро 2" в "1"
-        }
+void VibroAMPRegul(void)  //подстройка амплитуды ВП
+{
+   	Gyro.CaunPlus = CaunAddPlus;//амплитуда по модулю из востановленного синиуса Buff_Restored_sin
+	CaunAddPlus = 0;
+	Gyro.CaunMin  = CaunAddMin; //амплитуда по модулю из востановленного синиуса Buff_Restored_sin
+	CaunAddMin = 0;
+  	Gyro.MaxAmp = Gyro.CaunPlus + Gyro.CaunMin;         //расчет максимальной амплитуды из востановленного синуса р-р.
+  	if(Gyro.RgConA&0x20) {
+    Gyro.Amp   -= (Gyro.MaxAmp - Gyro.AmpTarget) * Gyro.AmpSpeed;  // расчет амплитуды ВП с учетом разници
+    if((Gyro.Amp>>16) > Gyro.AmpPerMax)   {Gyro.Amp = (Gyro.AmpPerMax << 16);}   // временное ограничение роста амплитуды ВП в случае неподоженного гироскопа//////////
+    if((Gyro.Amp>>16) < Gyro.AmpPerMin)   {Gyro.Amp = (Gyro.AmpPerMin << 16);}   // временное ограничение роста амплитуды ВП в случае неподоженного гироскопа//////////
+     Gyro.AmpPer = Gyro.Amp>>15; //приведение амплитуды ВП к виду 0%-100%
+  sprintf((Time),"%d  %d  %d  \r\n",Gyro.AmpN1,Gyro.AmpN2,Gyro.AmpPer);//выдаем в терминал для постройки граффика регулировки периметра.
+  WriteCon(Time);
     }
 }
 
+void VibroFrqRegul(void)// расчет Фазы с учетор разници(подстройка частоты)
+{ 
+   	static int TempFaza, CountFaza;
+   	TempFaza = -4;
+    for (CountFaza = 0; CountFaza <8; CountFaza++ )     {if (Buff_Restored_sin [(CountV31 -12  + CountFaza) & 0xff] > 0 ) TempFaza++;} //резонанс когда  CountV31 = 8 => Buff_Restored_sin = 0
+    if(Gyro.RgConA&0x40)     {Gyro.Frq += TempFaza*Gyro.FrqChengSpeed;}
+    
+    if     (Gyro.Frq < Gyro.FrqHZmin) Gyro.Frq=Gyro.FrqHZmin;//нижнее  ограничение частоты
+    else if(Gyro.Frq > Gyro.FrqHZmax) Gyro.Frq=Gyro.FrqHZmax;//верхнее ограничение частоты
+}
+
+//////////////////////////////////////////////////////////////////////////////
+/////////////////////////основного 32 тактного цикла//////////////////////////
+//////////////////////////////////////////////////////////////////////////////
+void cheng(void)
+{  
+    switch(CountV31) {
+    case 0:  Gyro.VibroAMPRegulF=1; Time_vibro=0; Gyro.VibroNoiseF=1;    		break;    //расчет и установка нового заначения частоты ошумления и запись в таймер частоты ошумления.
+	case 16: Gyro.Reper_Event=1;    Time_vibro=0; Gyro.VibroFrqRegulF=1; 	    break;
+    }
+}
+void AllRegul (void)
+{   ///////////////////////////контуры регулировки/////////////////////////////
+   
+    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; 
+		
+	}/// был приход новых данных После Медленного фильтра AD (гдето раз в 0.63 секунды )//регулировка периметра.
+ 
+ 
+ 
+   if (Gyro.VibroFrqRegulF == 1) {Gyro.VibroFrqRegulF = 0;	 VibroFrqRegul();	}	// Регулеровка частоты виброподвеса    
+   if (Gyro.VibroAMPRegulF == 1) {Gyro.VibroAMPRegulF = 0;	 VibroAMPRegul();   }	// Регулеровка Амплитуды виброподвеса
+   if (Gyro.VibroNoiseF    == 1) 
+    { 
+      switch(Gyro.flag) {
+  	   case 1: Gyro.VibroNoiseF = 0; OLDCalcAmpN();                             break;
+       case 2: Gyro.AmpMin =3;Gyro.AmpTD =10;Gyro.VibroNoiseF = 0;Calc2AmpN();  break;
+       case 3: Gyro.AmpMin =1;Gyro.AmpTD =10;Gyro.VibroNoiseF = 0;CalcAmpD();   break; 
+	  } 
+    }	// регулеровка ошумления, наверно нужно объеденить с регулеровкой ампитуды
+//if (Gyro.VibroOutF  == 1) {Gyro.VibroOutF = 0; VibroOut();}	// установка ног в регисторе тоже подумать , зачем отделный флаг? наверно 
+}
+
 
-void Calc2AmpN(void)//расчет точек старта и стопа импульса вибропривода и расчет частоты ошумления.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+void CalcAmpI(void)//расчет точек старта и стопа импульса вибропривода и расчет частоты ошумления.
 {
     Gyro.AmpSC=0;
-    static int PeriodCount = 0;
+    static int PeriodCount = 0 ;
     unsigned int Nmax=0;
-    Gyro.AmpSC = Gyro.MaxAmp - OldMaxAmp ;
-    if(Gyro.AmpSC<0) Gyro.AmpSC=Gyro.AmpSC*(-1);
-    OldMaxAmp=Gyro.MaxAmp;
+   Gyro.AmpSC = Gyro.MaxAmp - OldMaxAmp ;
+   if(Gyro.AmpSC<0) Gyro.AmpSC=Gyro.AmpSC*(-1);
+   OldMaxAmp=Gyro.MaxAmp;
     
-    if(Gyro.AmpSC <55)countA++;
-    if(countA >2)
-     { 
-      countA=0;
-        srand(Global_Time);   
-        if(Cheng_AMP_Flag)
-        {
-       	 Cheng_AMP_Flag=0;    
-       	 Gyro.AmpPerDel = (rand() % Gyro.AmpTD+Gyro.AmpMin);// ОШУМЛЕНИЕ amp
-       	 Nmax   =   (unsigned int)((100000/(Gyro.Frq>>16))-1); 
-         Gyro.AmpN1=(unsigned int)((Nmax*(100-Gyro.AmpPer+Gyro.AmpPerDel))/(Gyro.Frq>>16)); //левая граница амплитуды
-         Gyro.AmpN2=(unsigned int)((Nmax/2)-Gyro.AmpN1);                                //правая граница амплитуды      
-        }
-        else
-        {
-         Cheng_AMP_Flag=1;    
-      	 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);                                //правая граница амплитуды      
-        }
-     }                         //8046
-   
-    LPC_TIM1->MR0 =(unsigned int)(103000000/((Gyro.Frq)>>11));//запись в таймер нового  значение частоты вибро
-}
-
-void CalcAmpN(void)//расчет точек старта и стопа импульса вибропривода и расчет частоты ошумления.
-{
-    Gyro.AmpSC=0;
-    static int PeriodCount = 0;
-    unsigned int Nmax=0;
-    Gyro.AmpSC = Gyro.MaxAmp - OldMaxAmp;
-    if(Gyro.AmpSC<0) Gyro.AmpSC=Gyro.AmpSC*(-1);
-    OldMaxAmp=Gyro.MaxAmp;
-    
-    if(Gyro.AmpSC <5)countA++;
-    if(countA >3)
-     { 
-      countA=0;
+    countA++;
+    if( Gyro.AmpSC<60)
+    { 
+     // countA=0;
         
           Nmax   =   (unsigned int)((100000/(Gyro.Frq>>16))-1); 
           Gyro.AmpN1=(unsigned int)((Nmax*(100-Gyro.AmpPer+Gyro.AmpPerDel))/(Gyro.Frq>>16));            //левая граница амплитуды
           Gyro.AmpN2=(unsigned int)((Nmax/2)-Gyro.AmpN1);                                //правая граница амплитуды      
           Cheng_AMP_Flag=1;       
 
-        tempDP=Gyro.AmpPerDel;
-        srand(Global_Time);//инициализация функции rand() для получения новых случайных велечин.
-        if(Gyro.flag==1)  Gyro.AmpPerDel = 1; 
-        else  Gyro.AmpPerDel = (rand() % Gyro.AmpTD+Gyro.AmpMin);// ОШУМЛЕНИЕ amp
+       // tempDP=Gyro.AmpPerDel;
+      //  srand(Global_Time);//инициализация функции rand() для получения новых случайных велечин.
+        if(Gyro.flag==1)  Gyro.AmpPerDel = 1;
+        
+     switch(Znak) {
+     case 0:
+     Gyro.AmpPerDel--;
+     if (Gyro.AmpPerDel<1)Znak=1;  
+     break;
+     
+     case 1:
+     Gyro.AmpPerDel++;
+     if (Gyro.AmpPerDel>13)Znak=0;  
+     break;
+     }
+     
      }                         //8046
-     
     LPC_TIM1->MR0 =(unsigned int)(103000000/((Gyro.Frq)>>11));//запись в таймер нового  значение частоты вибро
 }
 
 
-
-
 void CalcAmpD(void)
 {
    	unsigned int Nmax=0;
@@ -172,199 +304,67 @@
 
 
 
-
-
-void CalcAmpI(void)//расчет точек старта и стопа импульса вибропривода и расчет частоты ошумления.
+void CalcAmpN(void)//расчет точек старта и стопа импульса вибропривода и расчет частоты ошумления.
 {
     Gyro.AmpSC=0;
-    static int PeriodCount = 0 ;
+    static int PeriodCount = 0;
     unsigned int Nmax=0;
-   Gyro.AmpSC = Gyro.MaxAmp - OldMaxAmp ;
-   if(Gyro.AmpSC<0) Gyro.AmpSC=Gyro.AmpSC*(-1);
-   OldMaxAmp=Gyro.MaxAmp;
+    Gyro.AmpSC = Gyro.MaxAmp - OldMaxAmp;
+    if(Gyro.AmpSC<0) Gyro.AmpSC=Gyro.AmpSC*(-1);
+    OldMaxAmp=Gyro.MaxAmp;
     
-    countA++;
-    if( Gyro.AmpSC<60)
-    { 
-     // countA=0;
+    if(Gyro.AmpSC <5)countA++;
+    if(countA >3)
+     { 
+      countA=0;
         
           Nmax   =   (unsigned int)((100000/(Gyro.Frq>>16))-1); 
           Gyro.AmpN1=(unsigned int)((Nmax*(100-Gyro.AmpPer+Gyro.AmpPerDel))/(Gyro.Frq>>16));            //левая граница амплитуды
           Gyro.AmpN2=(unsigned int)((Nmax/2)-Gyro.AmpN1);                                //правая граница амплитуды      
           Cheng_AMP_Flag=1;       
 
-       // tempDP=Gyro.AmpPerDel;
-      //  srand(Global_Time);//инициализация функции rand() для получения новых случайных велечин.
-        if(Gyro.flag==1)  Gyro.AmpPerDel = 1;
-        
-     switch(Znak) {
-     case 0:
-     Gyro.AmpPerDel--;
-     if (Gyro.AmpPerDel<1)Znak=1;  
-     break;
+        tempDP=Gyro.AmpPerDel;
+        srand(Global_Time);//инициализация функции rand() для получения новых случайных велечин.
+        if(Gyro.flag==1)  Gyro.AmpPerDel = 1; 
+        else  Gyro.AmpPerDel = (rand() % Gyro.AmpTD+Gyro.AmpMin);// ОШУМЛЕНИЕ amp
+     }                         //8046
      
-     case 1:
-     Gyro.AmpPerDel++;
-     if (Gyro.AmpPerDel>13)Znak=0;  
-     break;
-     }
-     
-     }                         //8046
     LPC_TIM1->MR0 =(unsigned int)(103000000/((Gyro.Frq)>>11));//запись в таймер нового  значение частоты вибро
 }
 
 
 
-void OLDCalcAmpN(void)//расчет точек старта и стопа импульса вибропривода и расчет частоты ошумления.
+void Calc2AmpN(void)//расчет точек старта и стопа импульса вибропривода и расчет частоты ошумления.
 {
+    Gyro.AmpSC=0;
     static int PeriodCount = 0;
     unsigned int Nmax=0;
-
-    //расчет амплитуды относительно центральной точки
-    if(PeriodCount>= Gyro.AmpT) { //если количество заходов в прерывание больше либо равно частоте ошумления.
-        PeriodCount=0;//сбрасываем таймер
-
-        if (Cheng_AMP_Flag==0) { //сейчас малая амплитуда?
-            if((Gyro.AmpPer+Gyro.AmpPerDel)>90) {
-                Gyro.AmpPer=90-Gyro.AmpPerDel;   //проверка верхней граници амплитуды
-            }
-            Nmax =(unsigned int)((100000/(Gyro.Frq>>16))-1);                    //
-            Gyro.AmpN1=(unsigned int)((Nmax*(100-Gyro.AmpPer))/Gyro.FrqHZ);            //левая граница амплитуды
-            Gyro.AmpN2=(unsigned int)((Nmax/2)-Gyro.AmpN1);                     //правая граница амплитуды
-            Cheng_AMP_Flag=1;
-           
-        }
-
-        else {
-            if((Gyro.AmpPer+Gyro.AmpPerDel)>90) {
-                Gyro.AmpPer=90-Gyro.AmpPerDel;   //проверка верхней граници амплитуды
-            }
-           
-            Nmax =(unsigned int)((100000/(Gyro.Frq>>16))-1);
-            Gyro.AmpN1=(unsigned int)((Nmax*(100-Gyro.AmpPer+Gyro.AmpPerDel))/Gyro.FrqHZ);//левая граница амплитуды
-            Gyro.AmpN2=(unsigned int)((Nmax/2)-Gyro.AmpN1);                        //правая граница амплитуды
-            Cheng_AMP_Flag=0;
-            
+    Gyro.AmpSC = Gyro.MaxAmp - OldMaxAmp ;
+    if(Gyro.AmpSC<0) Gyro.AmpSC=Gyro.AmpSC*(-1);
+    OldMaxAmp=Gyro.MaxAmp;
+    
+    if(Gyro.AmpSC <55)countA++;
+    if(countA >2)
+     { 
+      countA=0;
+        srand(Global_Time);   
+        if(Cheng_AMP_Flag)
+        {
+       	 Cheng_AMP_Flag=0;    
+       	 Gyro.AmpPerDel = (rand() % Gyro.AmpTD+Gyro.AmpMin);// ОШУМЛЕНИЕ amp
+       	 Nmax   =   (unsigned int)((100000/(Gyro.Frq>>16))-1); 
+         Gyro.AmpN1=(unsigned int)((Nmax*(100-Gyro.AmpPer+Gyro.AmpPerDel))/(Gyro.Frq>>16)); //левая граница амплитуды
+         Gyro.AmpN2=(unsigned int)((Nmax/2)-Gyro.AmpN1);                                //правая граница амплитуды      
         }
-        srand(Global_Time);//инициализация функции rand() для получения новых случайных велечин.
-        Gyro.AmpT = (rand() % Gyro.AmpTD+Gyro.AmpMin);// ОШУМЛЕНИЕ amp
- 
-    } else {
-        PeriodCount++;//таймер амплитуды
-    }
-    
-LPC_TIM1->MR0 =(unsigned int)(100000000/((Gyro.Frq)>>11));//запись в таймер нового  значение частоты вибро
-}
-void VibroAMPRegul(void)  //подстройка амплитуды ВП
-{
-   	Gyro.CaunPlus = CaunAddPlus;//амплитуда по модулю из востановленного синиуса Buff_Restored_sin
-	CaunAddPlus = 0;
-	Gyro.CaunMin  = CaunAddMin; //амплитуда по модулю из востановленного синиуса Buff_Restored_sin
-	CaunAddMin = 0;
-  	Gyro.MaxAmp = Gyro.CaunPlus + Gyro.CaunMin;         //расчет максимальной амплитуды из востановленного синуса р-р.
-    Gyro.Amp   -= (Gyro.MaxAmp - Gyro.AmpTarget) * Gyro.AmpSpeed;  // расчет амплитуды ВП с учетом разници
-  /*if((Gyro.Amp>>16) > Gyro.AmpPerMax)   {Gyro.Amp = (Gyro.AmpPerMax << 16);}   // временное ограничение роста амплитуды ВП в случае неподоженного гироскопа//////////
-  if((Gyro.Amp>>16) < Gyro.AmpPerMin)   {Gyro.Amp = (Gyro.AmpPerMin << 16);} */ // временное ограничение роста амплитуды ВП в случае неподоженного гироскопа//////////
-  if(Gyro.RgConA&0x20)     {Gyro.AmpPer = Gyro.Amp>>15;} //приведение амплитуды ВП к виду 0%-100%
-
-
-}
-
-
-
-void VibroFrqRegul(void)// расчет Фазы с учетор разници(подстройка частоты)
-{ 
-   	static int TempFaza, CountFaza;
-   	TempFaza = -4;
-    for (CountFaza = 0; CountFaza <8; CountFaza++ )     {if (Buff_Restored_sin [(CountV31 -12  + CountFaza) & 0xff] > 0 ) TempFaza++;} //резонанс когда  CountV31 = 8 => Buff_Restored_sin = 0
-    if(Gyro.RgConA&0x40)     {Gyro.Frq += TempFaza*Gyro.FrqChengSpeed;}
-    
-    if     (Gyro.Frq < Gyro.FrqHZmin) Gyro.Frq=Gyro.FrqHZmin;//нижнее  ограничение частоты
-    else if(Gyro.Frq > Gyro.FrqHZmax) Gyro.Frq=Gyro.FrqHZmax;//верхнее ограничение частоты
+        else
+        {
+         Cheng_AMP_Flag=1;    
+      	 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);                                //правая граница амплитуды      
+        }
+     }                         //8046
+   
+    LPC_TIM1->MR0 =(unsigned int)(103000000/((Gyro.Frq)>>11));//запись в таймер нового  значение частоты вибро
 }
 
-//////////////////////////////////////////////////////////////////////////////
-/////////////////////////основного 32 тактного цикла//////////////////////////
-//////////////////////////////////////////////////////////////////////////////
-void cheng(void)
-{  
-    switch(CountV31) {
-     case 0:
-            
-          	Gyro.VibroAMPRegulF=1;
-            Time_vibro=0;
-            Gyro.VibroNoiseF=1;//расчет и установка нового заначения частоты ошумления и запись в таймер частоты ошумления.
-
-     break;
-    
-	 case 16:
-	 
-	        Gyro.Reper_Event=1; 
-            Time_vibro=0;
-            Gyro.VibroFrqRegulF=1; //
-     break;
-     
-    case 31:
-    /* for (int i = 0; i < 32; i++ ) 
-     { 
-      Gyro.CuruAngle  +=  Buff_32Point [i];
-      Gyro.tempdelta  += (Buff_Restored_sin[i]);
-      Gyro.tempdelta2 += (Buff_Restored_sin2[i])
-     } 
-     */  
-     if(Gyro.LogHZ)
-     {
-	 sprintf((Time),"%d %d %d\r\n",ADCDIF,(ADCDIF>>5),(ADCDIF>>10));
-	 WriteCon(Time);
-	  ADCDIF=0;
-	 Gyro.CuruAngle=0;
-	 Gyro.tempdelta=0;
-	 Gyro.tempdelta2=0;
-     } /*
-     if(Gyro.ModJump==2) {            ///прыжок с моды на моду. (-->) 
-       Gyro.ModJump=0;
-       Spi.DAC_B += 4300;
-       Gyro.PLC_Error2Mode=1;
-    } 
-    
-    if(Gyro.ModJump==1) {            ///прыжок с моды на моду. (<--)     
-       Gyro.OldCuruAngle=Gyro.CuruAngle;       
-       Gyro.ModJump=0;
-       Spi.DAC_B -= 5900;
-       Gyro.PLC_Error2Mode=1;
-    } 
-    
-	break;*/
-    }
-}
-void AllRegul (void)
-{   ///////////////////////////контуры регулировки/////////////////////////////
-   
-    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; 
-		switch(Gyro.LogPLC) {
-        case 0:     PlcRegul();    break;    
-	    case 1:     PlcRegul();    break;
-	    case 2:     ShowMod();     break;
-	    }
-	}*/// был приход новых данных После Медленного фильтра AD (гдето раз в 0.63 секунды )//регулировка периметра.
- 
- 
- 
-    if (Gyro.VibroFrqRegulF == 1) {Gyro.VibroFrqRegulF = 0;	 VibroFrqRegul();	}	// Регулеровка частоты виброподвеса    
-    if (Gyro.VibroAMPRegulF == 1) {Gyro.VibroAMPRegulF = 0;	 VibroAMPRegul();   }	// Регулеровка Амплитуды виброподвеса
-    if (Gyro.VibroNoiseF    == 1) 
-    { 
-      switch(Gyro.flag) {
-  	   case 1: Gyro.VibroNoiseF = 0; OLDCalcAmpN();                             break;
-       case 2: Gyro.AmpMin =3;Gyro.AmpTD =10;Gyro.VibroNoiseF = 0;Calc2AmpN();  break;
-       case 3: Gyro.AmpMin =1;Gyro.AmpTD =10;Gyro.VibroNoiseF = 0;CalcAmpD();   break; 
-	  } 
-    }	// регулеровка ошумления, наверно нужно объеденить с регулеровкой ампитуды
-    if (Gyro.VibroOutF  == 1) {Gyro.VibroOutF = 0; VibroOut();}	// установка ног в регисторе тоже подумать , зачем отделный флаг? наверно 
-}