- BrainTools - https://www.braintools.ru -

На этот раз делаем сенсор присутствия для опасных промышленных зон. В нагрузку берёмся за реализацию требований функциональной безопасности PL и SIL. Кто сказал, что AI не может делать функционально безопасные устройства? Сейчас проверим.
Мой предыдущий проект [1] был достаточно простым. Но таки осталось чувство некоторой избыточности работы. И да, я понял, что меня тормозило. Тормозил старый шаблонный подход и использование коммерческих инструментов. Это были Altium, таблицы Excel, SolidWorks. Все они навязывали свой пользовательский интерфейс со своим представлением о рабочих процессах. Внезапно времена поменялись, и рабочие процессы вместе с ними.
Я открыл скрытый потенциал KiCAD и FreeCAD.
Тут по ходу выявились недостатки решения только на одном радаре. В режиме обнаружения микродвижений радар долго (порядка секунд) может давать ложные срабатывания, особенно в условях вибраций стен. Ошибается он и когда в помещение вносят и убирают разные предметы. Поэтому в новом сенсоре понадобилось добавить датчики на другой физике.
Теперь сенсор объединяет радар, многозонные ToF-датчики и ИК-термометры. Эти каналы наблюдают разные признаки: движение и микродвижения, объём над фоном пустой сцены и тепловое пятно. Объединение оценок и окончательное решение о присутствии принимает алгоритм прошивки.
Архитектуру разработал AI после обсуждения моих ограничений. Ограничений было много. Главным ограничением была цена. Вторым ограничением была простота технологического процесса изготовления. Т. е. покупаем на LCSC и делаем на JLCPCB. Минимум дополнительных сложных конструктивных элементов типа линз и рефлекторов. Дальше была доступность комплектации. Потом ремонтопригодность. Удобство диагностики. Модульность и автономность. Работа от −20 °C. Иммунитет к EMI и т. д. и т. п.
На диаграмме показаны функциональные блоки и их связи:
PS_Power_v1: вход 24 В, DC/DC 5 В, служебный CAN-трансивер, внешний сторож и реле с контролем обратной связи.
PS_Logic_v1: STM32H743, радар BGT60TR13C, IMU, микрофон, Flash, криптографический сопроцессор, microSD, ESP32-C6 для служебного Wi-Fi, USB и SWD. Питание — через BQ25185 с power path и SY8089; предусмотрен Li-ion 1S.
Две PS_ToF_v1: на каждой VL53L8CX и MLX90632, подключённые к своей шине I2C. ToF и ИК одной платки разделяют шлейф и шину; это не четыре полностью независимых тракта.
Риски анализирует сам разработчик. Смотри, например, Machinery Regulation (EU) 2023/1230, Annex III → Part B → General principles → пункт 1 — “manufacturer shall ensure that a risk assessment is carried out.”
Вот карта рисков, которые я увидел и с которыми решил бороться.
Если на диаграмме слишком мелко, то вот десять сценариев:
Пропуск человека, неподвижной цели или цели в слепой зоне.
Общие внешние воздействия: засветка, загрязнение, запотевание.
Сбои МК и ПО: самодиагностика ядра/памяти и зависание при продолжающейся работе таймеров.
Застывший управляющий вывод или пробой ключа реле.
Сварка рабочего контакта реле.
Обрыв или замыкание межплатных соединений.
Нарушения питания и электромагнитные помехи.
Слишком позднее снятие разрешения.
Изменение положения сенсора, удар или намеренный разворот.
Подмена прошивки и отключение диагностических механизмов.
Электроника сенсора состоит из трех проектов KiCad:
– плата питания и релейного выхода,
– плата процессора,
– выносная платка ToF/ИК, которых в сенсоре две.
Платы соединяются шлейфами. Все схемы созданы AI. Я только слегка перемещал компоненты, чтобы было более эстетично.
Стоит оценить, как AI разжёвывает, что и для чего стоит. Я такого на схемах никогда не видел. И кто говорит, что AI умеет только воспроизводить уже сделанное?
Хотя, если по-честному, то схемы такие AI создал не сразу: около десятка раз приходилось указывать на ошибки [2]. Но все же способность AI быстро распределять сигналы на таких замороченных в плане мультиплексирования функций чипах, как STM32, просто завораживает. И это не всё. Он потом уже в процессе трассировки сам перекидывал сигналы на пинах микроконтроллера, чтобы упростить трассировку!
PS_Power_v1 принимает 24 В и выдаёт наружу релейный сигнал разрешения работы. Вход защищён полимерным предохранителем 1,1 А, ключом от переполюсовки на P-канальном полевом транзисторе и TVS-диодом SMAJ33A. Понижающий преобразователь XL1509-5.0 даёт 5 В (до 2 А) этой плате и по шлейфу — плате процессора. Служебный CAN сделан на ATA6563 с защитой PESD2CAN; разделённую терминацию включает DIP-переключатель.
Катушка реле HFA2 стоит между двумя ключами. Верхний, P-канальный, открывает сигнал RELAY_EN. Затвор нижнего, N-канального, заряжает двухступенчатая накачка от меандра RELAY_PULSE, поэтому застывший уровень на выводе микроконтроллера катушку не удержит. Когда импульсы прекращаются, реле отпускает примерно за 16 мс. Внешний оконный сторож TPS3430 своим выходом прямо опускает затвор нижнего ключа; прошивка обязана дёргать его вход не чаще раза в 120 мс и не реже раза в 710 мс. Затвор микроконтроллер читает через 1 МОм: срабатывание сторожа видно, а управлять затвором нельзя. Зеркальный NC-контакт реле читается напрямую, напряжение внешней цепи безопасности снимается через два последовательных резистора по 49,9 кОм.
Я слегка опешил от такого решения и сказал проверить. И AI проверил. Он нарисовал мне модель в ngspice, встроенном в KiCad 10. Схема снята с листа без изменений, вместо микроконтроллера и питания — источники, модели транзисторов и диодов составлены по даташитам. При меандре 10 кГц на затворе 3,3 В, ток катушки 29 мА. После последнего импульса ток падает ниже уровня отпускания за 6,8…9,9 мс, к этому добавляется до 10 мс механики реле.
У PS_Logic_v1 четыре листа схемы — питание, микроконтроллер, датчики и связь.
Питание. Зарядка с power path BQ25185 стоит между шиной 5 В и преобразователем SY8089 (3,3 В, 2 А), поэтому сенсор может работать от одной ячейки Li-ion. LDO RT9013 даёт 1,8 В радару; когда радар не нужен, микроконтроллер снимает эту шину целиком. Делители контроля 24 В, 5 В, внешней цепи и аккумулятора стоят у входов АЦП.
Микроконтроллер STM32H743VIT6, развязка по DS12110 и AN4938. Ёмкости кварцев пересчитаны по AN2867, часовой кварц взят с CL = 6 пФ: у прежнего почти не оставалось запаса по усилению генератора. Отладка — SWD на разъёме 2 × 5 с шагом 1,27 мм; ещё на листе три светодиода и DIP-переключатель адреса узла и старта из загрузчика.
Датчики. Радар BGT60TR13C питается от 1,8 В, у каждого его домена питания свой ферритовый фильтр, как в руководстве Infineon UG091722. С SPI микроконтроллера (3,3 В) его связывают два преобразователя уровня SN74AVC4T245. По предельным задержкам SPI сходится до 41 МГц, во всём диапазоне температур гарантированно — 25 МГц. Здесь же IMU LSM6DSV16X на своей шине SPI, флеш W25Q128 для журнала, криптоэлемент ATECC608B на отдельной шине I2C, PDM-микрофон IM69D130 и два разъёма шлейфов платок ToF — на I2C1 и I2C2.
Связь. USB-C с защитой USBLC6, microSD с ключом питания TPS22919 (зависшую карту возвращает к жизни только снятие питания) и модуль Wi-Fi ESP32-C6 по SDIO с выводами для его прошивки через UART.
У PS_ToF_v1 один лист. VL53L8CX работает по I2C; его питание AVDD коммутирует ключ TPS22919, 1,8 В даёт RT9013. LSF0204 согласует I2C, LPn и INT между 1,8 и 3,3 В. Без питания выводы LSF0204 в высоком импедансе, и выключенная платка не подпитывается через подтяжки платы процессора. MLX90632 питается всегда и сидит на той же шине I2C, на стороне 3,3 В. Разъём шлейфа 2 × 5 разведён симметрично относительно поворота на 180°: перевёрнутая розетка ничего не замыкает, платка просто не отвечает.
Стек слоев печатных плат и технологические нормы AI прочитал сам на JLCPCB и вставил в проекты KiCAD. Контуры тоже сам AI нарисовал. Поэтому не спрашивайте меня, как работать в KiCAD. Я в нем практически не работал.
70 × 25 мм, 6 слоёв, стек JLC06101H-3313 толщиной 1,03 мм. F.Cu [4] и B.Cu [5] — сигналы и детали, In1 и In4 — сплошная земля, In2 — сигналы с заливкой земли, In3 — питание: заливка +3,3 В, шина +5 В и дорожки 1,8 В к доменам радара. Все переходные — 0,3/0,45 мм; на 6 слоях переходные в площадках заливаются смолой и закрываются медью без доплаты. Плата разведена вручную с автоматической доводкой. Медные слои — в сравнении разводок в разделе о трассировке.
Та же плата в трассировке лучей KiCad: дорожки видны под маской. Плата стоит радаром вверх, как в корпусе, и делает оборот за 12 с.
70 × 40 мм, 2 слоя, 1,6 мм. На F.Cu [4] — все детали, почти вся разводка и заливка земли, на B.Cu [5] — земляной полигон с короткими перемычками. Силовые контуры преобразователя XL1509 сделаны полигонами на F.Cu [4], горячий контур около 6 × 7 мм лежит на одном слое. Дорожки цепи безопасности — не тоньше 0,6 мм, с зазором 0,5 мм до любой другой цепи. Плату развёл автотрассировщик, затем она доведена вручную. За петлю токов DC/DC волноваться не надо. AI сам мне сказал, как ее правильно трассировать и чтобы я не прововал рядом с ней вести сигналы.
PS_Power_v1: два слоя, F.Cu [4] и B.Cu [5].
Плата питания стоит клеммниками вниз; самая крупная деталь на ней — реле HFA2.
18 × 11 мм, 4 слоя, 1,0 мм, детали с двух сторон. In1 — сплошная земля, In2 — сигналы и заливка +1,8 В. MLX90632 стоит на «полуострове» за прорезью, а через перешеек над прорезью заливка внешних слоёв не идёт: так датчик температуры меньше греется от VL53L8CX (до 215 мВт) и LDO. Платку развёл автотрассировщик.
PS_ToF_v1: четыре слоя, F.Cu [4], In1.Cu, In2.Cu, B.Cu [5]; В сенсоре используются две одинаковые платки, поэтому достаточно одного изображения их разводки.
Платка повёрнута MLX90632 вверх, VL53L8CX стоит на той же стороне ниже. На обратной стороне — штыревой разъём шлейфа 2 × 5.
KiCAD был выбран из-за открытости его API и текстового формата исходников. Попытка делать автоматизацию в Altium окончилась неудачей. Привет бинарным форматам.
Поначалу была идея взять некие плагины для KiCAD для автотрассировки и использовать их каким-то образом. Но нет, AI таким путем не идёт. Ему легче самому написать автотрассировщик и авторасстановщик. И он это сделал.
Алгоритмическая основа трассировщика — известные алгоритмы A* и PathFinder. Не советую использовать всякие трассировщики online. В режиме диалога AI сделает гораздо эффективней.
Расстановка. Сначала скрипт, созданный AI, по заданному плану последовательно ставит обвязку рядом с нужными выводами микросхем. Перебираются позиции на сетке, разрешённые стороны платы и повороты; выбирается ближайший допустимый вариант либо вариант с меньшей суммой длин связей. Проверяются периметры компонентов, запретные зоны и отступы. Крупные узлы и разъёмы задаются заранее. Затем скрипт раздвигает тесно стоящие детали: отталкивание при недостаточном зазоре, слабое притяжение к исходной позиции и привязка к сетке.
Не знаю есть ли в скрипте какая-то магия, но разъёмы были поставлены практически сразу туда куда надо.
Трассировка. Другой скрипт ищет путь по сетке в восьми направлениях с переходами между слоями. Алгоритм A* учитывает длину, цену слоя, переходных и препятствий. PathFinder разрешает конфликты: занятые несколькими цепями области дорожают, цепи перекладываются повторными проходами. После этого еще один скрипт спрямляет дорожки до отрезков 0/45/90° и проверяет зазоры по точной геометрии.
Причем AI вычислил, какие операции трассировки самые затратные по времени, и реализовал их на C. Скомпилировал и подключил к скриптам в виде dll.
В один момент у меня кончился лимит, и я день просидел без AI. Решил по старой памяти руками потрассировать. И вот что получилось.


