Металл2024 Реклама
Метобр2024 Реклама

Управляющая плата на STM32F401CCU6. От идеи до прототипа и обратно.

jmz
Идет загрузка
Загрузка
01.07.2023
5740
36
Техничка

Подпишитесь на автора

Подпишитесь на автора, если вам нравятся его публикации. Тогда вы будете получать уведомления о его новых статьях.

Отписаться от уведомлений вы всегда сможете в профиле автора.

55

Управляющая плата на STM32F401CCU6. От идеи до прототипа и обратно.

Разработка управляющей платы на базе чёрной таблетки STM32F401CCU6

Чёрная таблетка для синей рыбки

Давным-давно, то ли в прошлую пятницу, то ли лет 5 назад из спортивного интереса и подручных материалов я слепил "управляющую плату" на синей таблетке STM32F103C8T6.

Marlin с тех пор изрядно подрос как по функционалу, так и по размеру и в 128КБ помещается уже плохо. К тому же китайцы массово освоили производство "оригинальных STM32F103" и надеяться на недокументированные 128 КБ флеш памяти уже не приходится.

На смену синей таблетке пришла существенно подешевевшая чёрная, представленная в двух вариантах F401CC и F411CE. Когда-то был ещё промежуточный вариант на F401CE, но сейчас его найти проблематично. Стоит такая плата от 200 до 400 рублей в зависимости от курса доллара, фазы луны и типа микроконтроллера, что делает ее отличным вариантом для постройки ультрабюджетной управляющей платы.

Такие проекты уже были, в том числе и на нашем сайте (ссылка, ссылка и ещё раз ссылка), но у них всех есть общий недостаток - микроконтроллер F401 используется как большой F103, где больше килобайт и мегагерц. При этом дополнительные возможности F401 упускаются из виду, из-за чего функционал управляющих плат ограничен возможностями древней F103.

Вкусные особенности STM32F4

  • Режимы Host и OTG для USB контроллер. OTG для Marlin бесполезен, а USB Host позволит печатать не только с SD карт но и с USB флешек. К сожалению, для этого придется пожертвовать возможностью подключать платы с компьютеру через тот же USB, т.к. в отличии от микроконтроллеров F407 в чёрной таблетке только один USB контроллер.
  • 4 килобайта SRAM памяти с питанием от внешней батареи. Marlin умеет использовать эту память для хранения настроек, поэтому микросхему EEPROM вполне можно заменить двумя пальчиковыми батарейками. Или одной литиевой на 3 вольта, кому как больше нравится.
  • 4 дополнительных таймера общего назначения. Звучит не очень впечатляюще, но именно эти таймеры и позволят сделать большую часть того, на что у синей таблетки не хватит ресурсов. Например реализовать программный UART для управления TMC драйверами.

Хотелки и проектирование

Вопрос выбора платформы не стоял, а над наполнением надо было подуматьКлючевыми критериями стали:

  • Размер 100x100 для бюджетного фабричного производства
  • Самостоятельная сборка, т.е. типоразмер 0603 или больше
  • 5 драйверов и два хотенда
  • 4 управляемых вентилятора
  • Печать с USB флешки
  • Слот для MicroSD на плате
  • EXP1/EXP2 с возможностью подключения типовых экранов
  • Возможность установки SPI для хранения шрифтов и картинок
  • И что-нибудь ещё

В результате столкновения безудержных хотелок с безжалостной действительностью нарисовалась такая плата:

  • Размер 100х100мм, 4 слоя. Стоимость производства у JLCPCB (не является спонсором данной статью, к сожалению) - 7$ в зелёном цвете и 15$ в чёрном
  • Питание 12 или 24 вольта с защитой от переполюсовки и козы из диодов и предохранителя на 20А. При переполюсовке в защиту уходит блок питания, предохранитель остаётся целым
  • 5 драйверов шаговых двигателей с возможностью конфигурирования по SPI или UART и sensorless homing
  • 3 нагревателя, один для стола и два для хотендов
  • 3 аналоговых датчика температуры
  • 4 управляемых вентилятора, 2 с аппаратной поддержкой ШИМ, 2 - безВсе нагреватели и вентиляторы имеют светодиодную индикацию включения, позволяющую осуществлять визуальный контроль пробития полевых транзисторов.
  • Разъем для подключения сервопривода или BL Touch
  • 6 концевиков, пять с возможностью подключения к соответствующим выводам TMC драйверов и один с возможностью подключения BL Touch
  • Поддержка печати с MicroSD карт и USB флешек
  • Разъемы EXP1/EXP2 с поддержкой стандартных* экранов
  • 2 микросхемы EEPROM c SPI и I2C интерфейсами.
  • Микросхема SPI FLASH для хранения шрифтов и картинок
  • 2 разъема SPI для подключения MAX6675 или других SPI устройств.
  • Разъем UART для подключения ESP WiFi модуля, шибко умного TFT экрана или вдумчивого чтения отладочных сообщений

