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