123

Dependencies:   mbed

Fork of LG by igor Apu

develop.txt

Committer:
Diletant
Date:
2016-06-05
Revision:
167:bedc0a9d559a
Parent:
166:c3c0b8a90d81
Child:
174:0f86eedd511c

File content as of revision 167:bedc0a9d559a:

05.06.2016 Dile Tant
Основные циклы:
    Измерительный плавающий цикл/Measurment floating cycle
        Цикл задается измерительным таймером с переменной частотой следования прерываний - таймер 0 контроллера
    Регулярный цикл/Regular cycle
        Цикл задается управляющим таймером с постоянной частотой следования прерываний - таймер 1 контроллера
    Основной последовательный плавающий цикл/Main sequential floating cycle
        Цикл выполняется с переменной частотой, определяемой загрузкой процессора.

Замечание:
    Измерение частоты расщепления производится в плавающем цикле, результат измерения - количество импульсов за период вибропривода,
    для получения частоты нужно поделить импульсы на текущий период измерения.
    Остальные измеряемые параметры от периода измерений не зависят.     

Использование портов:
    UART0 - порт обслуживания  / Service port
    UART1 - порт команд/данных / User port
    
Параметры:
    Представление параметров алгоритма в виде единого непрерывного блока параметров нецелесообразно.
    Для удобного именования параметров, независимости модулей и упрощения их модификации следует хранить параметры
    в модулях подсистем.
    Следует разделять неизменяемые в процессе работы параметры настройки (settings) и изменяемые (текущие) параметры состояния (state).
    Настройки делятся на настройки по умолчанию (default), которые инициализируются в коде программы, и настройки, загружаемые из флэш-памяти.
    В частности, в протоколе есть команды установки состояния из настроек по умолчанию и из флэш-памяти, что означает необходимость раздельного
    хранения настроек и состояния.
    
Загрузка параметров:
    1. Инициализация настроек по умолчанию InitDefaultSettings(). В идеале - инициализация абсолютно всех настроек
    на случай отсутствия настроек во флэш-памяти или отказа флэш-памяти.
    2. Загрузка настроек из флэш-памяти с перезаписью настроек по умолчанию FlashReadAll().
    3. Инициализация состояния из сформированных на этапах 1 и 2 настроек InitState().

Идентификация параметров:
    Всем параметрам присваивается хэш/hash. В качестве хэш-функции можно использовать
        hash(name, type) = crc32(name) ^ crc32(type),
    где name - имя переменной в RAM или константы в ROM, type - тип.
    Например: crc32("uint16_t") ^ crc32("device.settings.address") = 0x4d8e4523
    
Хранение констант и переменных в RAM:
    Все параметры хранятся в переменной device.
    При загрузке инициализируется таблица адресов переменных hashParamTable[HASH_PARAM_COUNT] в формате hash32 : address32 : size32,
    где hash32 - хэш параметра, address32 - ссылка на параметр, size32 - размер в байтах.

Доступ к параметрам через User port
    Формат команды:
        cc address8 code16 hash32 crc16
    code16:
        H_PARAM8_R : чтение 1-байтного параметра
        H_PARAM16_R: чтение 2-байтного параметра
        H_PARAM32_R: чтение 4-байтного параметра
        H_PARAM8_W : запись 1-байтного параметра
        H_PARAM16_W: запись 2-байтного параметра
        H_PARAM32_W: запись 4-байтного параметра

Хранение констант и переменных в ROM:
    Сектор 22 - таблица адресов в формате hash32 : address32
    Сектор 23 - данные по адресам из таблицы адресов
    Чтение из ROM:
        FlashReadAll()
    Запись в ROM:
        FlashWriteAll()

Работа управляющего алгоритма в вольтах:
    Вычисления в алгоритме можно проводить в виде напряжения на исполнительном элементе (ГВЧ, нагреватель, пъезоэлемент и т.д.).
    Для этого требуется в настройках задать параметры преобразования в виде линейной интерполяции: код на ЦАП - напряжение на элементе.
    Плюсы:
        - настройки для конкретного датчика сохраняются на разных основаниях, в том числе с разной электрической схемой
        - настройки для конкретного основания (параметры преобразования) сохраняются для разных датчиков
        - калибровка оснований может производиться отдельно от датчиков и отражаться в паспорте основания
        - учет нелинейностей (16 контрольных точек)
        - передача потребителю истинных напряжений (без необходимости учета знаков, падений напряжений на транзисторе и т.п.)
    Минусы:
        - требуется постоянный пересчет вольты - коды при работе алгоритма
        - требуется калибровка оснований

Передаточные функции:
    При вычислениях с фиксированной точкой есть 2 существенные проблемы:
        - переполнение
        - округление
    Во избежание проблем при вычислениях требуется преобразование входных данных в нормализованный диапазон (-1 ... +1 например).
    Такое преобразование может быть выполнено с помощью передаточной функции (например, в виде линейной
    интерполяции: исходная величина - нормализованная величина).
  
Работа СРП:
    Режимы работы:
        - по опорному генератору
        - с запоминанием
    Детектор:
        Опорный сигнал:
            - выходное напряжение опорного генератора
            - выходное напряжение СРП
        Обратная связь:
            - выходное напряжение амплитудного детектора
            - выходное напряжение стабилизатора амплитуды
    Функции передачи:
        - опорный сигнал (В) - опорный сигнал (у.е. -1...+1)
        - обратная связь (В) - обратная связь (у.е. -1...+1)
        - рассогласование (у.е. -1...+1) - рассогласование (-0.5 ... +0.5)
        - ошибка регулятора (-1...+1) - коррекция выходного напряжения СРП (В)
        - выходное напряжение СРП (В) - код ЦАП (у.е.)