реализация алгоритмов на мк stm32f103 #3

Open
opened 2024-12-16 18:38:28 +03:00 by Andrey · 3 comments
Owner
No description provided.
Coal56AB was assigned by Andrey 2024-12-16 18:38:33 +03:00
Collaborator

По реализации функций тестирования:

Настройки алгоритма тестирования

Для таймингов есть структура 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
Collaborator

Модбас

В начале программы в регистрах модбас выставляются дефолтные настройки из tester_config.h (TESTER_Set_Default_Settings)
После эти настройки подтягиваются в структуры тестера, через отдельную функцию (TESTER_UpdateSettings). Она вызывается перед каждым тестом.

Управление тестером

Тест может запускаться по кнопке или по коилу №2 StartTest.
Режим тестирования (прямое/обратное включение) выставляется в двух коилах:

  • №0 PositiveTest
  • №1 NegativeTest
    Если включены оба, то будет тест перехода от прямого подлключения к обратному.

Настройка таймингов

Тайминги выставляются в регистрах модбас №0-4. В коилах модбас №16-19, можно указать какие именно тайминги использовать - миллисекундные или микросекундные. Структура таймингов такая же как и в #3 (comment)

Настройка АЦП

Настройки АЦП выставляются в регистрах модбас №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: регистры настроек модбас ae2887acfe

# Модбас В начале программы в регистрах модбас выставляются дефолтные настройки из 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
Collaborator

Добавлен дедтайм и настройки модбас для него:

  • регистр с кол-вом тиков - №3
  • коил для мс задержки - №17

Сделана микросекундная задержка (вместо тиков for())

b0c9cb058c
ae2887acfe

Добавлен дедтайм и настройки модбас для него: - регистр с кол-вом тиков - №3 - коил для мс задержки - №17 Сделана микросекундная задержка (вместо тиков for()) b0c9cb058c8f52f3d35cbce9667c3e790fddfb5a ae2887acfeaa496ed624a6196e52d6a9ccbc9bd5
Sign in to join this conversation.
No Label
No Milestone
No project
No Assignees
2 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: Andrey/Diod_Test#3
No description provided.