Новейшее семейство микроконтроллеров RA8M1 просится быть использованным в умном электроприводе. Вычислительная мощь ядра ARM Cortex-M85 (480 МГц) позволяет легко управлять на нашей плате одновременно двумя PMSM/BLDC или тремя DC коллекторными моторами с использованием алгоритмов машинного обучения и еще оставляет ресурс для комплексной удаленной диагностики в реальном времени. Добавим сюда IoT на ESP32-С6, дисплей, интерфейсы энкодеров, полевые шины и в результате получаем универсальный контроллер моторов.

Контролер рассчитан на управление моторами с максимальной суммарной мощностью 800 Вт без активного охлаждения. Способы управления могут быть самыми разными: векторное безсенсорное, скалярное безсенсорное, с обратной связью по квадратурному энкодеру, с обратной связью по датчикам Холла, с обратной связью по аналоговому сигналу положения, с управлением по обратной ЭДС и прочие. Акустические и вибрационный сенсоры улучшают управление и являются источниками данных для машинного обучения. Контроллеры могут объединяться в сеть через интерфейсы: CAN, RS485 и беспроводные: BLE, Wi-Fi, Zigbee, Thread.

Схемотехника

Схемотехника в основном повторяет предыдущий проект контроллера. Вместо одного 3-фазного драйвера поставлено два. BLE/Zigbee/Thread чип заменен на модуль BLE/Zigbee/Thread/Wi-Fi.

Схема одного из каналов управления мотором
Схема одного из каналов управления мотором
Трассировочный интерфейс под адаптер J-Link
Трассировочный интерфейс под адаптер J-Link

Поскольку ядро новое, то возможны многие аппаратные и недокументированные баги. Поэтому кроме обычного отладочного SWD интерфейса (клок до 25 Мгц) на плате установлен трассировочный интерфейс (клок до 60 МГц). Трассировочный интерфейс сильно сокращает расход времени на отладку. Он позволяет быстро находить точки сбоев, аномальные потоки прерываний, переходы в запрещенные области памяти, места зависаний, баги периферии и т.п., упрощает профайлинг и оптимизацию кода.

Плата выполнена на 6-слойном стеке

Предыдущий контроллер был сделан на 4-слойном стеке с 0.3 мм минимальными отверстиями и 0.15 мм дорожками и зазорами. Текущий контроллер должен выдерживать большие амплитуды токов и следовательно ему нужно уменьшать сопротивление полигонов раза в два. Это можно сделать увеличив толщину меди или увеличив количество слоёв. Увеличение количества слоёв на два слоя или увеличение толщины меди в два раза по оценке калькулятора PCBWay обойдётся почти в одинаковую сумму. Но увеличение толщины меди до 2 oz потребует увеличить зазоры до 0.2 мм , а это уже критическая проблема при трассировке микросхемы главного микроконтроллера и других микросхем с повышенной плотностью выводов. Поэтому остаётся только вариант увеличения числа слоёв. Ещё хорошо то, что при 6 слоях появляется возможность уменьшить излучаемые платой помехи. Для этого применяем экранирующие полигоны и уменьшаем площади токовых петель.

-
-

Спецификация стека платы

Спецификация стека платы выглядит так:

Плэйны не используются

Плэйны (т.е. слои со сплошной заливкой медью) всегда делают, когда на плате стоит быстрый процессор с внешней памятью. Но здесь я их не применяю, поскольку плата гибридная. Она совмещает и силовые цепи и высокоскоростные цифровые. В таких случаях плэйны заменяются полигонами, поскольку всю площадь платы заливать плэйном не нужно. Физически полигоны ничем от плэйнов не отличаются, но в Altium операции с плэйнами отличаются от работы с сигнальными слоями. В плэйнах работают с рисованием разрезов, а в слоях обычно работают с рисованием дорожек и контекстные инструменты соответственно разные. Имея это в виду можно спокойно заменить плэйн большим полигоном. Волновые сопротивления Altium умеет считать и относительно полигонов.

Одна из целей - уменьшение паразитных индуктивностей.

