fork

Dependencies:   mbed

Fork of LG by igor Apu

Committer:
Kovalev_D
Date:
Wed Mar 30 10:46:50 2016 +0000
Revision:
100:e197a8d2cf43
Parent:
99:3d8f206ceac2
Child:
101:bb7472afb947
j

Who changed what in which revision?

UserRevisionLine numberNew contents of line
igor_v 0:8ad47e2b6f00 1 #include "Global.h"
igor_v 30:17c84ed091b3 2 GyroT Gyro;
igor_v 48:8697dfe679b9 3 //volatile int V1 = 0 ;
igor_v 48:8697dfe679b9 4 //volatile int Temp = 0 ;
igor_v 0:8ad47e2b6f00 5 volatile unsigned int Flag=0;
igor_v 0:8ad47e2b6f00 6 unsigned int FrecTemp=0;
Kovalev_D 99:3d8f206ceac2 7 unsigned int FrecTp=0,ffff=0;
Kovalev_D 85:0466ee8cdfc8 8
Kovalev_D 89:a0d344db227e 9
Kovalev_D 89:a0d344db227e 10 void Discharg ()//проверка битового поля поджига и установка значения бита поджига
Kovalev_D 85:0466ee8cdfc8 11 {
Kovalev_D 85:0466ee8cdfc8 12 if (Gyro.Discharg)
Kovalev_D 85:0466ee8cdfc8 13 {
Kovalev_D 89:a0d344db227e 14 //Проверка здвигового поля(последовательности) поджига
Kovalev_D 89:a0d344db227e 15 Gyro.Discharg = Gyro.Discharg >> 1;
Kovalev_D 89:a0d344db227e 16 //если последний бит 1 то установить бит поджига в еденицу, иначе в 0;
Kovalev_D 85:0466ee8cdfc8 17 if (Gyro.Discharg & 0x01) Gyro.PinReg |= PinRegBitD; else Gyro.PinReg &= ~PinRegBitD;
Kovalev_D 85:0466ee8cdfc8 18 }
Kovalev_D 85:0466ee8cdfc8 19 }
Kovalev_D 85:0466ee8cdfc8 20 void BackLight ()
Kovalev_D 85:0466ee8cdfc8 21 {
Kovalev_D 85:0466ee8cdfc8 22 if (Gyro.BackLight)
Kovalev_D 89:a0d344db227e 23 {
Kovalev_D 89:a0d344db227e 24 //Проверка здвигового поля(последовательности) подсветки
Kovalev_D 85:0466ee8cdfc8 25 Gyro.BackLight = Gyro.BackLight >> 1;
Kovalev_D 89:a0d344db227e 26 //если последний бит в битовом поле 1 то установить бит подсветки в еденицу, иначе в 0;
Kovalev_D 85:0466ee8cdfc8 27 if (Gyro.BackLight & 0x01) Gyro.PinReg |= PinRegBitL; else Gyro.PinReg &= ~PinRegBitL;
Kovalev_D 85:0466ee8cdfc8 28 }
Kovalev_D 85:0466ee8cdfc8 29 }
Kovalev_D 85:0466ee8cdfc8 30
Kovalev_D 85:0466ee8cdfc8 31
igor_v 21:bc8c1cec3da6 32
igor_v 0:8ad47e2b6f00 33
Kovalev_D 85:0466ee8cdfc8 34 void VibroOut(void) // выставка ног вибро
igor_v 0:8ad47e2b6f00 35 {
Kovalev_D 89:a0d344db227e 36 if(CountV31>=16) {//первая нога вибро
Kovalev_D 89:a0d344db227e 37 // левая граница вЫкл вибро 1 > Time_vibro <ПРАВАЯ граница вЫкл вибро 1
igor_v 30:17c84ed091b3 38 if((Time_vibro>Gyro.AmpN1) && (Time_vibro<Gyro.AmpN2)) {
Kovalev_D 85:0466ee8cdfc8 39 Gyro.PinReg &= ~PinRegBit_1V;/*LoopOn*///установить в регистре PinReg бит "вибро 1" в "0"
igor_v 21:bc8c1cec3da6 40 } else {
Kovalev_D 40:8a6494f61326 41 Gyro.PinReg |= PinRegBit_1V;//установить в регистре PinReg бит "вибро 1" в "1"
igor_v 21:bc8c1cec3da6 42 }
Kovalev_D 85:0466ee8cdfc8 43
Kovalev_D 89:a0d344db227e 44 } else {//вторая нога вибро
igor_v 30:17c84ed091b3 45 if((Time_vibro>Gyro.AmpN1)&&(Time_vibro<Gyro.AmpN2)) {
Kovalev_D 40:8a6494f61326 46 Gyro.PinReg &= ~PinRegBit_2V; /*LoopOff*////установить в регистре PinReg бит "вибро 2" в "0"
igor_v 21:bc8c1cec3da6 47 } else {
Kovalev_D 40:8a6494f61326 48 Gyro.PinReg |= PinRegBit_2V;//установить в регистре PinReg бит "вибро 2" в "1"
igor_v 21:bc8c1cec3da6 49 }
igor_v 21:bc8c1cec3da6 50 }
igor_v 0:8ad47e2b6f00 51
igor_v 0:8ad47e2b6f00 52
igor_v 0:8ad47e2b6f00 53
igor_v 0:8ad47e2b6f00 54 }
igor_v 0:8ad47e2b6f00 55
igor_v 0:8ad47e2b6f00 56 void CalcAmpN(void)
igor_v 0:8ad47e2b6f00 57 {
Kovalev_D 85:0466ee8cdfc8 58 static int PeriodCount = 0;
igor_v 21:bc8c1cec3da6 59 unsigned int Nmax=0;
igor_v 21:bc8c1cec3da6 60
Kovalev_D 85:0466ee8cdfc8 61 //расчет амплитуды относительно центральной точки
igor_v 21:bc8c1cec3da6 62
Kovalev_D 85:0466ee8cdfc8 63 if(PeriodCount>= Gyro.AmpT) { //если количество заходов в прерывание больше либо равно частоте ошумления.
Kovalev_D 85:0466ee8cdfc8 64 PeriodCount=0;
igor_v 21:bc8c1cec3da6 65
Kovalev_D 85:0466ee8cdfc8 66 if (Flag==0) { //сейчас малая амплитуда?
Kovalev_D 85:0466ee8cdfc8 67 if((Gyro.AmpPer+Gyro.AmpPerDel)>90) {
Kovalev_D 85:0466ee8cdfc8 68 Gyro.AmpPer=90-Gyro.AmpPerDel; //проверка верхней граници мплитуды
igor_v 21:bc8c1cec3da6 69 }
Kovalev_D 85:0466ee8cdfc8 70 Nmax =(unsigned int)((100000/(Gyro.Frq>>16))-1); //
Kovalev_D 85:0466ee8cdfc8 71 Gyro.AmpN1=(unsigned int)((Nmax*(100-Gyro.AmpPer))/400); //левая граница амплитуды
Kovalev_D 85:0466ee8cdfc8 72 Gyro.AmpN2=(unsigned int)((Nmax/2)-Gyro.AmpN1); //правая граница амплитуды
igor_v 21:bc8c1cec3da6 73 Flag=1;
igor_v 21:bc8c1cec3da6 74
igor_v 21:bc8c1cec3da6 75 }
igor_v 21:bc8c1cec3da6 76
igor_v 21:bc8c1cec3da6 77 else {
igor_v 30:17c84ed091b3 78 if((Gyro.AmpPer+Gyro.AmpPerDel)>90) {
Kovalev_D 85:0466ee8cdfc8 79 Gyro.AmpPer=90-Gyro.AmpPerDel; //проверка верхней граници мплитуды
igor_v 21:bc8c1cec3da6 80 }
Kovalev_D 89:a0d344db227e 81
igor_v 30:17c84ed091b3 82 Nmax =(unsigned int)((100000/(Gyro.Frq>>16))-1);
Kovalev_D 85:0466ee8cdfc8 83 Gyro.AmpN1=(unsigned int)((Nmax*(100-Gyro.AmpPer+Gyro.AmpPerDel))/400);//левая граница амплитуды
Kovalev_D 85:0466ee8cdfc8 84 Gyro.AmpN2=(unsigned int)((Nmax/2)-Gyro.AmpN1); //правая граница амплитуды
igor_v 21:bc8c1cec3da6 85 Flag=0;
igor_v 21:bc8c1cec3da6 86 }
Kovalev_D 85:0466ee8cdfc8 87
igor_v 21:bc8c1cec3da6 88 //Tnoise=55;
Kovalev_D 85:0466ee8cdfc8 89 srand(Global_Time);//инициализация функции rand() для получения новых случайных велечин.
Kovalev_D 85:0466ee8cdfc8 90
igor_v 30:17c84ed091b3 91 Gyro.AmpT = (rand() % Gyro.AmpTD+Gyro.AmpMin);// ОШУМЛЕНИЕ amp
igor_v 21:bc8c1cec3da6 92 //изменение флага предидущей амплитуды
Kovalev_D 85:0466ee8cdfc8 93
igor_v 21:bc8c1cec3da6 94 } else {
igor_v 21:bc8c1cec3da6 95 PeriodCount++;
igor_v 21:bc8c1cec3da6 96 }
igor_v 0:8ad47e2b6f00 97 }
igor_v 0:8ad47e2b6f00 98
igor_v 0:8ad47e2b6f00 99 //////////////////////////////////////////////////////////////////////////////
igor_v 21:bc8c1cec3da6 100 /////////////////////////функция работы вибропривода//////////////////////////
igor_v 0:8ad47e2b6f00 101 //////////////////////////////////////////////////////////////////////////////
igor_v 0:8ad47e2b6f00 102 void cheng(void)
Kovalev_D 99:3d8f206ceac2 103 {
igor_v 21:bc8c1cec3da6 104 static int TempFaza, CountFaza;
Kovalev_D 99:3d8f206ceac2 105 //if (Buff_Restored_sin [CountV255] > MaxAmp) {MaxAmp=Buff_Restored_sin [CountV255];} // подумать со знаком
Kovalev_D 99:3d8f206ceac2 106
Kovalev_D 85:0466ee8cdfc8 107 switch(CountV31) {
igor_v 21:bc8c1cec3da6 108 case 0:
Kovalev_D 85:0466ee8cdfc8 109 CalcAmpN();//расчет ошумления и амплитуды задание интервалов выставки ножек вибро.
Kovalev_D 85:0466ee8cdfc8 110 //Vib.Frq = ((unsigned int) ((7680000*16/Output.Str.T_Vibro)))*16*16*16; //прием частоты из аск_глд старый протокол
Kovalev_D 85:0466ee8cdfc8 111 LPC_TIM1->MR0 =(unsigned int)(100000000/(Gyro.Frq>>11));//запись в таймер 1 значение частоты вибро
Kovalev_D 99:3d8f206ceac2 112 // Output.Str.T_Vibro=(unsigned int)((7680000*16/Gyro.Frq)*4096); //запись частоты для выдачи в аск_глд старый протокол
igor_v 21:bc8c1cec3da6 113 Time_vibro=0;
igor_v 21:bc8c1cec3da6 114 break;
Kovalev_D 99:3d8f206ceac2 115 case 20:
Kovalev_D 100:e197a8d2cf43 116 MaxAmp=Buff_Restored_sin [CountV31];
Kovalev_D 100:e197a8d2cf43 117 Gyro.Amp -= (MaxAmp - 200)*2; // расчет амплитудв с учетом разници
Kovalev_D 100:e197a8d2cf43 118
igor_v 21:bc8c1cec3da6 119 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Kovalev_D 99:3d8f206ceac2 120 if(Gyro.Amp>5500000) {
igor_v 30:17c84ed091b3 121 Gyro.Amp=1200000; // временное ограничение роста амплитуды в случае неподоженного гироскопа//////////
igor_v 21:bc8c1cec3da6 122 }
igor_v 21:bc8c1cec3da6 123 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
igor_v 0:8ad47e2b6f00 124
Kovalev_D 100:e197a8d2cf43 125 Gyro.AmpPer =Gyro.Amp>>16;
Kovalev_D 99:3d8f206ceac2 126 ffff=MaxAmp;
igor_v 21:bc8c1cec3da6 127 MaxAmp=0;
igor_v 21:bc8c1cec3da6 128 break;
Kovalev_D 85:0466ee8cdfc8 129
igor_v 21:bc8c1cec3da6 130 case 16:
igor_v 21:bc8c1cec3da6 131 Time_vibro=0;
igor_v 21:bc8c1cec3da6 132
igor_v 21:bc8c1cec3da6 133 // расчет Фазы с учетор разници
Kovalev_D 100:e197a8d2cf43 134 /* TempFaza = -4;
Kovalev_D 99:3d8f206ceac2 135 for (CountFaza = 0; CountFaza <8; CountFaza++ ) {
Kovalev_D 98:95b8e79f13e1 136 if (Buff_Restored_sin [(CountV255 - 12 + CountFaza) & 0xff] > 0 ) TempFaza++;
Kovalev_D 98:95b8e79f13e1 137 }
Kovalev_D 100:e197a8d2cf43 138 FrecTp=Buff_Restored_sin [(CountV31 - 12 + CountFaza) & 0xff];
Kovalev_D 100:e197a8d2cf43 139 Gyro.Frq -=TempFaza*1000;*/
igor_v 21:bc8c1cec3da6 140 break;
igor_v 21:bc8c1cec3da6 141 }
igor_v 21:bc8c1cec3da6 142
igor_v 21:bc8c1cec3da6 143 }