Теперь это считается в TESTER_Reconnect_TwoPhases:
Если дедтайм меньше 100мкс, сначала начинает считывание АЦП, а потом переключаем ключи. Потому что функция запуска АЦП занимает 30мкс и в таком случае она будет сильно увеличивать заданный дедтайм.
Иначе сначала диод отключается от всего, выжидается дедтайм, потом запускается АЦП и включается в обратном направлении. В таком порядке потому что запуск АЦП должен быть рядом с включем диода в обратном направлении, чтобы словить пик в буффере АЦП
- В modbus коилах задается режим и выставляется флаг запустить тест. Запустить тест также можно по кнопке
- Добавлена функция для выставления дефолтных настроек TESTER_Set_Default_Settings: она выставляет все настройки в modbus по дефолту и еще некоторые не modbus настройки (порты и пины ключей, кнопок, светодиодов)
- Добавлена функция для обновления настроек тестера TESTER_UpdateSettings: она подтягивает все настроки из modbus в соответствующие структуры тестера. Вызывается каждый раз перед тестированием
При нажатии на кнопку включается тест с переходом от положительного напряжения к отрицатльному.
Индикация светодиода:
- постоянно горит - ожидание команды
- моргание (250 мс) - прямое подключение диода
- моргание (25 мс) - обратое подключение диода
По переключениям:
-Теперь для двух ключей одного питания должен быть один порт
- Добавлена функция реконнекта питания TESTER_Reconnect_Power(), чтобы быстрее переключать с положительного на отрицательный. А не через отдельные функции TESTER_Disconnect_Power(), TESTER_Connect_Power()
- Сделан дефайн USE_HAL_GPIO_FUNCTIONS для испольщования HAL GPIO функций. Его можно убрать и пины будуте переключаться напрямую через BSRR.
- Также сделан дефайн ALL_SW_USE_SAME_PORT, чтобы переключать все 4 пина в BSRR в одну комманду
Это поможет в случае функции реконнекта, где HAL функции сначала отключают питание, а потом подключат другое. Из-за этого появляются задержки в 580 мкс (SW Timings with HAL GPIO write.sal),
Если убрать USE_HAL_GPIO_FUNCTIONS, то сократиться время переключения между питаниями до 160мкс (SW Timings without HAL GPIO write and different ports.sal)
А если еще выставить ALL_SW_USE_SAME_PORT, то через BSRR будет выставлятся все 4 пина, и задержек нет (SW Timings without HAL GPIO write.sal). Ну почти, иногда проскакивают 2 мкс (SW Timings without HAL GPIO write 2.sal)
Основные функции по файлам:
- tester_adc_func
Cодержит функции для управления АЦП и DMA.
Для DMA есть хендлер (ADC_DMA_Handler), который перекидывает готовую половину DMA буфера в структуру АЦП
Функция ADC_DMA_ReadForPeak стащена с МЗКТЭ и пока просто простаивает и ждет пока буффер заполниться, но можно потом добавить какую-то обрбаотку буфера, пока он еще заполяется. После окончания работы АЦП эта функция находит максимальное зачение и рассчитывает среднее значение в этом "пике"
Добавлена функция ADC_ReadContinuous, которая считывает АЦП в континуес режиме, значение запихивает в буффер. Прерывается при таймауте.:
- tester_func
Cодержит функции для тестирования диодов:
в обратном подключении (TESTER_TestDiode_NegativePower),
в прямом подключении (TESTER_TestDiode_PositivePower),
при переходе от прямого к обратному (TESTER_TestDiode_PosNegPower).
Для работы АЦП, вызывает функции из tester_adc_func. Пока всё максимально примитивно, надо будет доработать
- tester_main
Содержит функции инициализации, подготовка к циклу и главный цикл тестер. По флагам вызываются соответствующие функции тестирования диодов из tester_func. Все функции этого файла вызываются в main.c.
-tester_config.h
Пока содержит настройки для тестера: пины для ключей, состяония подключенного и отключенного питания, которые подключают питание, настройки для АЦП
В библиотеке adc пока только сделана заготовка для считывания выброса, надо доделать:
Пока в main крутиться тест: формирование импульса ножкой светодиодом и считыание АЦП. Считывается этот импульс и определяется его пик (максимальное значение) и в районе этого пика беруться значения для расчета его амплитуды
Modbus добавлен но не проверен