Нет ничего хуже на плате чем паразитные индуктивности дорожек и полигонов. Это они ответственны за огромные наносекундные выбросы на наблюдаемых осциллограммах сигналов в силовых цепях. Благодаря тому что у платы 6-слойный стек можно дополнительно предпринять некоторые меры по уменьшению паразитных индуктивностей.

Схема выходного каскада с паразитами
Схема выходного каскада с паразитами

Снижаем индуктивность линий сигналов управления затворами силовых транзисторов. Ниже пример трассировки сигналов W и HSW. Это управление затвором верхнего транзистора. Звон в его затворе может затягивать время коммутации, а значит и потери. Кроме того становится трудно минимизировать мёртвое время. Плюс этот же сигнал идёт на измерительные цепи. Чем короче звон, тем больше есть время на измерение и тем выше можно выставить частоту коммутации.

Проводим дорожки во внутренних слоях разделённых тонким препрегом в 0.14 мм. Ниже показана конструкция дорожек. Площадь токовой петли доведена до минимума. Индуктивность стала меньше в несколько раз по сравнению с обычным решением, когда дорожки идут не параллельно.

Линии управления приближаются по топологии к дифференциальным
Линии управления приближаются по топологии к дифференциальным

Стоит ли всеми силами увеличивать ширину дорожек к затворам? Уменьшение погонной индуктивности параллельных дорожек пропорционально корню квадратному от увеличения ширины. Т.е. увеличив ширину в 4 раза индуктивность уменьшится в два раза. С этой точки зрения усилия по увеличению ширины не окупятся, если это приведёт к сужению силовых дорожек. Сопротивление дорожек не имеет особого значения, поскольку основное сопротивление вносит драйвер.

Этапы трассировки

Как художник рисует картину с набросков, так и плата трассируется поначалу набросками дорожек. Можно, конечно, и сразу ложить полигоны на шины с большими токами, но тогда надо быть готовым часто их перерисовывать. Нельзя просто так взять и сразу нарисовать правильный полигон, да ещё до трассировки остальных цепей.

Чтобы случайно не возникло конфликтов пересечения пространств, где намечены полигоны, мы прокладываем дорожки, которые после укладки полигонов удалим. Чтобы позже вспомогательные дорожки удалить все и разом присваиваем им специфическую ширину, например 0.444 мм или 0.333 мм. Потом такие дорожки легко выделяются по критерию ширины и удаляются.

Расстановка переходных

Часто хочется заранее уменьшить количество переходных отверстий (via). Ничего хорошего они в сигнал не привносят. Но лучше все же не экономить на переходных и сразу ставить их стройно и оптом. Упорядоченность переходных сослужит хорошую службу если вдруг нагрянет тюнинг изготовленной платы (а он точно нагрянет) или вдруг надо будет достать щупом сигнал, который не планировали исследовать.

Микросхемы ставим так чтобы их легче было перепаять. Поэтому многие микросхемы стоят на обратной стороне платы подальше от разъёмов, которые плавятся от горячего воздуха. Процессор оставляем сверху чтобы иметь возможность измерять сигналы на его выводах в рабочем положении платы.

Создание правил в Altium Designer

Правила сильно облегчают трассировку. Вместо того чтобы постоянно держать в уме кучу ограничений и факторов при трассировке, программа просто не даст проложить дорожки с нарушением ограничений указанных в правилах. Но и правила надо уметь создавать.

Устанавливаем зазоры для пустых падов.

У микросхем бывают неподключенные пады. Но общее правило зазоров не делает различий между подключёнными и неподключенными падами. Хотя к неподключенным зазор может быть меньше.

Предупреждение о нарушении общего правила зазоров
Предупреждение о нарушении общего правила зазоров

Вот, например, как реагирует программа на недостаточный зазор к неподключенному паду. Чтобы уменьшить зазор к неподключенным падам нам придётся сделать класс неподключенных падов.

Создание класса неподключенных падов
Создание класса неподключенных падов
Правила для класса неподключенных падов
Правила для класса неподключенных падов

Создав класс неподключенных падов создаём приоритетное правило с уменьшенными до технологического минимума зазорами только для этого класса.

Тут сразу надо помнить о том, что созданные правила в Altium не рефакторятся автоматически. Поменяв позиционные обозначения элементов придется идти в правила и переписывать там вручную идентификаторы объектов.