* Стандартными считаются экраны, которые есть у меня в наличии:

  • REPRAP_DISCOUNT_SMART_CONTROLLER
  • REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER
  • MKS_MINI_12864
  • MKS_TS35_V2_0
  • 128x64 OLED экраны с контроллерами SSD1306 и SH1106

Для подключения I2C OLED экранов нужно использовать аппаратный I2C разъем, программный I2C на пинах EXP1/EXP2 не поддерживается. SPI варианты этих OLED экранов можно подключать непосредственно с EXP1/EXP2, хулы не будет.

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

  • Ногодрыжество - REPRAP_DISCOUNT_SMART_CONTROLLER
  • Программный SPI - REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER
  • Аппаратный SPI - MKS_MINI_12864 и MKS_TS35_V2_0
  • Аппаратный I2C - SSD1306 и SH1106

При большом желании программный I2C можно реализовать на ногах PC14 и PC15, выведенных в разъем SPI как CS1 и CS2, но мне не настолько нечего делать.

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

Аппаратные модификации

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

Используя аппаратный конфигуратор типа “паяльник” можно донастроить под свои нужды следующие  параметры:

  • I2C интерфейс вместо шагового двигателя E0, дополнительных SPI разъемов или микросхем SPI EEPROM и Flash. В последнем случае можно заменить микросхему SPI EEPROM на аналогичную с I2C интерфейсом.
  • Отладочный разъем SWD вместо шагового двигателя E1, дополнительных SPI разъемов или микросхем SPI EEPROM и Flash.
  • Выбор напряжения питания на разъёме UART - 5 или 3.3 вольта
  • Выбор  подтяжки сигнальной линии концевиков по питанию или к земле
  • Установка опциональной защиты входов термисторов от высокого напряженияТребует распайки дополнительных элементов на нижней стороне платы

Базовая конфигурация работает сразу без пайки на тёмной стороне.

Управляющая плата на STM32F401CCU6. От идеи до прототипа и обратно.

Экономия по-чёрному

Ног у чёрной таблетки кот наплакал, поэтому для драйверов шаговых двигателей был введен режим тотальной экономии. Линии Dir и Step это не затронуло, а вот линии Enable пришлось потесниться. В зависимости от типа используемого драйвера эта нога выполняет одну из трёх функций:

  • Enable для standalone драйверов
  • SPI SS для TMC2130
  • UART TX для TMC22xx

Для переключения между этими режимами под драйверами шаговых двигателей добавлена дополнительная гребенка контактов, позволяющая менять подключение ноги в зависимости от используемого режима работы драйвера. Управление режимом удержания для TMC драйверов осуществляется через SPI/UART интерфейс, дополнительная нога для этого не требуется. В Marlin этот функционал доступен при использовании параметра SOFTWARE_DRIVER_ENABLE.

Следующей под раздачу попала микросхема EEPROM, обычно являющаяся единственным устройством на I2C шине, и как следствие, единолично занимающая целых две ноги аппаратного I2C. Замена интерфейса подключения на SPI позволило сэкономить ещё одну ногу, а освободившиеся ноги PB6 и PB7 были отданы драйверу E0.

У STM32F4 есть встроенный функционал прошивки по USB интерфейсу без использования дополнительных устройств в виде программатора или переходника USB/UART. Это позволяет отказаться от использования SWD в обычной жизни и задействовать ноги PA13 и PA14 для "более других" нужд, в частности – для управления драйвером E1.

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

Управляющая плата на STM32F401CCU6. От идеи до прототипа и обратно.

Сборка и результаты предварительного тестирования

Монтаж осуществлялся в лучших традициях DIY технологии.

Нижний подогрев на утюге (полукиловаттная нагревательная пластина 200x100 для "пайки светодиодных лент" с заявленной температурой в 250 градусов).

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

Сверху всё более прозаично – паяльный фен и пара паяльников.Управляющая плата на STM32F401CCU6. От идеи до прототипа и обратно.

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

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

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

Управляющая плата на STM32F401CCU6. От идеи до прототипа и обратно.

