![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
forkd
Fork of LG2 by
tabel.txt@227:2774b56bfab0, 2018-01-05 (annotated)
- Committer:
- Kovalev_D
- Date:
- Fri Jan 05 08:14:38 2018 +0000
- Revision:
- 227:2774b56bfab0
- Parent:
- 209:224e7331a061
05.01.2018
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Kovalev_D | 152:cff1321ab25e | 1 | ________________________________________________________________________________________________ |
Kovalev_D | 152:cff1321ab25e | 2 | | Регистр |бит| описание | PIN | Состояние | |
Kovalev_D | 152:cff1321ab25e | 3 | | | | | | ВКЛ | ВЫКЛ | |
Kovalev_D | 152:cff1321ab25e | 4 | |------------------------|---|----------------------------------------------|------|------|------| |
Kovalev_D | 152:cff1321ab25e | 5 | | Gyro.PinReg | 0 | Описывает состояние ноги вибро 1 | 1.25 | 1 | 0 | |
Kovalev_D | 152:cff1321ab25e | 6 | | |---|----------------------------------------------|------|------|------| |
Kovalev_D | 152:cff1321ab25e | 7 | | Ргистр управения | 1 | Описывает состояние ноги вибро 2 | 1.28 | 1 | 0 | |
Kovalev_D | 152:cff1321ab25e | 8 | | ногами микрокнтроллера |---|----------------------------------------------|------|------|------| |
Kovalev_D | 152:cff1321ab25e | 9 | | | 2 | Описывает состояние подсветки | 2.12 | 1 | 0 | |
Kovalev_D | 152:cff1321ab25e | 10 | | |---|----------------------------------------------|------|------|------| |
Kovalev_D | 152:cff1321ab25e | 11 | | | 3 | Описывает состояние поджига | 0.4 | 1 | 0 | |
Kovalev_D | 152:cff1321ab25e | 12 | | |---|----------------------------------------------|------|------|------| |
Kovalev_D | 152:cff1321ab25e | 13 | | | 4 | Описывает состояние отладочного светодиода | 1.30 | 1 | 0 | |
Kovalev_D | 152:cff1321ab25e | 14 | |________________________|___|______________________________________________|______|______|______| |
Kovalev_D | 152:cff1321ab25e | 15 | |
Kovalev_D | 152:cff1321ab25e | 16 | ________________________________________________________________________________________________ |
Kovalev_D | 152:cff1321ab25e | 17 | | Регистр |бит| описание | PIN | Состояние | |
Kovalev_D | 152:cff1321ab25e | 18 | | | | | | ВКЛ | ВЫКЛ | каждую секунду проверяется нулевой бит регистра подсветки |
Kovalev_D | 152:cff1321ab25e | 19 | |------------------------|---|----------------------------------------------|------|------|------| затем сдвигаетя вправо на один бит для след значения. |
Kovalev_D | 152:cff1321ab25e | 20 | | Gyro.BackLight | 0 | 0 сек | 2.12 | 1 | 0 | |
Kovalev_D | 152:cff1321ab25e | 21 | | |---|----------------------------------------------|------|------|------| |
Kovalev_D | 152:cff1321ab25e | 22 | | сдвиговый регистр | 1 | 1 сек | 2.12 | 1 | 0 | |
Kovalev_D | 152:cff1321ab25e | 23 | | для задания последова- |---|----------------------------------------------|------|------|------| |
Kovalev_D | 152:cff1321ab25e | 24 | | тельности включения | 2 | 2 сек | 2.12 | 1 | 0 | |
Kovalev_D | 152:cff1321ab25e | 25 | |светодиодной подсветки. |---|----------------------------------------------|------|------|------| |
Kovalev_D | 152:cff1321ab25e | 26 | | | 3 | 3 сек | 2.12 | 1 | 0 | |
Kovalev_D | 152:cff1321ab25e | 27 | | |---|----------------------------------------------|------|------|------| |
Kovalev_D | 152:cff1321ab25e | 28 | | | 4 | 4 сек и тд. | 2.12 | 1 | 0 | |
Kovalev_D | 152:cff1321ab25e | 29 | |________________________|___|______________________________________________|______|______|______| |
Kovalev_D | 152:cff1321ab25e | 30 | |
Kovalev_D | 154:09888f2a229b | 31 | ________________________________________________________________________________________________ |
Kovalev_D | 154:09888f2a229b | 32 | | Регистр |бит| описание | PIN | Состояние | |
Kovalev_D | 154:09888f2a229b | 33 | | | | | | ВКЛ | ВЫКЛ | каждую секунду проверяется нулевой бит регистра поджига |
Kovalev_D | 154:09888f2a229b | 34 | |------------------------|---|----------------------------------------------|------|------|------| затем сдвигаетя вправо на один бит для след значения. |
Kovalev_D | 154:09888f2a229b | 35 | | Gyro.Discharg | 0 | 0 сек | 0.4 | 1 | 0 | |
Kovalev_D | 154:09888f2a229b | 36 | | |---|----------------------------------------------|------|------|------| |
Kovalev_D | 154:09888f2a229b | 37 | | сдвиговый регистр | 1 | 1 сек | 0.4 | 1 | 0 | |
Kovalev_D | 154:09888f2a229b | 38 | | для задания последова- |---|----------------------------------------------|------|------|------| |
Kovalev_D | 154:09888f2a229b | 39 | | тельности включения | 2 | 2 сек | 0.4 | 1 | 0 | |
Kovalev_D | 154:09888f2a229b | 40 | |светодиодной подсветки. |---|----------------------------------------------|------|------|------| |
Kovalev_D | 154:09888f2a229b | 41 | | | 3 | 3 сек | 0.4 | 1 | 0 | |
Kovalev_D | 154:09888f2a229b | 42 | | |---|----------------------------------------------|------|------|------| |
Kovalev_D | 154:09888f2a229b | 43 | | | 4 | 4 сек и тд. | 0.4 | 1 | 0 | |
Kovalev_D | 154:09888f2a229b | 44 | |________________________|___|______________________________________________|______|______|______| |
Kovalev_D | 152:cff1321ab25e | 45 | |
Kovalev_D | 145:f023b2f18b82 | 46 | _______________________________________________________________________________________________________________________________________________________________________________________ |
Kovalev_D | 145:f023b2f18b82 | 47 | | Параметр | описание | разрядность | диапозон | пересчет | |
Kovalev_D | 145:f023b2f18b82 | 48 | |------------------------|---------------------------------------------------------------|----------------------|----------------------------------|------------------------------------| |
Kovalev_D | 145:f023b2f18b82 | 49 | | | Назначаемый собственный адрес устройства. | unsigned int | | | |
Kovalev_D | 145:f023b2f18b82 | 50 | | Gyro.My_Addres | 0-технологический адрес. | 0xffff | 0x0000-0x0003 | ----------- | |
Kovalev_D | 145:f023b2f18b82 | 51 | | | 1-3 - адрес в системе. | | | | |
Kovalev_D | 145:f023b2f18b82 | 52 | |------------------------|---------------------------------------------------------------|----------------------|----------------------------------|------------------------------------| |
Kovalev_D | 145:f023b2f18b82 | 53 | | | Счетчик количества положительных импульсов за 1 такт | int | 0x0000-0xffff | | |
Kovalev_D | 145:f023b2f18b82 | 54 | | Gyro.CaunPlus | виброподвеса.Сумируется из буфера Buff_Restored_sin[CountV31] | не обрезается | 1 байт 2 байт | ----------- | |
Kovalev_D | 145:f023b2f18b82 | 55 | | | Обнуляется на CountV31=24.??? (VibroAMPRegul()) | | выдается как 0хff | 0хff | | |
Kovalev_D | 145:f023b2f18b82 | 56 | |------------------------|---------------------------------------------------------------|----------------------|-----------------------------------------------------------------------| |
Kovalev_D | 145:f023b2f18b82 | 57 | | | Счетчик количества отрицательных импульсов за 1 такт | int | 0x0000-0xffff | | |
Kovalev_D | 145:f023b2f18b82 | 58 | | Gyro.CaunMin | виброподвеса.Сумируется из буфера Buff_Restored_sin[CountV31] | не обрезается | 1 байт 2 байт | ----------- | |
Kovalev_D | 145:f023b2f18b82 | 59 | | | Обнуляется на CountV31=24.??? (VibroAMPRegul()) | | выдается как 0хff | 0хff | | |
Kovalev_D | 145:f023b2f18b82 | 60 | |------------------------|---------------------------------------------------------------|----------------------|-----------------------------------------------------------------------| |
Kovalev_D | 187:6bfb02c2831c | 61 | | |Счетчик, прирашение угла за период выдачи M_Rate - 1 раз в сек,| int | 0x0000-0xFFFF | | |
Kovalev_D | 145:f023b2f18b82 | 62 | | Gyro.CuruAngle |Delta_500Hz - 1 раз в 500 Гц,Delta_Ext - по внешней защелке. | не обрезается | 1 байт 2 байт | 1 импульс = ?°?'?" | |
Kovalev_D | 145:f023b2f18b82 | 63 | | |Сумируется по бувферу 32 точки (вычет виброподвеса) | | выдается как 0хff | 0хff | | |
Kovalev_D | 145:f023b2f18b82 | 64 | | |Обнуляется при выдачи данных в ACK_GLD. | | | | |
Kovalev_D | 145:f023b2f18b82 | 65 | |________________________|_______________________________________________________________|______________________|__________________________________|____________________________________| |
Kovalev_D | 145:f023b2f18b82 | 66 | | | |
Kovalev_D | 145:f023b2f18b82 | 67 | | Амплитуда синус косинус | |
Kovalev_D | 145:f023b2f18b82 | 68 | |_______________________________________________________________________________________________________________________________________________________________________________________| |
Kovalev_D | 145:f023b2f18b82 | 69 | | | | | | | |
Kovalev_D | 145:f023b2f18b82 | 70 | | | | | 0 V - 4 V | | |
Kovalev_D | 187:6bfb02c2831c | 71 | | Spi.ADC5 | Значение амплитуды ФД в текущий момент. | unsigned int | int 32767 - 0 | int 1 = 0.000122 | |
Kovalev_D | 145:f023b2f18b82 | 72 | | | Считывается из АЦП5 по SPI | не обрезается | hex 0x7fff - 0x0000 | | |
Kovalev_D | 145:f023b2f18b82 | 73 | | | | | | | |
Kovalev_D | 145:f023b2f18b82 | 74 | |------------------------|---------------------------------------------------------------|----------------------|-----------------------------------------------------------------------| |
Kovalev_D | 145:f023b2f18b82 | 75 | | | | unsigned int | 0 V - 4 V | | |
Kovalev_D | 145:f023b2f18b82 | 76 | | TempA | Перевернутое и умноженное на 2 значение Spi.ADC5. | не обрезается | int 0 - 65535 | TempA = (0x7fff - Spi.ADC5) << 1; | |
Kovalev_D | 145:f023b2f18b82 | 77 | | | | | hex 0x0000 - 0xffff | | |
Kovalev_D | 145:f023b2f18b82 | 78 | | | | | | | |
Kovalev_D | 145:f023b2f18b82 | 79 | |------------------------|---------------------------------------------------------------|----------------------|----------------------------------|------------------------------------| |
Kovalev_D | 145:f023b2f18b82 | 80 | | | | int | | | |
Kovalev_D | 145:f023b2f18b82 | 81 | | Gyro.ADF_Accum | Сумма значенний Амплитуды с АЦП5 (sin(),cos()) | не обрезается | 0 - int | Gyro.ADF_Accum += TempA; | |
Kovalev_D | 145:f023b2f18b82 | 82 | | | для расчтета отфильтровонного значения амплитуды | | максимальное значение | | |
Kovalev_D | 145:f023b2f18b82 | 83 | | | за пол периода виброподвеса (16 тактов) (быстрый фильтр) | | | | |
Kovalev_D | 145:f023b2f18b82 | 84 | |------------------------|---------------------------------------------------------------|----------------------|-----------------------------------------------------------------------| |
Kovalev_D | 145:f023b2f18b82 | 85 | | | | int | | | |
Kovalev_D | 145:f023b2f18b82 | 86 | | Gyro.ADS_Accum | Сумма значенний Амплитуды с АЦП5 ( sin(),cos() ) | не обрезается | 0 - int | Gyro.ADS_Accum += TempA; | |
Kovalev_D | 145:f023b2f18b82 | 87 | | | для расчтета отфильтровонного значения амплитуды | | максимальное значение | | |
Kovalev_D | 145:f023b2f18b82 | 88 | | | за 256 тактов виброподвеса (медленный фильтр) | | 7584065 | | |
Kovalev_D | 145:f023b2f18b82 | 89 | |------------------------|---------------------------------------------------------------|----------------------|----------------------------------|------------------------------------| |
Kovalev_D | 145:f023b2f18b82 | 90 | | | | int | 0 - int | | |
Kovalev_D | 187:6bfb02c2831c | 91 | | Gyro.AD_Slow | Значение Gyro.ADS_Accum и Gyro.ADF_Accum | не обрезается | максимальное значение | Gyro.AD_Fast = Gyro.ADF_Accum << 8 | |
Kovalev_D | 187:6bfb02c2831c | 92 | | | приведенные к одной разрядной сетке | | 1941520832 | | |
Kovalev_D | 145:f023b2f18b82 | 93 | | | | | | | |
Kovalev_D | 145:f023b2f18b82 | 94 | |------------------------|---------------------------------------------------------------|----------------------|----------------------------------|------------------------------------| |
Kovalev_D | 145:f023b2f18b82 | 95 | | | | int | 0 - int | | |
Kovalev_D | 187:6bfb02c2831c | 96 | | Gyro.AD_Fast | Значение Gyro.ADS_Accum и Gyro.ADF_Accum | не обрезается | максимальное значение |Gyro.AD_Fast = Gyro.ADF_Accum << 12 | |
Kovalev_D | 187:6bfb02c2831c | 97 | | | приведенные к одной разрядной сетке | | 1941520832 | | |
Kovalev_D | 145:f023b2f18b82 | 98 | | | | | | | |
Kovalev_D | 145:f023b2f18b82 | 99 | |________________________|_______________________________________________________________|______________________|__________________________________|____________________________________| |
Kovalev_D | 145:f023b2f18b82 | 100 | | | |
Kovalev_D | 145:f023b2f18b82 | 101 | | Вибропривод | |
Kovalev_D | 145:f023b2f18b82 | 102 | |_______________________________________________________________________________________________________________________________________________________________________________________| |
Kovalev_D | 145:f023b2f18b82 | 103 | | Параметр | описание | разрядность | диапозон | пересчет | |
Kovalev_D | 145:f023b2f18b82 | 104 | |------------------------|---------------------------------------------------------------|----------------------|----------------------------------|------------------------------------| |
Kovalev_D | 187:6bfb02c2831c | 105 | | | Знач частоты ВП в Гц формат 16.16 | | пример: | | |
Kovalev_D | 187:6bfb02c2831c | 106 | | Gyro.Frq | персчитется каждй 16 | unsigned int | 300-500Гц | Gyro.Frq = Gyro.FrqHZ<<16; | |
Kovalev_D | 187:6bfb02c2831c | 107 | | | для регуливки частоты записывается в | формат 16,16 | 19660800-32768000 | | |
Kovalev_D | 187:6bfb02c2831c | 108 | | | LPC_TIM1->MR0 =(unsigned int)((103000000/(Gyro.Frq>>11) | | | | |
Kovalev_D | 145:f023b2f18b82 | 109 | |------------------------|---------------------------------------------------------------|----------------------|----------------------------------|------------------------------------| |
Kovalev_D | 145:f023b2f18b82 | 110 | | | | | 0 - 500 | (задается) | |
Kovalev_D | 145:f023b2f18b82 | 111 | | Gyro.FrqHZ | значение частоты ВП в Гц | unsigned int | максимальное значение | Gyro.FrqHZ = Gyro.Frq>>16 | |
Kovalev_D | 145:f023b2f18b82 | 112 | | | используется только для инициализации | | 500 | | |
Kovalev_D | 145:f023b2f18b82 | 113 | | | начаольной частоты ВП | | | | |
Kovalev_D | 145:f023b2f18b82 | 114 | |------------------------|---------------------------------------------------------------|----------------------|----------------------------------|------------------------------------| |
Kovalev_D | 145:f023b2f18b82 | 115 | | | Максимально допустимая амплитуда в процентах | | | | |
Kovalev_D | 145:f023b2f18b82 | 116 | | Gyro.AmpPer | используется для расчета ошумления | unsigned int | 0%-98% | (задается) | |
Kovalev_D | 145:f023b2f18b82 | 117 | | | (Границ включения и отключения ног ВП) | | | | |
Kovalev_D | 187:6bfb02c2831c | 118 | | | Ширнва импульса ВП. | | | | |
Kovalev_D | 145:f023b2f18b82 | 119 | |------------------------|---------------------------------------------------------------|----------------------|----------------------------------|------------------------------------| |
Kovalev_D | 145:f023b2f18b82 | 120 | | | Частота ошумления ВП. При CountV31=0 входим в функцию | | | | |
Kovalev_D | 174:daffcc97d532 | 121 | | Gyro.AmpT |ошумления ВП. Если PeriodCount меньше Gyro.AmpT инкрементируем| unsigned int | ------------ | Gyro.AmpT | |
Kovalev_D | 174:daffcc97d532 | 122 | | |PeriodCount если счетчик больше или равен выполняем расчет | | --------------------- | = | |
Kovalev_D | 145:f023b2f18b82 | 123 | | |амплитуды вибропривода. (псевдослучайно в диаппазоне) | | | rand() % Gyro.AmpTD+Gyro.AmpMin) | |
Kovalev_D | 146:2bea299a7c4f | 124 | |------------------------|---------------------------------------------------------------|----------------------|----------------------------------|-----------------------------------------------------------| |
Kovalev_D | 146:2bea299a7c4f | 125 | | | Левая и правая граница импульса ВП соответственно, | | При Gyro.FrqHZ = 500Hz : | N1 = ((Nmax*(100-Gyro.AmpPer))/Gyro.FrqHZ) | |
Kovalev_D | 187:6bfb02c2831c | 126 | | Gyro.AmpN1 | используется для создания симетричной картины импульса ВП | unsigned int | N1(1-66) | N1 = ((Nmax*(100-Gyro.AmpPer+Gyro.AmpPerDel))/Gyro.FrqHZ) | |
Kovalev_D | 146:2bea299a7c4f | 127 | | Gyro.AmpN2 | относительно его центра при ушумлении | | 66-малая амплитуда | N2 = ((Nmax/2)-Gyro.AmpN1); | |
Kovalev_D | 146:2bea299a7c4f | 128 | | | _______ ___ | | N2 (100-165) | Nmax =((100000/(Gyro.Frq>>16))-1) | |
Kovalev_D | 146:2bea299a7c4f | 129 | | | _____/ = | = \____/=|=\_______ c-центр импульса | | 100-малая амплитуда | (максимальная длительность импульса) | |
Kovalev_D | 146:2bea299a7c4f | 130 | | | 0 N1 c N2 N1 c N2 Gyro.Frq | | | при данной частоте Gyro.Frq | |
Kovalev_D | 146:2bea299a7c4f | 131 | |________________________|_______________________________________________________________|______________________|__________________________________|___________________________________________________________| |
Kovalev_D | 146:2bea299a7c4f | 132 | | | |
Kovalev_D | 146:2bea299a7c4f | 133 | | АЦП и ЦАП | |
Kovalev_D | 146:2bea299a7c4f | 134 | |_______________________________________________________________________________________________________________________________________________________________________________________| |
Kovalev_D | 146:2bea299a7c4f | 135 | | | | | | Gyro.Termo=Spi.ADC1_Accum >> 5; | |
Kovalev_D | 146:2bea299a7c4f | 136 | | Gyro.Termo | данные с первого АЦП температура | unsigned int | | Spi.ADC1_Accum - накопленные | |
Kovalev_D | 146:2bea299a7c4f | 137 | | | Термодатчик типа LM337 | | 0V - 4V | данные за такт виброподвеса | |
Kovalev_D | 146:2bea299a7c4f | 138 | | | | | 0 - 65536 | | |
Kovalev_D | 146:2bea299a7c4f | 139 | |------------------------|---------------------------------------------------------------|----------------------|----------------------------------|------------------------------------| |
Kovalev_D | 146:2bea299a7c4f | 140 | | | | | | Gyro.Termo=Spi.ADC2_Accum >> 5; | |
Kovalev_D | 146:2bea299a7c4f | 141 | | Gyro.DeltaT | данные с второго АЦП | unsigned int | ------------------------------ | Spi.ADC2_Accum - накопленные | |
Kovalev_D | 150:29c9f7671bac | 142 | | | (градиент температур между двумя термодатчиками0 | | ------------------------------ | данные за такт виброподвеса | |
Kovalev_D | 145:f023b2f18b82 | 143 | | | | | | | |
Kovalev_D | 145:f023b2f18b82 | 144 | |------------------------|---------------------------------------------------------------|----------------------|----------------------------------|------------------------------------| |
Kovalev_D | 146:2bea299a7c4f | 145 | | | | | | Gyro.Termo=Spi.ADC3_Accum >> 5; | |
Kovalev_D | 146:2bea299a7c4f | 146 | | Gyro.In1 | ток в канале 1 | unsigned int | ----------------------------- | Spi.ADC3_Accum - накопленные | |
Kovalev_D | 146:2bea299a7c4f | 147 | | | | | ----------------------------- | данные за такт виброподвеса | |
Kovalev_D | 145:f023b2f18b82 | 148 | | | | | | | |
Kovalev_D | 145:f023b2f18b82 | 149 | |------------------------|---------------------------------------------------------------|----------------------|----------------------------------|------------------------------------| |
Kovalev_D | 146:2bea299a7c4f | 150 | | | | | | Gyro.Termo=Spi.ADC4_Accum >> 5; | |
Kovalev_D | 146:2bea299a7c4f | 151 | | Gyro.In2 | ток в канале 2 | unsigned int | ----------------------------- | Spi.ADC4_Accum - накопленные | |
Kovalev_D | 146:2bea299a7c4f | 152 | | | | | ----------------------------- | данные за такт виброподвеса | |
Kovalev_D | 146:2bea299a7c4f | 153 | | | | | | | |
Kovalev_D | 209:224e7331a061 | 154 | |------------------------|---------------------------------------------------------------|----------------------|----------------------------------|------------------------------------| |
Kovalev_D | 209:224e7331a061 | 155 | |
Kovalev_D | 209:224e7331a061 | 156 | |
Kovalev_D | 209:224e7331a061 | 157 | |
Kovalev_D | 209:224e7331a061 | 158 | |
Kovalev_D | 209:224e7331a061 | 159 | |
Kovalev_D | 209:224e7331a061 | 160 | |
Kovalev_D | 209:224e7331a061 | 161 | |
Kovalev_D | 209:224e7331a061 | 162 | |
Kovalev_D | 209:224e7331a061 | 163 | |
Kovalev_D | 209:224e7331a061 | 164 | |
Kovalev_D | 209:224e7331a061 | 165 | |
Kovalev_D | 209:224e7331a061 | 166 | |
Kovalev_D | 209:224e7331a061 | 167 | |
Kovalev_D | 209:224e7331a061 | 168 | |
Kovalev_D | 209:224e7331a061 | 169 | |
Kovalev_D | 209:224e7331a061 | 170 | /* |
Kovalev_D | 209:224e7331a061 | 171 | |
Kovalev_D | 209:224e7331a061 | 172 | void PlcRegul(void) |
Kovalev_D | 209:224e7331a061 | 173 | //Программа расчет напряжения для модулятора(//выполняется 1.25 микросек.) |
Kovalev_D | 209:224e7331a061 | 174 | { |
Kovalev_D | 209:224e7331a061 | 175 | |
Kovalev_D | 209:224e7331a061 | 176 | int templm=0; |
Kovalev_D | 209:224e7331a061 | 177 | int PLC_In; |
Kovalev_D | 209:224e7331a061 | 178 | int tempDac; |
Kovalev_D | 209:224e7331a061 | 179 | if(start<=5) |
Kovalev_D | 209:224e7331a061 | 180 | { |
Kovalev_D | 209:224e7331a061 | 181 | if(ttt) |
Kovalev_D | 209:224e7331a061 | 182 | {// +25 С° |
Kovalev_D | 209:224e7331a061 | 183 | templm = (Gyro.TermoNKU-Gyro.Termo); //дельта |
Kovalev_D | 209:224e7331a061 | 184 | if(templm>0) Gyro.Ktermo=1; |
Kovalev_D | 209:224e7331a061 | 185 | else Gyro.Ktermo=0; |
Kovalev_D | 209:224e7331a061 | 186 | Spi.DAC_B+=templm; |
Kovalev_D | 209:224e7331a061 | 187 | ttt=0; |
Kovalev_D | 209:224e7331a061 | 188 | } |
Kovalev_D | 209:224e7331a061 | 189 | } |
Kovalev_D | 209:224e7331a061 | 190 | |
Kovalev_D | 209:224e7331a061 | 191 | if(!(Gyro.PinReg & PinRegBitL) && (start>0)) start--; |
Kovalev_D | 209:224e7331a061 | 192 | |
Kovalev_D | 209:224e7331a061 | 193 | else if((start==0)) |
Kovalev_D | 209:224e7331a061 | 194 | { |
Kovalev_D | 209:224e7331a061 | 195 | |
Kovalev_D | 209:224e7331a061 | 196 | PLC_In = Gyro.AD_Slow; //выбираем даные для фильтрации |
Kovalev_D | 209:224e7331a061 | 197 | Gyro.PLC_Delta = PLC_In - Gyro.PLC_Old; //узнаем приращение |
Kovalev_D | 209:224e7331a061 | 198 | Gyro.PLC_DeltaADD = Gyro.PLC_Delta * Gyro.PLC_ADC_DOld; //приращение с учетом знака (и количества) прошлого приращения |
Kovalev_D | 209:224e7331a061 | 199 | Gyro.PLC_Old = PLC_In; //запоминание значения |
Kovalev_D | 209:224e7331a061 | 200 | if(Gyro.flagGph_W) |
Kovalev_D | 209:224e7331a061 | 201 | { |
Kovalev_D | 209:224e7331a061 | 202 | AD_MAX=0; |
Kovalev_D | 209:224e7331a061 | 203 | Gyro.flagGph_W--; |
Kovalev_D | 209:224e7331a061 | 204 | Gyro.PLC_Error2Mode=3; |
Kovalev_D | 209:224e7331a061 | 205 | } //если изменился коэфициент усиления ФД //3600 (размер моды порядка 3000) |
Kovalev_D | 209:224e7331a061 | 206 | if((Gyro.PLC_Lern < 150) && (Gyro.PLC_Error2Mode != 0)) |
Kovalev_D | 209:224e7331a061 | 207 | { //пробигаем по нескольким значениям цап(60*0х3с=0хВВ8) для определения максимальной амплитуды. |
Kovalev_D | 209:224e7331a061 | 208 | |
Kovalev_D | 209:224e7331a061 | 209 | if(Gyro.Ktermo)Spi.DAC_B += 0x3c; //добовляем в значение цапа 60 |
Kovalev_D | 209:224e7331a061 | 210 | else Spi.DAC_B -= 0x3c; |
Kovalev_D | 209:224e7331a061 | 211 | if(AD_MAX < PLC_In){AD_MAX = PLC_In;} //если максимальная амплитуда меньше текущей записываем новую максимальную амплитуду. |
Kovalev_D | 209:224e7331a061 | 212 | else if ((AD_MAX>PLC_In)&&(AD_MAX>1550800000)) r++; //если текущая амплитуда меньше максимально найденной то инкрементируем счетчик. |
Kovalev_D | 209:224e7331a061 | 213 | if (r>10) |
Kovalev_D | 209:224e7331a061 | 214 | { |
Kovalev_D | 209:224e7331a061 | 215 | Gyro.PLC_Lern=151; |
Kovalev_D | 209:224e7331a061 | 216 | Gyro.PLC_Error2Mode=3; |
Kovalev_D | 209:224e7331a061 | 217 | } //если текущая амплитуда меньше максимально найденной в течении 5 тактов то выходим из поиска |
Kovalev_D | 209:224e7331a061 | 218 | Gyro.CuruAngle = 0; //не считаем угол пока ищем максивальную амплитуду. |
Kovalev_D | 209:224e7331a061 | 219 | } //работает только первые ~30-40 секунд (37 сек). |
Kovalev_D | 209:224e7331a061 | 220 | if (Gyro.PLC_Lern<160) Gyro.PLC_Lern++; |
Kovalev_D | 209:224e7331a061 | 221 | |
Kovalev_D | 209:224e7331a061 | 222 | if(AD_MAX < PLC_In) {AD_MAX = PLC_In; l=0;} //обновление максимального значения амплитуды обнуление счетчика малого понижения амплитуды. |
Kovalev_D | 209:224e7331a061 | 223 | else l++; //инкрементируем счетчик малого понижения желаемой амплитуды (максимальной замеченной) |
Kovalev_D | 209:224e7331a061 | 224 | if((l > 300)&&(Gyro.PLC_Error2Mode == 0)) {AD_MAX -= 2107200;k=15;l=0;} //если счетчик малого понижения амплитуды больше 100(аммплитуда не обновлялась 100 раз). m |
Kovalev_D | 209:224e7331a061 | 225 | if ((k == 15)&&(Gyro.PLC_Lern > 150)) Spi.DAC_B += 75; //после уменьшения максимальной амплитуды двигаем шевелем цап |
Kovalev_D | 209:224e7331a061 | 226 | else if((k == 1)&&(Gyro.PLC_Lern > 150)) {Spi.DAC_B -= 75; k=0;l=0;} //для быстрог поиска новог максимума. |
Kovalev_D | 209:224e7331a061 | 227 | if(k>0)k--; |
Kovalev_D | 209:224e7331a061 | 228 | |
Kovalev_D | 209:224e7331a061 | 229 | Gyro.PlC_MaxD=(unsigned int)(AD_MAX-PLC_In); //ищем разницу между желаемой и действительной амплитудами. |
Kovalev_D | 209:224e7331a061 | 230 | |
Kovalev_D | 209:224e7331a061 | 231 | if(Gyro.ModJump==1) { ///прыжок с моды на моду. (-->) |
Kovalev_D | 209:224e7331a061 | 232 | Gyro.OldCuruAngle = Gyro.CuruAngle; |
Kovalev_D | 209:224e7331a061 | 233 | Gyro.ModJump=0; |
Kovalev_D | 209:224e7331a061 | 234 | Spi.DAC_B += 4300; |
Kovalev_D | 209:224e7331a061 | 235 | Gyro.PLC_Error2Mode=1; |
Kovalev_D | 209:224e7331a061 | 236 | Gyro.StopCuruAngle=2; |
Kovalev_D | 209:224e7331a061 | 237 | } |
Kovalev_D | 209:224e7331a061 | 238 | |
Kovalev_D | 209:224e7331a061 | 239 | if(Gyro.ModJump==2) { ///прыжок с моды на моду. (<--) |
Kovalev_D | 209:224e7331a061 | 240 | Gyro.OldCuruAngle = Gyro.CuruAngle; |
Kovalev_D | 209:224e7331a061 | 241 | Gyro.ModJump=0; |
Kovalev_D | 209:224e7331a061 | 242 | Spi.DAC_B -= 5250; |
Kovalev_D | 209:224e7331a061 | 243 | Gyro.PLC_Error2Mode=1; |
Kovalev_D | 209:224e7331a061 | 244 | Gyro.StopCuruAngle=2; |
Kovalev_D | 209:224e7331a061 | 245 | } |
Kovalev_D | 209:224e7331a061 | 246 | |
Kovalev_D | 209:224e7331a061 | 247 | if(Gyro.RgConA&0x8) { // если контур регулирования замкнут |
Kovalev_D | 209:224e7331a061 | 248 | if ( Gyro.PLC_Error2Mode > 0) { Gyro.PLC_Error2Mode --; Gyro.PLC_ADC_DOld = 0;} // если ошибка(нахожление в двух модовом) |
Kovalev_D | 209:224e7331a061 | 249 | else if ( Gyro.PLC_DeltaADD > 0) { Gyro.PLC_ADC_DOld = 1;} |
Kovalev_D | 209:224e7331a061 | 250 | else if ( Gyro.PLC_DeltaADD < 0) { Gyro.PLC_ADC_DOld = -1;} |
Kovalev_D | 209:224e7331a061 | 251 | else { Gyro.PLC_ADC_DOld = 1;} |
Kovalev_D | 209:224e7331a061 | 252 | } |
Kovalev_D | 209:224e7331a061 | 253 | else {Gyro.PLC_Error2Mode = 1; Gyro.PLC_DeltaADD = 0;} |
Kovalev_D | 209:224e7331a061 | 254 | |
Kovalev_D | 209:224e7331a061 | 255 | ///прыжок с моды на моду. |
Kovalev_D | 209:224e7331a061 | 256 | |
Kovalev_D | 209:224e7331a061 | 257 | |
Kovalev_D | 209:224e7331a061 | 258 | |
Kovalev_D | 209:224e7331a061 | 259 | |
Kovalev_D | 209:224e7331a061 | 260 | |
Kovalev_D | 209:224e7331a061 | 261 | tempADC5=0x7fff-Spi.ADC5; |
Kovalev_D | 209:224e7331a061 | 262 | // контур замкнут включен лазер |
Kovalev_D | 209:224e7331a061 | 263 | if((Gyro.RgConA&0x8) && (tempADC5>1000)) |
Kovalev_D | 209:224e7331a061 | 264 | { |
Kovalev_D | 209:224e7331a061 | 265 | if(Gyro.PlC_MaxD>(50<<17)) { // 3 режим регулирования |
Kovalev_D | 209:224e7331a061 | 266 | tempDac=(unsigned int)(Gyro.PlC_MaxD>>19); |
Kovalev_D | 209:224e7331a061 | 267 | if(tempDac>600) tempDac=600; //ограничение на регулирование если очень большая разница амплитуд |
Kovalev_D | 209:224e7331a061 | 268 | Spi.DAC_B += Gyro.PLC_ADC_DOld * tempDac; //новое значение в цап (±1 * значение регулировки) |
Kovalev_D | 209:224e7331a061 | 269 | tempDac = Gyro.PLC_ADC_DOld * tempDac; //используется только для выдачи |
Kovalev_D | 209:224e7331a061 | 270 | flagmod=3; |
Kovalev_D | 209:224e7331a061 | 271 | } |
Kovalev_D | 209:224e7331a061 | 272 | else if(Gyro.PlC_MaxD>(12<<17)) { // 2 режим регулирования |
Kovalev_D | 209:224e7331a061 | 273 | tempDac=(unsigned int)(Gyro.PlC_MaxD>>19); |
Kovalev_D | 209:224e7331a061 | 274 | Spi.DAC_B += Gyro.PLC_ADC_DOld * (tempDac); |
Kovalev_D | 209:224e7331a061 | 275 | tempDac = Gyro.PLC_ADC_DOld * (tempDac); //используется только для выдачи |
Kovalev_D | 209:224e7331a061 | 276 | flagmod=2; |
Kovalev_D | 209:224e7331a061 | 277 | } |
Kovalev_D | 209:224e7331a061 | 278 | else if(Gyro.PlC_MaxD<(2<<17)) { //режим если дельта равна 0; |
Kovalev_D | 209:224e7331a061 | 279 | tempDac=2; |
Kovalev_D | 209:224e7331a061 | 280 | Spi.DAC_B += Gyro.PLC_ADC_DOld * tempDac; |
Kovalev_D | 209:224e7331a061 | 281 | flagmod=0; |
Kovalev_D | 209:224e7331a061 | 282 | } |
Kovalev_D | 209:224e7331a061 | 283 | else { |
Kovalev_D | 209:224e7331a061 | 284 | tempDac=2; // 1 режим регулирования |
Kovalev_D | 209:224e7331a061 | 285 | Spi.DAC_B += Gyro.PLC_ADC_DOld *tempDac; |
Kovalev_D | 209:224e7331a061 | 286 | tempDac = Gyro.PLC_ADC_DOld * tempDac; |
Kovalev_D | 209:224e7331a061 | 287 | flagmod=1; |
Kovalev_D | 209:224e7331a061 | 288 | } |
Kovalev_D | 209:224e7331a061 | 289 | } |
Kovalev_D | 209:224e7331a061 | 290 | |
Kovalev_D | 209:224e7331a061 | 291 | |
Kovalev_D | 209:224e7331a061 | 292 | if ( Spi.DAC_B < 15300 ) {Spi.DAC_B = 32000; Gyro.PLC_Error2Mode = 5; Gyro.PLC_DeltaADD = 0;} //проверка на переваливание за границу. |
Kovalev_D | 209:224e7331a061 | 293 | else if ( Spi.DAC_B > 53000) {Spi.DAC_B = 32000; Gyro.PLC_Error2Mode = 5; Gyro.PLC_DeltaADD = 0;} |
Kovalev_D | 209:224e7331a061 | 294 | |
Kovalev_D | 209:224e7331a061 | 295 | } |
Kovalev_D | 209:224e7331a061 | 296 | if(Gyro.StopCuruAngle) {Gyro.CuruAngle = Gyro.OldCuruAngle; Gyro.StopCuruAngle--;} |
Kovalev_D | 209:224e7331a061 | 297 | /////////////////////// |
Kovalev_D | 209:224e7331a061 | 298 | //////////лог////////// |
Kovalev_D | 209:224e7331a061 | 299 | /////////////////////// |
Kovalev_D | 209:224e7331a061 | 300 | if(Gyro.LogPLC==1) { |
Kovalev_D | 209:224e7331a061 | 301 | |
Kovalev_D | 209:224e7331a061 | 302 | 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);//выдаем в терминал для постройки граффика регулировки периметра. |
Kovalev_D | 209:224e7331a061 | 303 | Gyro.CuruAngle=0; |
Kovalev_D | 209:224e7331a061 | 304 | Gyro.tempdelta=0; |
Kovalev_D | 209:224e7331a061 | 305 | Gyro.tempdelta2=0; |
Kovalev_D | 209:224e7331a061 | 306 | WriteCon(Time); |
Kovalev_D | 209:224e7331a061 | 307 | |
Kovalev_D | 209:224e7331a061 | 308 | } |
Kovalev_D | 209:224e7331a061 | 309 | } |
Kovalev_D | 209:224e7331a061 | 310 | |
Kovalev_D | 209:224e7331a061 | 311 | |
Kovalev_D | 209:224e7331a061 | 312 | |
Kovalev_D | 209:224e7331a061 | 313 | */ |
Kovalev_D | 209:224e7331a061 | 314 | |
Kovalev_D | 209:224e7331a061 | 315 | |
Kovalev_D | 209:224e7331a061 | 316 | |
Kovalev_D | 209:224e7331a061 | 317 | |
Kovalev_D | 209:224e7331a061 | 318 | void CalcAmpD(void) |
Kovalev_D | 209:224e7331a061 | 319 | { |
Kovalev_D | 209:224e7331a061 | 320 | // GyroP.Str.wall++; |
Kovalev_D | 209:224e7331a061 | 321 | // if(GyroP.Str.wall>16) |
Kovalev_D | 209:224e7331a061 | 322 | // { |
Kovalev_D | 209:224e7331a061 | 323 | // GyroP.Str.wall=0; |
Kovalev_D | 209:224e7331a061 | 324 | // klk++; |
Kovalev_D | 209:224e7331a061 | 325 | // if(klk>32) klk = 0; |
Kovalev_D | 209:224e7331a061 | 326 | // } |
Kovalev_D | 209:224e7331a061 | 327 | unsigned int Nmax=0; |
Kovalev_D | 209:224e7331a061 | 328 | Gyro.AmpPerDel = ModArrayTriangle[klk]; |
Kovalev_D | 209:224e7331a061 | 329 | |
Kovalev_D | 209:224e7331a061 | 330 | tempi++; |
Kovalev_D | 209:224e7331a061 | 331 | srand(Global_Time);//инициализация функции rand() для получения новых случайных велечин. |
Kovalev_D | 209:224e7331a061 | 332 | Gyro.AmpT = (rand() %8-4);// ОШУМЛЕНИЕ amp |
Kovalev_D | 209:224e7331a061 | 333 | |
Kovalev_D | 209:224e7331a061 | 334 | Nmax = (unsigned int)((100000/(Gyro.Frq>>16))-1); |
Kovalev_D | 209:224e7331a061 | 335 | Gyro.AmpN1=(unsigned int)((Nmax*((100-Gyro.AmpPer)+Gyro.AmpPerDel+Gyro.AmpT))/(Gyro.Frq>>16)); //левая граница амплитуды |
Kovalev_D | 209:224e7331a061 | 336 | Gyro.AmpN2=(unsigned int)((Nmax/2)-Gyro.AmpN1); //правая граница амплитуды |
Kovalev_D | 209:224e7331a061 | 337 | |
Kovalev_D | 209:224e7331a061 | 338 | LPC_TIM1->MR0 =(unsigned int)(103000000/((Gyro.Frq)>>11));//запись в таймер нового значение частоты вибро |
Kovalev_D | 209:224e7331a061 | 339 | // LPC_TIM1->MR0 +=(Gyro.AmpT<<5); |
Kovalev_D | 209:224e7331a061 | 340 | } |
Kovalev_D | 209:224e7331a061 | 341 | . |
Kovalev_D | 209:224e7331a061 | 342 | |
Kovalev_D | 209:224e7331a061 | 343 | |
Kovalev_D | 209:224e7331a061 | 344 | |
Kovalev_D | 209:224e7331a061 | 345 | /* |
Kovalev_D | 209:224e7331a061 | 346 | void Calc2AmpN(void)//расчет точек старта и стопа импульса вибропривода и расчет частоты ошумления. |
Kovalev_D | 209:224e7331a061 | 347 | { |
Kovalev_D | 209:224e7331a061 | 348 | Gyro.AmpSC=0; |
Kovalev_D | 209:224e7331a061 | 349 | static int PeriodCount = 0; |
Kovalev_D | 209:224e7331a061 | 350 | unsigned int Nmax=0; |
Kovalev_D | 209:224e7331a061 | 351 | Gyro.AmpSC = Gyro.MaxAmp - OldMaxAmp ; |
Kovalev_D | 209:224e7331a061 | 352 | if(Gyro.AmpSC<0) Gyro.AmpSC=Gyro.AmpSC*(-1); |
Kovalev_D | 209:224e7331a061 | 353 | OldMaxAmp=Gyro.MaxAmp; |
Kovalev_D | 209:224e7331a061 | 354 | |
Kovalev_D | 209:224e7331a061 | 355 | if(Gyro.AmpSC <55)countA++; |
Kovalev_D | 209:224e7331a061 | 356 | if(countA >2) |
Kovalev_D | 209:224e7331a061 | 357 | { |
Kovalev_D | 209:224e7331a061 | 358 | countA=0; |
Kovalev_D | 209:224e7331a061 | 359 | srand(Global_Time); |
Kovalev_D | 209:224e7331a061 | 360 | if(Cheng_AMP_Flag) |
Kovalev_D | 209:224e7331a061 | 361 | { |
Kovalev_D | 209:224e7331a061 | 362 | Cheng_AMP_Flag=0; |
Kovalev_D | 209:224e7331a061 | 363 | Gyro.AmpPerDel = (rand() % Gyro.AmpTD+Gyro.AmpMin);// ОШУМЛЕНИЕ amp |
Kovalev_D | 209:224e7331a061 | 364 | Nmax = (unsigned int)((100000/(Gyro.Frq>>16))-1); |
Kovalev_D | 209:224e7331a061 | 365 | Gyro.AmpN1=(unsigned int)((Nmax*(100-Gyro.AmpPer+Gyro.AmpPerDel))/(Gyro.Frq>>16)); //левая граница амплитуды |
Kovalev_D | 209:224e7331a061 | 366 | Gyro.AmpN2=(unsigned int)((Nmax/2)-Gyro.AmpN1); //правая граница амплитуды |
Kovalev_D | 209:224e7331a061 | 367 | } |
Kovalev_D | 209:224e7331a061 | 368 | else |
Kovalev_D | 209:224e7331a061 | 369 | { |
Kovalev_D | 209:224e7331a061 | 370 | Cheng_AMP_Flag=1; |
Kovalev_D | 209:224e7331a061 | 371 | Nmax = (unsigned int)((100000/(Gyro.Frq>>16))-1); |
Kovalev_D | 209:224e7331a061 | 372 | Gyro.AmpN1=(unsigned int)((Nmax*(100-Gyro.AmpPer))/(Gyro.Frq>>16)); //левая граница амплитуды |
Kovalev_D | 209:224e7331a061 | 373 | Gyro.AmpN2=(unsigned int)((Nmax/2)-Gyro.AmpN1); //правая граница амплитуды |
Kovalev_D | 209:224e7331a061 | 374 | } |
Kovalev_D | 209:224e7331a061 | 375 | } //8046 |
Kovalev_D | 209:224e7331a061 | 376 | |
Kovalev_D | 209:224e7331a061 | 377 | LPC_TIM1->MR0 =(unsigned int)(103000000/((Gyro.Frq)>>11));//запись в таймер нового значение частоты вибро |
Kovalev_D | 209:224e7331a061 | 378 | }*/ |
Kovalev_D | 209:224e7331a061 | 379 | /* |
Kovalev_D | 209:224e7331a061 | 380 | void CalcAmpN(void)//расчет точек старта и стопа импульса вибропривода и расчет частоты ошумления. |
Kovalev_D | 209:224e7331a061 | 381 | { |
Kovalev_D | 209:224e7331a061 | 382 | Gyro.AmpSC=0; |
Kovalev_D | 209:224e7331a061 | 383 | static int PeriodCount = 0; |
Kovalev_D | 209:224e7331a061 | 384 | unsigned int Nmax=0; |
Kovalev_D | 209:224e7331a061 | 385 | Gyro.AmpSC = Gyro.MaxAmp - OldMaxAmp ; |
Kovalev_D | 209:224e7331a061 | 386 | if(Gyro.AmpSC<0) Gyro.AmpSC=Gyro.AmpSC*(-1); |
Kovalev_D | 209:224e7331a061 | 387 | OldMaxAmp=Gyro.MaxAmp; |
Kovalev_D | 209:224e7331a061 | 388 | |
Kovalev_D | 209:224e7331a061 | 389 | if(Gyro.AmpSC <5)countA++; |
Kovalev_D | 209:224e7331a061 | 390 | if(countA >3) |
Kovalev_D | 209:224e7331a061 | 391 | { |
Kovalev_D | 209:224e7331a061 | 392 | countA=0; |
Kovalev_D | 209:224e7331a061 | 393 | |
Kovalev_D | 209:224e7331a061 | 394 | Nmax = (unsigned int)((100000/(Gyro.Frq>>16))-1); |
Kovalev_D | 209:224e7331a061 | 395 | Gyro.AmpN1=(unsigned int)((Nmax*(100-Gyro.AmpPer+Gyro.AmpPerDel))/(Gyro.Frq>>16)); //левая граница амплитуды |
Kovalev_D | 209:224e7331a061 | 396 | Gyro.AmpN2=(unsigned int)((Nmax/2)-Gyro.AmpN1); //правая граница амплитуды |
Kovalev_D | 209:224e7331a061 | 397 | Cheng_AMP_Flag=1; |
Kovalev_D | 209:224e7331a061 | 398 | |
Kovalev_D | 209:224e7331a061 | 399 | tempDP=Gyro.AmpPerDel; |
Kovalev_D | 209:224e7331a061 | 400 | srand(Global_Time);//инициализация функции rand() для получения новых случайных велечин. |
Kovalev_D | 209:224e7331a061 | 401 | if(Gyro.flag==1) Gyro.AmpPerDel = 1; |
Kovalev_D | 209:224e7331a061 | 402 | else Gyro.AmpPerDel = (rand() % Gyro.AmpTD+Gyro.AmpMin);// ОШУМЛЕНИЕ amp |
Kovalev_D | 209:224e7331a061 | 403 | } //8046 |
Kovalev_D | 209:224e7331a061 | 404 | |
Kovalev_D | 209:224e7331a061 | 405 | LPC_TIM1->MR0 =(unsigned int)(103000000/((Gyro.Frq)>>11));//запись в таймер нового значение частоты вибро |
Kovalev_D | 209:224e7331a061 | 406 | } |
Kovalev_D | 209:224e7331a061 | 407 | |
Kovalev_D | 209:224e7331a061 | 408 | */ |
Kovalev_D | 209:224e7331a061 | 409 | |
Kovalev_D | 209:224e7331a061 | 410 | /* |
Kovalev_D | 209:224e7331a061 | 411 | void CalcAmpD(void) |
Kovalev_D | 209:224e7331a061 | 412 | { |
Kovalev_D | 209:224e7331a061 | 413 | unsigned int Nmax=0; |
Kovalev_D | 209:224e7331a061 | 414 | countA++; |
Kovalev_D | 209:224e7331a061 | 415 | if( countA>1) |
Kovalev_D | 209:224e7331a061 | 416 | { |
Kovalev_D | 209:224e7331a061 | 417 | countA=0; |
Kovalev_D | 209:224e7331a061 | 418 | |
Kovalev_D | 209:224e7331a061 | 419 | Nmax = (unsigned int)((100000/(Gyro.Frq>>16))-1); |
Kovalev_D | 209:224e7331a061 | 420 | Gyro.AmpN1=(unsigned int)((Nmax*(100-Gyro.AmpPer-Gyro.AmpPerDel))/(Gyro.Frq>>16)); //левая граница амплитуды |
Kovalev_D | 209:224e7331a061 | 421 | Gyro.AmpN2=(unsigned int)((Nmax/2)-Gyro.AmpN1); //правая граница амплитуды |
Kovalev_D | 209:224e7331a061 | 422 | Cheng_AMP_Flag=1; |
Kovalev_D | 209:224e7331a061 | 423 | |
Kovalev_D | 209:224e7331a061 | 424 | // if(Gyro.flag==1) Gyro.AmpPerDel = 1; |
Kovalev_D | 209:224e7331a061 | 425 | |
Kovalev_D | 209:224e7331a061 | 426 | |
Kovalev_D | 209:224e7331a061 | 427 | switch(Znak) { |
Kovalev_D | 209:224e7331a061 | 428 | case 0: |
Kovalev_D | 209:224e7331a061 | 429 | Gyro.AmpPerDel++; |
Kovalev_D | 209:224e7331a061 | 430 | if (Gyro.AmpPerDel>10){Znak=1; fnoize++;} |
Kovalev_D | 209:224e7331a061 | 431 | break; |
Kovalev_D | 209:224e7331a061 | 432 | |
Kovalev_D | 209:224e7331a061 | 433 | case 1: |
Kovalev_D | 209:224e7331a061 | 434 | Gyro.AmpPerDel--; |
Kovalev_D | 209:224e7331a061 | 435 | if (Gyro.AmpPerDel<1)Znak=0; |
Kovalev_D | 209:224e7331a061 | 436 | if (fnoize>6)Znak=2; |
Kovalev_D | 209:224e7331a061 | 437 | break; |
Kovalev_D | 209:224e7331a061 | 438 | |
Kovalev_D | 209:224e7331a061 | 439 | case 2: |
Kovalev_D | 209:224e7331a061 | 440 | Gyro.AmpPerDel++; |
Kovalev_D | 209:224e7331a061 | 441 | if (Gyro.AmpPerDel>7){Znak=3; fnoize++;} |
Kovalev_D | 209:224e7331a061 | 442 | break; |
Kovalev_D | 209:224e7331a061 | 443 | |
Kovalev_D | 209:224e7331a061 | 444 | case 3: |
Kovalev_D | 209:224e7331a061 | 445 | Gyro.AmpPerDel--; |
Kovalev_D | 209:224e7331a061 | 446 | if (Gyro.AmpPerDel<1)Znak=2; |
Kovalev_D | 209:224e7331a061 | 447 | if (fnoize>12){Znak=4;} |
Kovalev_D | 209:224e7331a061 | 448 | break; |
Kovalev_D | 209:224e7331a061 | 449 | |
Kovalev_D | 209:224e7331a061 | 450 | case 4: |
Kovalev_D | 209:224e7331a061 | 451 | Gyro.AmpPerDel++; |
Kovalev_D | 209:224e7331a061 | 452 | if (Gyro.AmpPerDel>15){Znak=5; fnoize++;} |
Kovalev_D | 209:224e7331a061 | 453 | break; |
Kovalev_D | 209:224e7331a061 | 454 | |
Kovalev_D | 209:224e7331a061 | 455 | case 5: |
Kovalev_D | 209:224e7331a061 | 456 | Gyro.AmpPerDel--; |
Kovalev_D | 209:224e7331a061 | 457 | if (Gyro.AmpPerDel<1)Znak=4; |
Kovalev_D | 209:224e7331a061 | 458 | if (fnoize>18){Znak=6;} |
Kovalev_D | 209:224e7331a061 | 459 | break; |
Kovalev_D | 209:224e7331a061 | 460 | |
Kovalev_D | 209:224e7331a061 | 461 | case 6: |
Kovalev_D | 209:224e7331a061 | 462 | Gyro.AmpPerDel++; |
Kovalev_D | 209:224e7331a061 | 463 | if (Gyro.AmpPerDel>6){Znak=7;fnoize++;} |
Kovalev_D | 209:224e7331a061 | 464 | break; |
Kovalev_D | 209:224e7331a061 | 465 | |
Kovalev_D | 209:224e7331a061 | 466 | case 7: |
Kovalev_D | 209:224e7331a061 | 467 | Gyro.AmpPerDel--; |
Kovalev_D | 209:224e7331a061 | 468 | if (Gyro.AmpPerDel<1)Znak=6; |
Kovalev_D | 209:224e7331a061 | 469 | if (fnoize>24){Znak=0;fnoize=0;} |
Kovalev_D | 209:224e7331a061 | 470 | break; |
Kovalev_D | 209:224e7331a061 | 471 | } |
Kovalev_D | 209:224e7331a061 | 472 | } |
Kovalev_D | 209:224e7331a061 | 473 | LPC_TIM1->MR0 =(unsigned int)(103000000/((Gyro.Frq)>>11));//запись в таймер нового значение частоты вибро |
Kovalev_D | 209:224e7331a061 | 474 | } |
Kovalev_D | 209:224e7331a061 | 475 | */ |
Kovalev_D | 209:224e7331a061 | 476 | |
Kovalev_D | 209:224e7331a061 | 477 | |
Kovalev_D | 209:224e7331a061 | 478 | |
Kovalev_D | 209:224e7331a061 | 479 | int Mrand(void) |
Kovalev_D | 209:224e7331a061 | 480 | { |
Kovalev_D | 209:224e7331a061 | 481 | int b=0; |
Kovalev_D | 209:224e7331a061 | 482 | z=z*Gyro.AD_Slow; |
Kovalev_D | 209:224e7331a061 | 483 | b = ((z>>10) & 0xf)+20; |
Kovalev_D | 209:224e7331a061 | 484 | /* sprintf((Time),"%d\r\n", b); |
Kovalev_D | 209:224e7331a061 | 485 | WriteCon(Time);*/ |
Kovalev_D | 209:224e7331a061 | 486 | return b; |
Kovalev_D | 209:224e7331a061 | 487 | } |
Kovalev_D | 209:224e7331a061 | 488 | |
Kovalev_D | 209:224e7331a061 | 489 | |
Kovalev_D | 209:224e7331a061 | 490 | |
Kovalev_D | 209:224e7331a061 | 491 | /*дол лучших времен |
Kovalev_D | 209:224e7331a061 | 492 | unsigned long mwc() |
Kovalev_D | 209:224e7331a061 | 493 | { |
Kovalev_D | 209:224e7331a061 | 494 | static unsigned long x3456789, |
Kovalev_D | 209:224e7331a061 | 495 | y=362436069, |
Kovalev_D | 209:224e7331a061 | 496 | z=77465321, |
Kovalev_D | 209:224e7331a061 | 497 | c=13579; |
Kovalev_D | 209:224e7331a061 | 498 | unsigned long long t; |
Kovalev_D | 209:224e7331a061 | 499 | tС6905990LL*x+c; |
Kovalev_D | 209:224e7331a061 | 500 | x=y; |
Kovalev_D | 209:224e7331a061 | 501 | y=z; |
Kovalev_D | 209:224e7331a061 | 502 | c=(t>>32); |
Kovalev_D | 209:224e7331a061 | 503 | return z=(t&0xffffffff); |
Kovalev_D | 209:224e7331a061 | 504 | } |
Kovalev_D | 209:224e7331a061 | 505 | */ |