Diod_Test/README.md

116 lines
11 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Diod_Test
## Управление тестером
Тест может запускаться по кнопке или по коилу №2 `StartTest`.
Режим тестирования (прямое/обратное включение) выставляется в двух коилах:
- 0: `ForwardTest` - тест диода в прямом включении (напряжение при прямом вкючении)
- 1: `ReverseTest` - тест диода в обратном включении (скачок напряжения при обратном вкючении)
Если включены оба, то будет тест скачка напряжения при переходе от прямого подлключения к обратному.
Можно переключать отдельные ключи по коилам №3-6:
- 3: `PhaseForwardHiTest` - включение и отключение ключа верхнего плеча фазы А (прямое включение)
- 4: `PhaseForwardLoTest` - включение и отключение ключа нижнего плеча фазы А (прямое включение)
- 5: `PhaseReverseHiTest` - включение и отключение ключа верхнего плеча фазы Б (обратное включение)
- 6: `PhaseReverseLoTest` - включение и отключение ключа нижнего плеча фазы Б (обратное включение)
Результаты измерений при разных включениях записываются в input регистры №0-1:
- 0: `ForwardVoltage` - измеренное напряжение при прямом включении
- 1: `ReversePeakVoltage` - максимальный скачок напряжения при обратном включении
## Настройка таймингов
Тайминги выставляются в holding регистрах №0-4:
- 0: `TimeForForward` - время на которое диод включается в прямом направлении (только мс)
- 1: `TimeBeforeTest` - время которое выжидается перед началом тестирования (мс или мкс)
- 2: `TimeDeadtime` - время между переключениями фаз (мс или мкс)
- 3: `TimeBeforePeak` - время между включением АЦП и подключением обратного напряжения (мс или мкс)
- 4: `TimeBeforeDisconnect` - время на которое подключается обратное напряжение (мс или мкс)
В коилах №16-19, можно выставить флаги - включить миллисекундную задержку вместо микросекундной для соответствующего тайминга:
- 16: `msTimeBeforeTest_enable`
- 17: `msTimeDeadtime_enable`
- 18: `msTimeBeforePeak_enable`
- 19: `msTimeBeforeDisconnect_enable`
## Настройка АЦП
Настройки АЦП выставляются в holding регистрах №5-9:
- 5: `Adc_PulseWidth` - ожидаемая длительность импульса в отчетах ацп.
На основе этого параметра берется выборка по которой расчитывается среднее значение пик (пик +-Adc_PulseWidth/2)
- 6: `Adc_PulseSign` - полярность скачка напряжения при обратном включении
- 7: `Adc_CalibrValue` - калибровочное значение ацп
- 8: `Adc_ZeroValue` - нулевое значение ацп
- 9: `Adc_U_Calibr` - калибровочное напряжение ацп
Из этого рассчитывается шаг АЦП: `Adc_U_Calibr/(Adc_CalibrValue - Adc_ZeroValue)`
# Тестирование
## Тест в прямом подключении (`TESTER_TestDiode_Forward`)
- ожидается задержка, перед началом работы `ticks_before_test`
- включается АЦП в континуес режиме
- диод подключается в прямом направлении на заданное время `msticks_for_forward`.
- считывается АЦП и накапливаются заданное количество для расчета среднего. и так по кругу пока диод подключен
- после таймаута отключается напряжение и останавливается АЦП
По итогу сохраняется напряжение прямого включения диода `htest->DiodeForwardVolt`.
## Тест в обратном подключении (`TESTER_TestDiode_Reverse`)
- ожидается задержка, перед началом работы `ticks_before_test`
- включается АЦП в дма режиме
- ожидается задержка, перед предполагаемым скачком `ticks_before_peak`
- диод подключается в обратном направлении на заданное время `ticks_before_disconnect`, и отключается
- после дожидается окончание заполнения буфера ДМА и обрабатывается: находится минимальный/максимальный пик и среднее напряжение в том районе
По итогу сохраняется скачок напряжение при обратном включении диода `htest->DiodeReversePeakVolt`.
## Тест перехода из прямого подключении в обратное (`TESTER_TestDiode_SwitchConnection`)
- ожидается задержка, перед началом работы `ticks_before_test`
- диод подключается в прямом направлении на заданное время `msticks_for_forward`
- после истечения задержки сохраняется прямое напражение на диоде
- диод отключается от питания и выжидается мертвое время `ticks_deadtime`
- включается АЦП в дма режиме
- ожидается задержка, перед предполагаемым скачком `ticks_before_peak`
- диод подключается в обратном направлении на заданное время `ticks_before_disconnect`
- дожидается окончание заполнения буфера ДМА и обрабатывается: находится минимальный/максимальный пик и среднее напряжение в том районе
По итогу сохраняется напряжение прямого включения диода `htest->DiodeForwardVolt` и скачок при обратном `htest->DiodeReversePeakVolt`.
# Внутренняя настройка
В начале программы в регистрах модбас выставляются дефолтные настройки из tester_config.h (`TESTER_Set_Default_Settings`)
После эти настройки подтягиваются в структуры тестера, через отдельную функцию (`TESTER_UpdateSettings`). Она вызывается перед каждым тестом.
## tester_config.h
Содержит дефолтные настройки для таймингов (`TESTER_SW_TIMINGS_CONFIG`):
- количество тиков и дефайн для включения миллисекундной разных задержек.
для светодиода и кнопки (`TESTER_INTERFACE_CONFIG`):
- состояния пина для включения и выключения светодиода
- порт и пин светодиода
- частоты моргания для разных режимов работы
- состояния пина при нажатой и отжатой кнопки
- порт и пин кнопки
- задержка для выжидания дребезга
для управления ключами (`TESTER_PHASE_SW_CONFIG`):
- `USE_HAL_GPIO_FUNCTIONS` - использовать HAL_GPIO-функции. Без неё переключается быстрее
- `RECONNECT_WITHOUT_DEADTIME` - отключить дедтайм при переключении. Если отключить еще и USE_HAL_GPIO_FUNCTIONS, то переключатся фазы будут почти синхронно (быстрее десятков мкс). Хз надо ли такое, но возможность есть
- порт и пины для двух ключей обратного подключения диода (порт общий для двух ключей)
- порт и пины для двух ключей обратного подключения диода (порт общий для двух ключей)
для АЦП (`TESTER_ADC_CONFIG`):
- размер dma буффера (`ADC_BUFF_SIZE, ADC_DMA_BUFF_SIZE`)
- калибровочное напряжение АЦП (`ADC_U_CALIBR`)
- значение АЦП при калибровочном напряжении (`ADC_VALUE_CALIBR`)
- значение АЦП при нулевом напряжении (`ADC_VALUE_ZERO`)
- таймаут на чтение АЦП (`ADC_READ_TIMEOUT_MS`)
- ожидаемая длина импульса в отсчетах АЦП (`TESTER_ADC_PULES_EXPETCED_WIDTH`)
Из этого рассчитывается шаг АЦП: `Adc_U_Calibr/(Adc_CalibrValue - Adc_ZeroValue)`
## Структуры для настроек
Настройки для таймингов записываются в структуру `SwTimings`, которая находится в `htest`/`hTestDiode (глобально)`, а она уже в главной структуре проекта `TESTER`.
Настройки светодиода и кнопки записываются в структуры `leds.LED1` и `SwStart`. Они находятся в структуре проекта `TESTER`
Настройки для портов и пинов ключей записываются в структуры `SwPhaseForward` и `SwPhaseReverse`, которые находится в `htest`/`hTestDiode (глобально)`, а она уже в главной структуре проекта `TESTER`.
Настройки для АЦП записыватся в структуру `TESTER.htest->adc->chAdc.s` (`ADC_ParamsTypeDef`).