Скоростная разработка электроники 2

На этот раз делаем сенсор присутствия для опасных промышленных зон. В нагрузку берёмся за реализацию требований функциональной безопасности PL и SIL. Кто сказал, что AI не может делать функционально безопасные устройства? Сейчас проверим.
Мой предыдущий проект был достаточно простым. Но таки осталось чувство некоторой избыточности работы. И да, я понял, что меня тормозило. Тормозил старый шаблонный подход и использование коммерческих инструментов. Это были 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 и ИК одной платки разделяют шлейф и шину; это не четыре полностью независимых тракта.
Ах да, забыл: нам же еще нужно обеспечить определенный уровень PL/SIL
Риски анализирует сам разработчик. Смотри, например, 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 создал не сразу: около десятка раз приходилось указывать на ошибки. Но все же способность 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.




Выносная платка ToF и ИК
У 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 и B.Cu — сигналы и детали, In1 и In4 — сплошная земля, In2 — сигналы с заливкой земли, In3 — питание: заливка +3,3 В, шина +5 В и дорожки 1,8 В к доменам радара. Все переходные — 0,3/0,45 мм; на 6 слоях переходные в площадках заливаются смолой и закрываются медью без доплаты. Плата разведена вручную с автоматической доводкой. Медные слои — в сравнении разводок в разделе о трассировке.

Та же плата в трассировке лучей KiCad: дорожки видны под маской. Плата стоит радаром вверх, как в корпусе, и делает оборот за 12 с.
Плата питания и релейного выхода
70 × 40 мм, 2 слоя, 1,6 мм. На F.Cu — все детали, почти вся разводка и заливка земли, на B.Cu — земляной полигон с короткими перемычками. Силовые контуры преобразователя XL1509 сделаны полигонами на F.Cu, горячий контур около 6 × 7 мм лежит на одном слое. Дорожки цепи безопасности — не тоньше 0,6 мм, с зазором 0,5 мм до любой другой цепи. Плату развёл автотрассировщик, затем она доведена вручную. За петлю токов DC/DC волноваться не надо. AI сам мне сказал, как ее правильно трассировать и чтобы я не прововал рядом с ней вести сигналы.

PS_Power_v1: два слоя, F.Cu и B.Cu.

Плата питания стоит клеммниками вниз; самая крупная деталь на ней — реле HFA2.
Выносная платка ToF и ИК
18 × 11 мм, 4 слоя, 1,0 мм, детали с двух сторон. In1 — сплошная земля, In2 — сигналы и заливка +1,8 В. MLX90632 стоит на «полуострове» за прорезью, а через перешеек над прорезью заливка внешних слоёв не идёт: так датчик температуры меньше греется от VL53L8CX (до 215 мВт) и LDO. Платку развёл автотрассировщик.

PS_ToF_v1: четыре слоя, F.Cu, In1.Cu, In2.Cu, B.Cu; В сенсоре используются две одинаковые платки, поэтому достаточно одного изображения их разводки.

Платка повёрнута 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 мкм непрозрачны. Задняя часть корпуса с платами уходит в вырез стены и крепится с обратной стороны.
Уф..., ну человек еще был нужен в этом процессе. Пока нужен ...
KioskNews shows a cleaned-up reading view extracted from the publisher’s page — the original always lives on their site, not ours.