После сборки прошивки и проведении тестирования "на столе", без подключения к принтеру обнаружились следующие проблемы:

  1. Функцию SOFTWARE_DRIVER_ENABLE стоило бы назвать SOFTWARE_DRIVER_DISABLE, так как она позволяет программно включать и включать шаговые двигатели только при включенном аппаратном режиме enable. То есть для работы этой функции нога enable должна быть посажена на землю. В моем случае эта нога со стороны платы висит в воздухе, а на самом драйвере подтянута по питанию. На месте решается проброской перемычки с обратной стороны платы, в следующем варианте платы нужно расширить гребенку выбора режима до 4-х контактов
  2. Встроенный загрузчик с возможность прошивки по USB и UART не любит неопределённости. Висящая в воздухе нога PA10 (UART1 RX) может сбить его с толку и он перейдёт в режим прошивки по UART. Лечится замыканием ноги на землю временной перемычкой или постоянной подтяжкой ноги к земле резистором на 10K. Нормальной работе UART такая подтяжка не мешает.
  3. Теплоотвод на пузе MP1584EN предполагает пайку к теплоотводящей площадке, а у меня эта площадка закрыта маской. Ток небольшой, поэтому проблемой не является, но при желании можно счистить маску. В следующем варианте надо поправить используемый для MP1584EN footprint.
  4. У моей дельты (FLSUN Q5) странный блок питания, он уходит в защиту при замыкании сигнальной линии концевика на линию питания. Наличие/отсутствие подтяжки сигнальной линии на уход в защиту не влияет. С другими блоками питания такой проблемы не возникала. Лечится добавлением токоограничивающего резистора непосредственно на провод подключения датчика для автокалибровки. В следующем варианте платы нужно добавить такие резисторы непосредственно на плату и для всех концевиков.
  5. Поскольку часть элементов была скопирована с моего старого проекта шилда для STM32F407VE, то схему в подтяжки концевиков закралась ошибка, и подтяжка по питанию сделана к линии 3V3 вместо 5V. Ни на что не влияет, в том числе и на предыдущую проблему, при желании лечится перемычкой (опять-таки без какого-либо эффекта на предыдущую проблему). В следующем варианте платы подтяжка уже к 5V.
  6. С термопарой твориться какая-то неведомая фигня, точнее MAX6675 выдает правильные данные один раз из трёх. В остальных двух случаях в начале передачи данных проскакивает какой-то паразитный байт 0xFF, что приводит к некорректному определению температуры и аварийной остановке. Прежде, чем копать дальше, надо проверить поведение модуля MAX6675 на других платах.
  7. Код для работы с SPI EEPROM написан с ошибками и никогда никем не использовался. Исправленный и доработанный он позволяет читать данные и выполнять побайтовую запись, но вызывает сбой при массовой записи. Скорее всего, проблема с таймингами, но разбираться с этим буду позже.
  8. TFT экран (MKS TS35) плохо влияет на работу SD карты, возникают ошибки чтения SD карты, опустошение буфера и запоротая печать. Так же есть ложные срабатывания сенсорного экрана. Главный подозреваемый – длинные неэкранированные провода EXP1/EXP2, но разбираться в ними времени пока нет.SD карта идеально стабильна при использовании любого другого экрана, а TFT экран я буду тестировать в паре с USB флешкой, ей на SPI шину глубоко фиолетово.
  9. OLED экраны с шиной I2C застревают на стартовом экране. Прошивка продолжает работать, но картинка не обновляется. При отключении стартового экрана главный экран и меню отображаются корректно, подозреваю, что проблема сидит в интерфейсной функции I2C моей "любимой" библиотеки U8GLIB, но разбираться с ней буду в последнюю очередь.

Обратная сторона после внесения исправлений и активации I2C шиныУправляющая плата на STM32F401CCU6. От идеи до прототипа и обратно.

Момент истины

Первая тестовая печать была без аппаратных модификаций и исправлений с использованием комплектных TMC2208 драйверов в standalone режиме. Печатал с SD карты с экраном MKS_MINI_12864. Калибровочная звёздочка отпечаталась нормально, пятичасовая печать второй модели тоже проблем не вызвала.

Дальнейшие тесты уже были с I2C модификацией и работающем EEPROM. Поскольку на ногах PC14 и PC15 у чёрной таблетки находятся часовой резонатор и пара конденсаторов, то для проверки их влияния на шаговые двигатели были поменяны местами провода Z и E0. Любые неточности движения каретки Z у дельты тут же вылезут в виде кривой геометрии, что существенно проще обнаружить, чем неточности движения мотора экструдера. Сразу скажу, что никаких проблем резонатор с обвязкой не создали и ноги PC14/PC15 можно спокойно использовать для управления шаговыми двигателями.

В следующей конфигурации использовались TMC2209 с UART и без радиаторов (эти драйвера обычно не используются, радиаторы клеить не хотелось). Сенсорный TFT экран MKS TS35 и печать с USB флешки (той же SD карточки, но в миниатюрном картридере). Результат – болт.