|
Показатель |
Автоматизированный вариант |
Ручной + доводка |
Изменение |
|---|---|---|---|
|
Переходные отверстия, шт. |
450 |
391 |
−59 (−13,11 %) |
|
Общая длина дорожек, мм |
2 721,384 |
2 622,039 |
−99,345 (−3,65 %) |
|
Отрезки дорожек, шт. |
2017 |
1656 |
−361 |
|
Площадки, шт. |
696 |
696 |
0 |
|
Несоединённые связи |
0 |
0 |
0 |
Переходных я сделал меньше на 13 %. Но тут надо учитывать, что человек при трассировке плохо нативно чувствует кросс-связи сигналов. Не факт, что, уменьшив переходные и увеличив протяженность параллельных участков, я не ухудшил характеристики сигналов. Длину-то дорожек я почти не сократил.
Здесь мне AI подстроил геометрию наклона сенсоров. Без линзовой системы на микромощных микросхемах довольно сложно реализовать хорошее покрытие зон. Но AI попытался. И я решил, что решение годное. Правда, здесь предусмотрено устанавливать два девайса в противоположных углах помещения.
Корпус мы с AI нарисовали в FreeCAD часа за два. Получилось интересно.
Вот как описывает это творение AI:
Корпус — вертикальная призма, наклонные участки только у окон. Радом радара — дно местного углубления в лицевой грани: поликарбонат 1,5 мм параллельно плате ровно в 5 мм от радара (два полуволновых промежутка на 60 ГГц). Окна ToF — два скоса по нижнему ребру, каждый параллелен своей платке: внутреннее окно 1 мм стоит в 0,5 мм от VL53L8CX. Поверх скосов — пластины 0,3 мм в кармане заподлицо. Над MLX90632 в них вставка из HDPE: поликарбонат и стекло в диапазоне 8…14 мкм непрозрачны. Задняя часть корпуса с платами уходит в вырез стены и крепится с обратной стороны.
Уф…, ну человек еще был нужен в этом процессе. Пока нужен …
Автор: Brazil
Источник [7]
Сайт-источник BrainTools: https://www.braintools.ru
Путь до страницы источника: https://www.braintools.ru/article/36383
URLs in this post:
[1] предыдущий проект: https://habr.com/ru/articles/1059562/
[2] ошибки: http://www.braintools.ru/article/4192
[3] память: http://www.braintools.ru/article/4140
[4] F.Cu: http://F.Cu
[5] B.Cu: http://B.Cu
[6] поля зрения: http://www.braintools.ru/article/9711
[7] Источник: https://habr.com/ru/articles/1089378/?utm_source=habrahabr&utm_medium=rss&utm_campaign=1089378
Нажмите здесь для печати.