Правил должно быть много

В иерархических схемах, как наша, не работают общие правила для именованных цепей в субблоках. Если нужно описать уменьшенные зазоры между цепями с малой разницей потенциалов, то приходится делать правила для каждого субблока отдельно. Ниже пример как сделать правило для зазоров в цепи управления затворами верхних транзисторов. Приходится делать отдельные правила для каждой фазы и для каждого субблока.

Результат трассировки

Полигоны на изображении платы сделаны прозрачными для лучшей визуализации дорожек.
Полигоны на изображении платы сделаны прозрачными для лучшей визуализации дорожек.

Программирование

Программироваться контроллер будет с использованием уже достоточно развитого фреймворка на основе Azure RTOS, взятого из предыдущего проекта.

Необходимо будет только перенести исходники с Synergy Software Package (SSP) на Flexible Software Package (FSP)

Краткое демо по освоению FSP было дано здесь. Среды разработки для обоих пакетов: SSP и FSP - практически одинаковы. Периферия также имеет минимальные отличия.

В архитектуре чипов Renesas особенно привлекает унифицированность и гибкость таймеров (разбор нюансов архитектуры тут и тут). Все ШИМ таймеры имеют одинаковый набор регистров и одинаковую архитектуру, в отличие от, например, STM32Hxxx, где можно найти до 7 разных архитектур таймеров. Избыточное разнообразие сильно усложняет планирование многоканального управления моторами.

Наш контроллер по существу двухпроцессорный, второй процессор находится в модуле ESP32-С6. Модули ESP32 имеют очень ограниченное число пинов и все они ушли на интерфейсы SDIO, UART, JTAG. Через SDIO есть надежда разогнать Wi-Fi канал связи у главного микроконтроллера до 50 Мбит/сек. Такая скорость понадобиться для удаленной отладки алгоритмов управления моторами и модуляции. С более продвинутыми модулями можно было бы получить скорость до 100 Мбит/сек. Но ESP32 вне конкуренции по цене и могут ещё разгрузить основной микроконтроллер от некоторых дополнительных функций.

Схема контроллера планируется к публикации позже, после запуска демопроектов.