Следующий вариант – те же TMC2209 с UART, экран MKS_MINI_12864 и печать с SD карты. Результат идеально соответствует предыдущему.

Управляющая плата на STM32F401CCU6. От идеи до прототипа и обратно.

Дефицит ресурсов и сегрегация

Вдумчивые читатели уже давно заметили некоторое несоответствие между набором установленной на плате периферии и количеством ног у черной таблетки.

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

  • 20 для драйверов шаговых двигателей – 5 x 4 (Step, Dir, Tx, Rx)
  • 3 для нагревателей
  • 3 для датчиков температуры
  • 4 для управляемых вентиляторов
  • 6 для концевиков
  • 1 для сервы / BLTouch
  • 1 для синего светодиода
  • 2 для USB
  • 2 для UART
  • 15 для EXP1/EXP2
  • 1 для SPI EEPROM CS
  • 1 для SPI Flash CS
  • 2 для SPI CS1/CS2

Итого получается 61 нога, что наглядно объясняет, почему на платы подобной функциональности ставят микроконтроллеры в стоногом Vx корпусе. У черной таблетки всего 34 ноги, которых чуть-чуть не хватает для выполнения поставленных задач. Но у STM32F4, как я уже писал выше есть четыре дополнительных таймера. Один из них и был использован для решения проблемы нехватки ног.

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

В привилегированном классе оказались

  • Dir и Step всех драйверов
  • нагреватели
  • термодатчики
  • USB
  • UART
  • SPI1
  • синий светодиод
  • два вентилятора
  • сервопривод
  • SPI Flash CS
  • SPI CS1/CS2

Для всех представителей привилегированного класса была выделена личная нога микроконтроллера.

Все остальные были признаны функциями второго класса и отправлены жить в тёмный подвал.

  • UART TX и RX всех драйверов
  • концевики
  • 12 ног EXP1/EXP2 (все, кроме аппаратного SPI)
  • 2 вентилятора
  • SPI EEPROM CS

В подвале их встретили 4 микросхемы сдвиговых регистров, две 74HC595 и две 74HC165 обеспечивающие, под неусыпным надзором мудрого таймера, ещё 32 дополнительных ноги, по 16 на ввод и на вывод.

Всю работу со сдвиговыми регистрами выполняют таймер, DMA контроллер и аппаратный SPI, частота обновления данных – 480КГц для F401 и 570КГц для F411.

Управляющая плата на STM32F401CCU6. От идеи до прототипа и обратно.

Хозяйке на заметку: На оригинальной STM32F103C8T6 (с 128 КБ флеша, куплена 6 лет назад) можно использовать тот же метод работы со сдвиговыми регистрами. В Marlin это тащить уже нет смысла, а для других проектов вполне можно использовать.

Промежуточные результаты и орг. выводы

  • Использую минималистичную чёрную таблетку и копеечные сдвиговые регистры получилось сделать плату сравнимую по функционалу с MKS Robin Nano V3.1
  • Прототип получился достаточно функциональным и позволяет печатать без аппаратных доработок для standalone драйверов и с минимальными доработками для SPI/UART управляемых драйверов.
  • Математика дельты и цветной TFT интерфейс в 256КБ помещаются плохо, для такой конфигурации стоит брать микроконтроллер с 512 КБ флеша.
  • Поддержка сдвиговых регистров в сам Marlin добавляется довольно просто, т.к. ввод и вывод хорошо абстрагированы для использования на разных платформах. А вот со сторонними библиотеками приходится повозиться, в некоторых особо запущенных случаях номер ноги хранится в одном байте.
  • Программная часть еще далека от завершения, нужно разобраться с выявленными проблемами и перенести все изменения на свежий Marlin, т.к. сейчас я работаю с кодом 4-х месячной давности.

Вместо послесловия

Работа еще не закончена, поэтому схему и код пока не публикую.

Хочу попробовать сделать lite версию, без кастомизации и без поддержки SPI для TMC, но в два слоя. Шансы на успех – 50% или получится или нет.

Все обязательные SMD компоненты расположены на верхней стороне платы, но возможность автоматического монтажа пока под вопросом – KiCAD ругается на слишком плотное расположение элементов (границы пересекаются, но между контактными площадками достаточное расстояние.). Для ручной пайки это не проблема, а как с этим справится робот непонятно.

Подпишитесь на автора

Подпишитесь на автора, если вам нравятся его публикации. Тогда вы будете получать уведомления о его новых статьях.

Отписаться от уведомлений вы всегда сможете в профиле автора.

55
Комментарии к статье
Кремень КБ1 Реклама
Кремень КМ1 Реклама