H-мост: Load Detect (или как выявлять вандализм)
В этом тексте я написал как диагностировать и тестировать такую электрическую схему как H-мост. Запрограммировать H-мост это просто. Куда сложнее в Run-Time (е) определять Fault (ы) в этом пресловутом H-мосте, чтобы вовремя отключить ключи и перевести всю цепь в безопасное состояние тем самым спасти дорогое оборудование от сгорания.
Немного теории
В электронике существует классическая электрическая цепочка, которая называется H-мост.
рис 1
Эта схема позволяет пропускать ток через нагрузку в 2х направлениях: вдоль или поперек нагрузки. Если в эту цепь подключить DC-мотор, то он будет крутиться либо по часовой стрелке (СW) либо против часовой стрелки (CCW). Также можно модулировать величину тока, если переключать ключи по PWM сигналу
H-мосты активно применяют в устройствах, которые крутят шаговые двигатели в CNC станках в контроллерах управления стекло-подьемниками (прошивки спинеры), для управления фарами автомобиля и прочее.
Есть проблема. Вернее есть 31 проблема. То есть в H-мостах может быть 31 тип сбоев, которые приведут к тому, что H-мост просто больше не будет работать. А 14 кейсов приведут к тому, что из H-моста просто посыплются искры. Вот список этих сбоев.
рис 2
Как же определить аварии в H-мосте во время исполнения? Надо разработать механизм который можно назвать Load Detect.
Понятное дело что за H-мостом надо как-то наблюдать. В электронике есть только 2 способа наблюдать за чем либо: GPIO работающие на вход и ADC. Вот возможная схемотехника, которая позволит диагностировать состояние H-моста. Тут на каждое плечо H-моста подключен аналого-цифровой преобразователь (ADC) и тут же ключ, который управляет подтяжкой напряжения к питанию.
pbc 3. Схема наблюдения за H-мостом
У каждого микроконтроллера, есть аналоговые пины, которые подключены к внутреннему ADC преобразователю. Подтяжками же напряжения к питанию можно управлять по GPIO или при помощи ключа и высоко-омного резистора или при помощи специальных микросхем- источников смачивающего тока.
рис 4
Очевидно, что нужен кокой-то алгоритм или высокоуровневый программный конечный автомат, который будет сообщать, когда в H-мосте возникли ошибки. В идеале хотелось бы чтобы этим занимался отдельный ASIC. Но можно и накропать чисто программное решение.
Разработка конечного автомата это просто механические действия. Как известно, любые конечные автоматы проектируются за 7 фаз:
Фаза | Этап разработки конечного автомата |
1-- | определить выходы |
2-- | определить состояния |
3-- | определить действия |
4-- | определить входы |
5-- | составить таблицу переходов |
6-- | нарисовать граф переходов |
7-- | воплотить конечный автомат в коде |
1-- Вот выходы конечного автомата диагностика H-моста. Это как раз те высокоуровневые события которые хочет услышать пользователь (схемотехник, программист, техник, интегратор, водитель)
№ | FSM Output |
1 | left shoulder short GND |
2 | left shoulder short Vbat |
3 | right shoulder short GND |
4 | right shoulder short Vbat |
5 | open load |
2-- Состояния конечного автомата может определяться состоянием подтяжек к питанию. Важно устанавливать подтяжки именно в коде Грея. Это уменьшит время переходного процесса установки подтяжек и уменьшит энергопотребление устройства, да и отлаживаться на осциллографе так проще.
№ | Left shoulder | Right shoulder |
1 | Pull none | Pull none |
2 | Pull none | Pull up |
3 | Pull up | Pull up |
4 | Pull up | Pull none |
3-- Что будет делать этот конечный автомат на низком (аппаратном) уровне? Или какие он будет делать системные действия?
№ | Действие | плечо H-моста |
1 | Установить подтяжку к питанию на левом плече | левое |
2 | Установить подтяжку к питанию на правом плече | правое |
3 | Отключить подтяжку к питанию на левом плече | левое |
4 | Отключить подтяжку к питанию на правом плече | правое |
5 | Изменить показание напряжения на левом плече | левое |
6 | Изменить показание напряжения на правом плече | правое |
7 | Рассчитать аналитику | -- |
4--Входом конечного автомата будет являться прерывание по таймеру. Конечный автомат будет переключаться в очередное состояние и просто ждать, пока пройдет переходной процесс в установке подтяжке напряжения. Это порядка 100ms. Для определенности можно считать что это время равно 500ms. Это основной параметр данного конечного автомата. Этот параметр зависит от величины смачивающего тока. Чем больше ток подтяжки тем быстрее переходной процесс. Значение таймаута перехода в другое состояние стоит хранить в NVRAM.
№ | Входное воздействие |
1 | Сработало прерывание по переполнению аппаратного таймера |
2 | На H-мост подали PWM сигнал со скважностью более 0% |
Аналитику надо запускать именно пройдя полный цикл в конечном автомате. Только так будет накоплена необходимая статистика для принятия решения о здоровье H-моста.
5--Таблица переходов
начальное состояние | Inputs | |
TimeOut | 0% | |
LN_RN | LN_RU | LN_RN |
LN_RU | LU_RU | LN_RN |
LU_RU | LU_RN | LN_RN |
LU_RN | LN_RN | LN_RN |
6--Граф переходов получился такой. За один оборот конечный автомат накапливает все нужные исходные данные для принятия решения о состоянии H-моста
рис 5
На рисунке 6 представлена таблица принятия решения. На основе измерений напряжений на плечах H-моста можно судить о таких высокоуровневых событиях как отвалившаяся мотор или короткое замыкание в цепи. Таблицу можно хранить в ROM (on-chip Nor Flash) памяти микроконтроллера-спинера H-моста.
рис 6
Вывод
За работой H-моста надо внимательно наблюдать. Благодаря программному компоненту Load Detect, например, если злоумышленник выкрутит лампочку в автомобиле, то водителю на смартфон придет push-уведомление.
Как видите для разработки алгоритмов для программирования микроконтроллеров надо уметь активно пользоваться электронными таблицами (коллективное редактирование, сортировка по категориям, двигание столбцов, раскраска).
Надеюсь этот текст поможет другим инженерам тоже делать надежные драйверы H-мостов с диагностикой во время исполнения.
Акроним | Расшифровка |
ADC | Analog-to-Digital Converter |
PWM | Pulse-Width Modulation |
ASIC | Application-Specific Integrated Circuit |
FSM | Finite-State Machine |
NVRAM | Non-volatile random-access memory |
CW | ClockWise |
LU_RN | Left shoulder pull up, Right shoulder pull none |
LU | Left shoulder pull Up |
RN | Right shoulder pull none |
CCW | CounterClockWise |
Links
https://habr.com/ru/post/697388/
https://habr.com/ru/company/vk/blog/373397/