Комментарии (20)


  1. lumen_xp
    06.05.2024 09:40
    +3

    Извините, не мог пройти мимо и не пнуть.
    Контроллер мотОров для шофЁров. Ну есть же нормальное слово у приводчиков "двигатель", а далее тип можно указать, синхронный, асинхронный, шаговый ....
    Ох как нас дрючили за то, что якорь ротором назвал.


    1. NutsUnderline
      06.05.2024 09:40

      ОК, только давайте я в качестве компенсации выражу восхищение программной частью проекта


    1. Indemsys Автор
      06.05.2024 09:40
      +1

      Спасибо за фидбэк.

      Я свои статьи считаю немного художественными произведениями, поэтому позвольте мне оставить свой стиль. Если на Хабре было бы так строго как в журналах, то я бы лучше писал в платные журналы или за деньги.


    1. NutsUnderline
      06.05.2024 09:40

      Кстати тут недавно курсовик выложили так народ высказывал фе за слишком научный стиль.


  1. Mikhail_eng
    06.05.2024 09:40
    +1

    Промо от Renesas судя по тому, что для каждого действия описание ограничивается парой абзацев? С компонентами, которые в РФ не особо и продаются, а если и продаются, то по очень большой цене.
    Имхо, если ставить мощный микроконтроллер, то можно TMC6200 исключить из схемы. Как и сделать разводку в двух слоях.


  1. Abwindzentrierer
    06.05.2024 09:40
    +2

    Добрый день. При беглом осмотре бросается в глаза:


    1. Abwindzentrierer
      06.05.2024 09:40

      А, возможно на левом изображении не показан полигон?


      1. Indemsys Автор
        06.05.2024 09:40

        С одной стороны да, полигон не показан.
        С другой стороны такие рекомендации, как на вашем рисунке это рекомендации от технологов плат. Но технологи плат уж сами должны подумать, что там на их производстве вызывает косяки. Если что серьезное, то сразу приходит обратка. Тут была тишина.

        В релизе я обычно делаю каплеобразные соединения. Но на практике еще ни разу не было проблем с подводом дорожек к падам. Это настолько незначительный фактор в мелкосерийном производтсве, что его можно спокойно игнорировать.

        Да, и там в Altium есть правило насчет подвода дорожек и совсем плохо он не даст сделать.


  1. Dudarion
    06.05.2024 09:40
    +2

    В статье упоминается машинное обучение для управления мотором. Любопытно, как именно оно применяется


  1. kanvas
    06.05.2024 09:40
    +2

    Спасибо за статью. Можно написать результаты сравнительных тестов эффективности "интеллектуального управления" с "машинным обучением" ? (в чём оно состоит ? Есть свёрточные сети или искуственные нейроны ? ) Желательно с численным влиянием каждого улучшения, отдельно результаты благодаря датчикам вибрации.


    1. Indemsys Автор
      06.05.2024 09:40
      +1

      Я эту плату еще в руках не держал. Она в производстве.

      Машинное обучение будет на библиотеке https://github.com/uTensor/uTensor?tab=readme-ov-file. Там CNN сети, заточеные на идентификацию фичей. А фичи это будут типа голосовых команд, событий неисправностей привода, событий воздействий человеком на механизмы (двери, калитки, ручки и т.д.).


      1. CitizenOfDreams
        06.05.2024 09:40

        А фичи это будут типа голосовых команд, событий неисправностей привода, событий воздействий человеком на механизмы (двери, калитки, ручки и т.д.).

        То есть привод, услышав "э, куда #$%?!", поймет, что нужно сбавить скорость?


        1. Indemsys Автор
          06.05.2024 09:40

          Фразы юзер сам будет наговаривать при обучении, для этого и сделан быстый Wi-Fi. Но основная проблема у нас - это отличить воздействие ветра от воздействия человека и наезд на живые или неживые препятствия.


  1. juramehanik
    06.05.2024 09:40
    +4

    виасы лучше расположить в шахматном порядке чтоб не было такого разрыва полигонов земли в земляных слоях

    прекрасный пример как делать не надо
    https://www.youtube.com/watch?v=c-VAPqNBDRU смотрим лекцию


    1. Indemsys Автор
      06.05.2024 09:40

      Я смотрел это видео.
      Но здесь не тот случай.
      Шахматная расстановка только увеличит разрыв в полигоне и сузит пути силовых токов.


      1. juramehanik
        06.05.2024 09:40

        Если растащить виасы то в земляном полигрне будут отдельные отверстия с перемычками, а не прямая линия выреза как у вас сейчас


        1. Indemsys Автор
          06.05.2024 09:40

          Это в теории у мижичка на доске. А в реальности пады во внутренних слоях надо делать больше чем во внешних из-за дополнительных ошибок совмещения слоев на производстве. И с учетом этого надо очень сильно растаскивать via. А когда вы их растащите, то окажется что вырез и потеря площади силовых путей только увеличились, и компонеты уже ставить мало места.

          С силовыми цепями еще есть опасность получить сильные локальные перегревы из-за узких перешейков.


          1. juramehanik
            06.05.2024 09:40
            +1

            Ну, как иначе фанаут процов трассировкть?) Во внутренних слоях убираются пады у неиспользцемых виасов и трузольных падов. Остается только клиренс от меди до отверстия и больше остается места для заливки


            1. Indemsys Автор
              06.05.2024 09:40

              Да есть такая возможность. Но учитывайте специфику платы. Там даже затворные токи в пару ампер бывают. Так что я не делаю нулевые пады в промежуточных слоях.

              Опять же с другой стороны, почему вы думаете, что давать протекать силовым токам промеж переходных - это хорошо? Может быть переходные образуют изолирующий барьер именно для того чтобы токи не гуляли продольно между ними и не создавали нежелательных наводок?


              1. juramehanik
                06.05.2024 09:40
                +1

                В видео что я скинул есть важная рекомендация, что сначала при разработке стоит все залить землей, а потом уже если есть какая то херота то оптимизировать - делать вырезы, делить чистую землю от менее чисто и так далее.
                Принцип "преждевременная оптимизация - зло" тут так же актуален.