123
Fork of LG by
develop.txt@197:7a05523bf588, 2016-10-19 (annotated)
- Committer:
- Kovalev_D
- Date:
- Wed Oct 19 10:55:05 2016 +0000
- Revision:
- 197:7a05523bf588
- Parent:
- 177:672ef279c8e0
modul
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Diletant | 177:672ef279c8e0 | 1 | 01.07.2016 Dile Tant |
Diletant | 156:e68ee0bcdcda | 2 | Основные циклы: |
Diletant | 156:e68ee0bcdcda | 3 | Измерительный плавающий цикл/Measurment floating cycle |
Diletant | 174:0f86eedd511c | 4 | Цикл задается измерительным таймером с переменной частотой следования прерываний - таймер 1 контроллера |
Diletant | 177:672ef279c8e0 | 5 | Регулярный внутренний цикл/Regular internal cycle |
Diletant | 174:0f86eedd511c | 6 | Цикл задается управляющим таймером с постоянной частотой следования прерываний - таймер 2 контроллера |
Diletant | 156:e68ee0bcdcda | 7 | Основной последовательный плавающий цикл/Main sequential floating cycle |
Diletant | 156:e68ee0bcdcda | 8 | Цикл выполняется с переменной частотой, определяемой загрузкой процессора. |
Diletant | 177:672ef279c8e0 | 9 | Регулярный внешний цикл/Regular external cycle |
Diletant | 177:672ef279c8e0 | 10 | Цикл задается внешним периодическим сигналом - защелкой |
Diletant | 156:e68ee0bcdcda | 11 | |
Diletant | 156:e68ee0bcdcda | 12 | Замечание: |
Diletant | 156:e68ee0bcdcda | 13 | Измерение частоты расщепления производится в плавающем цикле, результат измерения - количество импульсов за период вибропривода, |
Diletant | 156:e68ee0bcdcda | 14 | для получения частоты нужно поделить импульсы на текущий период измерения. |
Diletant | 156:e68ee0bcdcda | 15 | Остальные измеряемые параметры от периода измерений не зависят. |
Diletant | 156:e68ee0bcdcda | 16 | |
Diletant | 167:bedc0a9d559a | 17 | Параметры: |
Diletant | 174:0f86eedd511c | 18 | Представление параметров алгоритма в виде единого последовательного блока параметров с фиксированным положением и размером |
Diletant | 174:0f86eedd511c | 19 | параметров нецелесообразно. Для удобства, независимости модулей и упрощения их модификации следует определять параметры в модулях подсистем. |
Diletant | 174:0f86eedd511c | 20 | При этом удобно представить параметры в виде дерева, каждая ветвь которого относится к соответствующей подсистеме. |
Diletant | 167:bedc0a9d559a | 21 | Следует разделять неизменяемые в процессе работы параметры настройки (settings) и изменяемые (текущие) параметры состояния (state). |
Diletant | 174:0f86eedd511c | 22 | Параметры настройки определяются при настройке и калибровке устройства и записываются во флэш-память. |
Diletant | 174:0f86eedd511c | 23 | Параметры состояния вычисляются в процессе работы на основе параметров настройки. Параметры настройки могут задавать начальное значение |
Diletant | 174:0f86eedd511c | 24 | параметров состояния, значения параметров состояния при определенных событиях (например при обнулении СРП) или функцию зависимости |
Diletant | 174:0f86eedd511c | 25 | параметров состояния (например от температуры). |
Diletant | 174:0f86eedd511c | 26 | Параметры настройки делятся на настройки по умолчанию (default), которые инициализируются в коде программы, |
Diletant | 174:0f86eedd511c | 27 | и настройки, загружаемые из флэш-памяти. |
Diletant | 174:0f86eedd511c | 28 | В частности, в протоколе есть команды установки состояния из настроек по умолчанию и из флэш-памяти, что означает необходимость |
Diletant | 174:0f86eedd511c | 29 | раздельного хранения параметров настройки и параметров состояния состояния. |
Diletant | 167:bedc0a9d559a | 30 | |
Diletant | 149:abbf7663d27d | 31 | Идентификация параметров: |
Diletant | 149:abbf7663d27d | 32 | Всем параметрам присваивается хэш/hash. В качестве хэш-функции можно использовать |
Diletant | 149:abbf7663d27d | 33 | hash(name, type) = crc32(name) ^ crc32(type), |
Diletant | 149:abbf7663d27d | 34 | где name - имя переменной в RAM или константы в ROM, type - тип. |
Diletant | 149:abbf7663d27d | 35 | Например: crc32("uint16_t") ^ crc32("device.settings.address") = 0x4d8e4523 |
Diletant | 149:abbf7663d27d | 36 | |
Diletant | 149:abbf7663d27d | 37 | Хранение констант и переменных в RAM: |
Diletant | 174:0f86eedd511c | 38 | Все параметры хранятся в переменной device в виде иерархической структуры. |
Diletant | 149:abbf7663d27d | 39 | При загрузке инициализируется таблица адресов переменных hashParamTable[HASH_PARAM_COUNT] в формате hash32 : address32 : size32, |
Diletant | 149:abbf7663d27d | 40 | где hash32 - хэш параметра, address32 - ссылка на параметр, size32 - размер в байтах. |
igor_v | 70:9cc252048c59 | 41 | |
Diletant | 174:0f86eedd511c | 42 | Хранение констант и переменных в ROM: |
Diletant | 174:0f86eedd511c | 43 | Сектор 22 - таблица адресов в формате hash32 : address32 |
Diletant | 174:0f86eedd511c | 44 | Сектор 23 - данные по адресам из таблицы адресов |
Diletant | 174:0f86eedd511c | 45 | Чтение из ROM: |
Diletant | 174:0f86eedd511c | 46 | FlashReadAll() |
Diletant | 174:0f86eedd511c | 47 | Запись в ROM: |
Diletant | 174:0f86eedd511c | 48 | FlashWriteAll() |
Diletant | 174:0f86eedd511c | 49 | |
Diletant | 174:0f86eedd511c | 50 | Использование портов: |
Diletant | 174:0f86eedd511c | 51 | UART0 - порт обслуживания / Service port |
Diletant | 174:0f86eedd511c | 52 | UART1 - порт команд/данных / User port |
Diletant | 174:0f86eedd511c | 53 | |
Diletant | 161:efd949e8d536 | 54 | Доступ к параметрам через User port |
Diletant | 149:abbf7663d27d | 55 | Формат команды: |
Diletant | 156:e68ee0bcdcda | 56 | cc address8 code16 hash32 crc16 |
Diletant | 149:abbf7663d27d | 57 | code16: |
Diletant | 149:abbf7663d27d | 58 | H_PARAM8_R : чтение 1-байтного параметра |
Diletant | 149:abbf7663d27d | 59 | H_PARAM16_R: чтение 2-байтного параметра |
Diletant | 149:abbf7663d27d | 60 | H_PARAM32_R: чтение 4-байтного параметра |
Diletant | 149:abbf7663d27d | 61 | H_PARAM8_W : запись 1-байтного параметра |
Diletant | 149:abbf7663d27d | 62 | H_PARAM16_W: запись 2-байтного параметра |
Diletant | 149:abbf7663d27d | 63 | H_PARAM32_W: запись 4-байтного параметра |
igor_v | 70:9cc252048c59 | 64 | |
Diletant | 174:0f86eedd511c | 65 | Последовательность старта системы: |
Diletant | 174:0f86eedd511c | 66 | 1. Инициализация настроек по умолчанию - InitDefaultSettings(). В идеале - инициализация абсолютно всех настроек |
Diletant | 174:0f86eedd511c | 67 | на случай отсутствия настроек во флэш-памяти или отказа флэш-памяти. |
Diletant | 174:0f86eedd511c | 68 | 2. Загрузка настроек подсистем из флэш-памяти с перезаписью настроек по умолчанию - FlashReadAll(). |
Diletant | 174:0f86eedd511c | 69 | 3. Инициализация начального состояния подсистем из сформированных на этапах 1 и 2 настроек - InitState(). |
Diletant | 174:0f86eedd511c | 70 | 4. Старт модулей после установки начального состояния всех подсистем - DeviceStart(). |
Diletant | 166:c3c0b8a90d81 | 71 | |
Diletant | 166:c3c0b8a90d81 | 72 | Работа управляющего алгоритма в вольтах: |
Diletant | 166:c3c0b8a90d81 | 73 | Вычисления в алгоритме можно проводить в виде напряжения на исполнительном элементе (ГВЧ, нагреватель, пъезоэлемент и т.д.). |
Diletant | 166:c3c0b8a90d81 | 74 | Для этого требуется в настройках задать параметры преобразования в виде линейной интерполяции: код на ЦАП - напряжение на элементе. |
Diletant | 166:c3c0b8a90d81 | 75 | Плюсы: |
Diletant | 166:c3c0b8a90d81 | 76 | - настройки для конкретного датчика сохраняются на разных основаниях, в том числе с разной электрической схемой |
Diletant | 166:c3c0b8a90d81 | 77 | - настройки для конкретного основания (параметры преобразования) сохраняются для разных датчиков |
Diletant | 166:c3c0b8a90d81 | 78 | - калибровка оснований может производиться отдельно от датчиков и отражаться в паспорте основания |
Diletant | 166:c3c0b8a90d81 | 79 | - учет нелинейностей (16 контрольных точек) |
Diletant | 167:bedc0a9d559a | 80 | - передача потребителю истинных напряжений (без необходимости учета знаков, падений напряжений на транзисторе и т.п.) |
Diletant | 166:c3c0b8a90d81 | 81 | Минусы: |
Diletant | 166:c3c0b8a90d81 | 82 | - требуется постоянный пересчет вольты - коды при работе алгоритма |
Diletant | 167:bedc0a9d559a | 83 | - требуется калибровка оснований |
Diletant | 167:bedc0a9d559a | 84 | |
Diletant | 167:bedc0a9d559a | 85 | Передаточные функции: |
Diletant | 174:0f86eedd511c | 86 | 1. При вычислениях с фиксированной точкой есть 2 существенные проблемы: |
Diletant | 167:bedc0a9d559a | 87 | - переполнение |
Diletant | 167:bedc0a9d559a | 88 | - округление |
Diletant | 174:0f86eedd511c | 89 | 2. С целью обеспечения независимости собственно алгоритма от диапазона входных данных, определяемого "железом" и |
Diletant | 174:0f86eedd511c | 90 | полного использования битности процессора требуется преобразование входных данных в нормализованный диапазон (-1 ... +1 |
Diletant | 174:0f86eedd511c | 91 | например). Такое преобразование может быть выполнено с помощью передаточной функции (например, в виде линейной |
Diletant | 174:0f86eedd511c | 92 | интерполяции: код АЦП - нормализованная величина). |
Diletant | 174:0f86eedd511c | 93 | 3. Для управления исполнительным элементом также требуется преобразование нормализованных данных с |
Diletant | 174:0f86eedd511c | 94 | помощью передаточной функции (например в виде линейной интерполяции: нормализованная величина - код ЦАП). |
Diletant | 167:bedc0a9d559a | 95 | |
Diletant | 167:bedc0a9d559a | 96 | Работа СРП: |
Diletant | 167:bedc0a9d559a | 97 | Режимы работы: |
Diletant | 167:bedc0a9d559a | 98 | - по опорному генератору |
Diletant | 167:bedc0a9d559a | 99 | - с запоминанием |
Diletant | 167:bedc0a9d559a | 100 | Детектор: |
Diletant | 167:bedc0a9d559a | 101 | Опорный сигнал: |
Diletant | 167:bedc0a9d559a | 102 | - выходное напряжение опорного генератора |
Diletant | 167:bedc0a9d559a | 103 | - выходное напряжение СРП |
Diletant | 167:bedc0a9d559a | 104 | Обратная связь: |
Diletant | 167:bedc0a9d559a | 105 | - выходное напряжение амплитудного детектора |
Diletant | 167:bedc0a9d559a | 106 | - выходное напряжение стабилизатора амплитуды |
Diletant | 167:bedc0a9d559a | 107 | Функции передачи: |
Diletant | 167:bedc0a9d559a | 108 | - опорный сигнал (В) - опорный сигнал (у.е. -1...+1) |
Diletant | 174:0f86eedd511c | 109 | - обратная связь (В) - обратная связь (у.е. -1...+1). Требуется отфильтровать постоянную составляющую, чтобы попасть в диапазон -1...+1? |
Diletant | 167:bedc0a9d559a | 110 | - рассогласование (у.е. -1...+1) - рассогласование (-0.5 ... +0.5) |
Diletant | 167:bedc0a9d559a | 111 | - ошибка регулятора (-1...+1) - коррекция выходного напряжения СРП (В) |
Diletant | 167:bedc0a9d559a | 112 | - выходное напряжение СРП (В) - код ЦАП (у.е.) |