Для таймингов есть структура SwTimings. Она содержит:
msticks_for_positive_dc - миллисекундная задержка для положительного напряжения (только миллисекунды, т.к. меньше я пока не реализовал, да и как понимаю не требуется)
ticks_before_test - задержка перед началом тестирования (миллисекундная или тики for())
ticks_before_go_to_peak - задержка между включением АЦП и предполагаемым скачком напряжения, чтобы точно поймать его в буфере АЦП (миллисекундная или тики for())
ticks_before_disconnect - задержка перед выключением питания (миллисекундная или тики for())
Для ключей есть структуры SwPhaseForward и SwPhaseReverse. Они содержит:
SW_Port- порт для двух ключей фазы
SwHI_Pin - пин для верхнего плеча фазы
SwLO_Pin - пин для нижнего плеча фазы
Тестирование
Тест в прямом подключении (TESTER_TestDiode_Forward)
ожидается задержка, перед началом работы ticks_before_test
включается АЦП в континуес режиме
диод подключается в прямом направлении на заданное время msticks_for_forward.
считывается АЦП и накапливаются заданное количество для расчета среднего. и так по кругу пока диод подключен
после таймаута отключается напряжение и останавливается АЦП
По итогу сохраняется напряжение прямого включения диода
Тест в обратном подключении (TESTER_TestDiode_Reverse)
ожидается задержка, перед началом работы ticks_before_test
включается АЦП в дма режиме
ожидается задержка, перед предполагаемым скачком ticks_before_peak
диод подключается в обратном направлении на заданное время ticks_before_disconnect, и отключается
после дожидается окончание заполнения буфера ДМА и обрабатывается: находится минимальный/максимальный пик и среднее напряжение в том районе
По итогу сохраняется скачок напряжение при обратном включении диода
Тест перехода из прямого подключении в обратное (TESTER_TestDiode_SwitchConnection)
ожидается задержка, перед началом работы ticks_before_test
диод подключается в прямом направлении на заданное время msticks_for_forward
после истечения задержки сохраняется прямое напражение на диоде
диод отключается от питания и выжидается мертвое время ticks_deadtime
включается АЦП в дма режиме
ожидается задержка, перед предполагаемым скачком ticks_before_peak
диод подключается в обратном направлении на заданное время ticks_before_disconnect
дожидается окончание заполнения буфера ДМА и обрабатывается: находится минимальный/максимальный пик и среднее напряжение в том районе
upd: обновлены алги и настройки таймингов и ключей ae2887acfe
По реализации функций тестирования:
## Настройки алгоритма тестирования
Для таймингов есть структура SwTimings. Она содержит:
- msticks_for_positive_dc - миллисекундная задержка для положительного напряжения (только миллисекунды, т.к. меньше я пока не реализовал, да и как понимаю не требуется)
- ticks_before_test - задержка перед началом тестирования (миллисекундная или тики for())
- ticks_before_go_to_peak - задержка между включением АЦП и предполагаемым скачком напряжения, чтобы точно поймать его в буфере АЦП (миллисекундная или тики for())
- ticks_before_disconnect - задержка перед выключением питания (миллисекундная или тики for())
Для ключей есть структуры SwPhaseForward и SwPhaseReverse. Они содержит:
- SW_Port- порт для двух ключей фазы
- SwHI_Pin - пин для верхнего плеча фазы
- SwLO_Pin - пин для нижнего плеча фазы
## Тестирование
Тест в прямом подключении (TESTER_TestDiode_Forward)
- ожидается задержка, перед началом работы ticks_before_test
- включается АЦП в континуес режиме
- диод подключается в прямом направлении на заданное время msticks_for_forward.
- считывается АЦП и накапливаются заданное количество для расчета среднего. и так по кругу пока диод подключен
- после таймаута отключается напряжение и останавливается АЦП
По итогу сохраняется напряжение прямого включения диода
Тест в обратном подключении (TESTER_TestDiode_Reverse)
- ожидается задержка, перед началом работы ticks_before_test
- включается АЦП в дма режиме
- ожидается задержка, перед предполагаемым скачком ticks_before_peak
- диод подключается в обратном направлении на заданное время ticks_before_disconnect, и отключается
- после дожидается окончание заполнения буфера ДМА и обрабатывается: находится минимальный/максимальный пик и среднее напряжение в том районе
По итогу сохраняется скачок напряжение при обратном включении диода
Тест перехода из прямого подключении в обратное (TESTER_TestDiode_SwitchConnection)
- ожидается задержка, перед началом работы ticks_before_test
- диод подключается в прямом направлении на заданное время msticks_for_forward
- после истечения задержки сохраняется прямое напражение на диоде
- диод отключается от питания и выжидается мертвое время ticks_deadtime
- включается АЦП в дма режиме
- ожидается задержка, перед предполагаемым скачком ticks_before_peak
- диод подключается в обратном направлении на заданное время ticks_before_disconnect
- дожидается окончание заполнения буфера ДМА и обрабатывается: находится минимальный/максимальный пик и среднее напряжение в том районе
#
upd: обновлены алги и настройки таймингов и ключей ae2887acfeaa496ed624a6196e52d6a9ccbc9bd5
В начале программы в регистрах модбас выставляются дефолтные настройки из tester_config.h (TESTER_Set_Default_Settings)
После эти настройки подтягиваются в структуры тестера, через отдельную функцию (TESTER_UpdateSettings). Она вызывается перед каждым тестом.
Управление тестером
Тест может запускаться по кнопке или по коилу №2 StartTest.
Режим тестирования (прямое/обратное включение) выставляется в двух коилах:
№0 PositiveTest
№1 NegativeTest
Если включены оба, то будет тест перехода от прямого подлключения к обратному.
Настройки АЦП выставляются в регистрах модбас №5-9:
Adc_PulseWidth - ожидаемая длительность импульса в отчетах ацп
Adc_PulseSign - полярность импульса
Adc_CalibrValue - калибровочное значение ацп
Adc_ZeroValue - нулевое значение ацп
Adc_U_Calibr - калибровочное напряжение ацп
Из этого рассчитывается шаг АЦП: Adc_U_Calibr/(Adc_CalibrValue - Adc_ZeroValue)
Интерфейсы
Все связанное с интерфейсами (пока одна кнопка и светодиод) лежат в отдельной функции TESTER_InterfaceHandle. Она пока вызывается в обработчике прерываний SysTick_Handler, мб имеет смысл перенести её в кастомный таймер, чтобы вызывать пореже чем каждую миллисекунду, хз.
Для кнопок и светодиодов сделаны структуры, которые содержат порт, пин, таймаут/задержка/период, переменная для сохранения тиков.
Кнопка
Сделана функция TESTER_ReadSwichStart(), которая считывает кнопку, выжидает дребезг и перепроверяет кнопку: если нажата - возвращает 1, если нет - 0. Выжидание дребезга реализовано через запоминания времени нажатия в переменную и сравнение с текущим временем, т.к. не используется функция HAL_Delay это работает и в прерывании.
Светодиоды
Сделаны функции для включения, выключения и моргания светодиодом. Моргание также реализовано через запоминание времени предыдущего переключения и сравнения его с текущим временем. Также работает в прерывании.
Пока реализованы следующие режимы индикации:
постоянно горит - ожидание команды
моргание (250 мс) - прямое подключение диода
моргание (25 мс) - обратое подключение диода
Реализовано просто через разный период моргания, и постоянный - на самом деле период 5 мс
# Модбас
В начале программы в регистрах модбас выставляются дефолтные настройки из tester_config.h (TESTER_Set_Default_Settings)
После эти настройки подтягиваются в структуры тестера, через отдельную функцию (TESTER_UpdateSettings). Она вызывается перед каждым тестом.
## Управление тестером
Тест может запускаться по кнопке или по коилу №2 StartTest.
Режим тестирования (прямое/обратное включение) выставляется в двух коилах:
- №0 PositiveTest
- №1 NegativeTest
Если включены оба, то будет тест перехода от прямого подлключения к обратному.
## Настройка таймингов
Тайминги выставляются в регистрах модбас №0-4. В коилах модбас №16-19, можно указать какие именно тайминги использовать - миллисекундные или микросекундные. Структура таймингов такая же как и в https://git.arktika.cyou/Andrey/Diod_Test/issues/3#issuecomment-144
## Настройка АЦП
Настройки АЦП выставляются в регистрах модбас №5-9:
- Adc_PulseWidth - ожидаемая длительность импульса в отчетах ацп
- Adc_PulseSign - полярность импульса
- Adc_CalibrValue - калибровочное значение ацп
- Adc_ZeroValue - нулевое значение ацп
- Adc_U_Calibr - калибровочное напряжение ацп
Из этого рассчитывается шаг АЦП: Adc_U_Calibr/(Adc_CalibrValue - Adc_ZeroValue)
# Интерфейсы
Все связанное с интерфейсами (пока одна кнопка и светодиод) лежат в отдельной функции TESTER_InterfaceHandle. Она пока вызывается в обработчике прерываний SysTick_Handler, мб имеет смысл перенести её в кастомный таймер, чтобы вызывать пореже чем каждую миллисекунду, хз.
Для кнопок и светодиодов сделаны структуры, которые содержат порт, пин, таймаут/задержка/период, переменная для сохранения тиков.
## Кнопка
Сделана функция TESTER_ReadSwichStart(), которая считывает кнопку, выжидает дребезг и перепроверяет кнопку: если нажата - возвращает 1, если нет - 0. Выжидание дребезга реализовано через запоминания времени нажатия в переменную и сравнение с текущим временем, т.к. не используется функция HAL_Delay это работает и в прерывании.
## Светодиоды
Сделаны функции для включения, выключения и моргания светодиодом. Моргание также реализовано через запоминание времени предыдущего переключения и сравнения его с текущим временем. Также работает в прерывании.
Пока реализованы следующие режимы индикации:
- постоянно горит - ожидание команды
- моргание (250 мс) - прямое подключение диода
- моргание (25 мс) - обратое подключение диода
Реализовано просто через разный период моргания, и постоянный - на самом деле период 5 мс
#
udp: регистры настроек модбас ae2887acfeaa496ed624a6196e52d6a9ccbc9bd5
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
По реализации функций тестирования:
Настройки алгоритма тестирования
Для таймингов есть структура SwTimings. Она содержит:
Для ключей есть структуры SwPhaseForward и SwPhaseReverse. Они содержит:
Тестирование
Тест в прямом подключении (TESTER_TestDiode_Forward)
По итогу сохраняется напряжение прямого включения диода
Тест в обратном подключении (TESTER_TestDiode_Reverse)
По итогу сохраняется скачок напряжение при обратном включении диода
Тест перехода из прямого подключении в обратное (TESTER_TestDiode_SwitchConnection)
upd: обновлены алги и настройки таймингов и ключей
ae2887acfeМодбас
В начале программы в регистрах модбас выставляются дефолтные настройки из tester_config.h (TESTER_Set_Default_Settings)
После эти настройки подтягиваются в структуры тестера, через отдельную функцию (TESTER_UpdateSettings). Она вызывается перед каждым тестом.
Управление тестером
Тест может запускаться по кнопке или по коилу №2 StartTest.
Режим тестирования (прямое/обратное включение) выставляется в двух коилах:
Если включены оба, то будет тест перехода от прямого подлключения к обратному.
Настройка таймингов
Тайминги выставляются в регистрах модбас №0-4. В коилах модбас №16-19, можно указать какие именно тайминги использовать - миллисекундные или микросекундные. Структура таймингов такая же как и в https://git.arktika.cyou/Andrey/Diod_Test/issues/3#issuecomment-144
Настройка АЦП
Настройки АЦП выставляются в регистрах модбас №5-9:
Из этого рассчитывается шаг АЦП: Adc_U_Calibr/(Adc_CalibrValue - Adc_ZeroValue)
Интерфейсы
Все связанное с интерфейсами (пока одна кнопка и светодиод) лежат в отдельной функции TESTER_InterfaceHandle. Она пока вызывается в обработчике прерываний SysTick_Handler, мб имеет смысл перенести её в кастомный таймер, чтобы вызывать пореже чем каждую миллисекунду, хз.
Для кнопок и светодиодов сделаны структуры, которые содержат порт, пин, таймаут/задержка/период, переменная для сохранения тиков.
Кнопка
Сделана функция TESTER_ReadSwichStart(), которая считывает кнопку, выжидает дребезг и перепроверяет кнопку: если нажата - возвращает 1, если нет - 0. Выжидание дребезга реализовано через запоминания времени нажатия в переменную и сравнение с текущим временем, т.к. не используется функция HAL_Delay это работает и в прерывании.
Светодиоды
Сделаны функции для включения, выключения и моргания светодиодом. Моргание также реализовано через запоминание времени предыдущего переключения и сравнения его с текущим временем. Также работает в прерывании.
Пока реализованы следующие режимы индикации:
Реализовано просто через разный период моргания, и постоянный - на самом деле период 5 мс
udp: регистры настроек модбас
ae2887acfeДобавлен дедтайм и настройки модбас для него:
Сделана микросекундная задержка (вместо тиков for())
b0c9cb058cae2887acfe