Управляющая плата на 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 вольта
- Выбор подтяжки сигнальной линии концевиков по питанию или к земле
- Установка опциональной защиты входов термисторов от высокого напряженияТребует распайки дополнительных элементов на нижней стороне платы
Базовая конфигурация работает сразу без пайки на тёмной стороне.
Экономия по-чёрному
Ног у чёрной таблетки кот наплакал, поэтому для драйверов шаговых двигателей был введен режим тотальной экономии. Линии 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 (всё ещё не является спонсором данной статьи, хотя уже могли бы и подсуетиться), в те благостные времена, когда они еще доставляли пустые платы в Россию и не брали денег за благородный чёрный цвет паяльной маски.
Сборка и результаты предварительного тестирования
Монтаж осуществлялся в лучших традициях DIY технологии.
Нижний подогрев на утюге (полукиловаттная нагревательная пластина 200x100 для "пайки светодиодных лент" с заявленной температурой в 250 градусов).
Палки, используемые в качестве регулятора температуры (DIY без палок не бывает), для пущей надежности и долговечности обмотанные лентой фум и каптоновым скотчем.
Сверху всё более прозаично – паяльный фен и пара паяльников.
В принципе можно было использовать строительный фен, но у него слишком широкая область обдува, а прототип собирался маленькими частями, т.к. не было уверенности, что всё сразу заработает.
Так же встречался мне интересный вариант пайки на сварочном аппарате для полипропиленовых труб, наличие регулятора температуры позволяет делать и предварительный прогрев и пайку без использования дополнительного фена или паяльника.
В собраном виде, даже при том, что по качеству пайку до KiCAD мне далеко, плата стала выглядеть не хуже своих старших собратьев.
После сборки прошивки и проведении тестирования "на столе", без подключения к принтеру обнаружились следующие проблемы:
- Функцию SOFTWARE_DRIVER_ENABLE стоило бы назвать SOFTWARE_DRIVER_DISABLE, так как она позволяет программно включать и включать шаговые двигатели только при включенном аппаратном режиме enable. То есть для работы этой функции нога enable должна быть посажена на землю. В моем случае эта нога со стороны платы висит в воздухе, а на самом драйвере подтянута по питанию. На месте решается проброской перемычки с обратной стороны платы, в следующем варианте платы нужно расширить гребенку выбора режима до 4-х контактов
- Встроенный загрузчик с возможность прошивки по USB и UART не любит неопределённости. Висящая в воздухе нога PA10 (UART1 RX) может сбить его с толку и он перейдёт в режим прошивки по UART. Лечится замыканием ноги на землю временной перемычкой или постоянной подтяжкой ноги к земле резистором на 10K. Нормальной работе UART такая подтяжка не мешает.
- Теплоотвод на пузе MP1584EN предполагает пайку к теплоотводящей площадке, а у меня эта площадка закрыта маской. Ток небольшой, поэтому проблемой не является, но при желании можно счистить маску. В следующем варианте надо поправить используемый для MP1584EN footprint.
- У моей дельты (FLSUN Q5) странный блок питания, он уходит в защиту при замыкании сигнальной линии концевика на линию питания. Наличие/отсутствие подтяжки сигнальной линии на уход в защиту не влияет. С другими блоками питания такой проблемы не возникала. Лечится добавлением токоограничивающего резистора непосредственно на провод подключения датчика для автокалибровки. В следующем варианте платы нужно добавить такие резисторы непосредственно на плату и для всех концевиков.
- Поскольку часть элементов была скопирована с моего старого проекта шилда для STM32F407VE, то схему в подтяжки концевиков закралась ошибка, и подтяжка по питанию сделана к линии 3V3 вместо 5V. Ни на что не влияет, в том числе и на предыдущую проблему, при желании лечится перемычкой (опять-таки без какого-либо эффекта на предыдущую проблему). В следующем варианте платы подтяжка уже к 5V.
- С термопарой твориться какая-то неведомая фигня, точнее MAX6675 выдает правильные данные один раз из трёх. В остальных двух случаях в начале передачи данных проскакивает какой-то паразитный байт 0xFF, что приводит к некорректному определению температуры и аварийной остановке. Прежде, чем копать дальше, надо проверить поведение модуля MAX6675 на других платах.
- Код для работы с SPI EEPROM написан с ошибками и никогда никем не использовался. Исправленный и доработанный он позволяет читать данные и выполнять побайтовую запись, но вызывает сбой при массовой записи. Скорее всего, проблема с таймингами, но разбираться с этим буду позже.
- TFT экран (MKS TS35) плохо влияет на работу SD карты, возникают ошибки чтения SD карты, опустошение буфера и запоротая печать. Так же есть ложные срабатывания сенсорного экрана. Главный подозреваемый – длинные неэкранированные провода EXP1/EXP2, но разбираться в ними времени пока нет.SD карта идеально стабильна при использовании любого другого экрана, а TFT экран я буду тестировать в паре с USB флешкой, ей на SPI шину глубоко фиолетово.
- OLED экраны с шиной I2C застревают на стартовом экране. Прошивка продолжает работать, но картинка не обновляется. При отключении стартового экрана главный экран и меню отображаются корректно, подозреваю, что проблема сидит в интерфейсной функции I2C моей "любимой" библиотеки U8GLIB, но разбираться с ней буду в последнюю очередь.
Обратная сторона после внесения исправлений и активации I2C шины
Момент истины
Первая тестовая печать была без аппаратных модификаций и исправлений с использованием комплектных 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 карты. Результат идеально соответствует предыдущему.
Дефицит ресурсов и сегрегация
Вдумчивые читатели уже давно заметили некоторое несоответствие между набором установленной на плате периферии и количеством ног у черной таблетки.
Чтобы развеять все сомнения произведем точный подсчет используемых ног.
- 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.
Хозяйке на заметку: На оригинальной STM32F103C8T6 (с 128 КБ флеша, куплена 6 лет назад) можно использовать тот же метод работы со сдвиговыми регистрами. В Marlin это тащить уже нет смысла, а для других проектов вполне можно использовать.
Промежуточные результаты и орг. выводы
- Использую минималистичную чёрную таблетку и копеечные сдвиговые регистры получилось сделать плату сравнимую по функционалу с MKS Robin Nano V3.1
- Прототип получился достаточно функциональным и позволяет печатать без аппаратных доработок для standalone драйверов и с минимальными доработками для SPI/UART управляемых драйверов.
- Математика дельты и цветной TFT интерфейс в 256КБ помещаются плохо, для такой конфигурации стоит брать микроконтроллер с 512 КБ флеша.
- Поддержка сдвиговых регистров в сам Marlin добавляется довольно просто, т.к. ввод и вывод хорошо абстрагированы для использования на разных платформах. А вот со сторонними библиотеками приходится повозиться, в некоторых особо запущенных случаях номер ноги хранится в одном байте.
- Программная часть еще далека от завершения, нужно разобраться с выявленными проблемами и перенести все изменения на свежий Marlin, т.к. сейчас я работаю с кодом 4-х месячной давности.
Вместо послесловия
Работа еще не закончена, поэтому схему и код пока не публикую.
Хочу попробовать сделать lite версию, без кастомизации и без поддержки SPI для TMC, но в два слоя. Шансы на успех – 50% или получится или нет.
Все обязательные SMD компоненты расположены на верхней стороне платы, но возможность автоматического монтажа пока под вопросом – KiCAD ругается на слишком плотное расположение элементов (границы пересекаются, но между контактными площадками достаточное расстояние.). Для ручной пайки это не проблема, а как с этим справится робот непонятно.
Еще больше интересных статей
Creality K1 - шестерни для печати мягкими филаментами
Подпишитесь на автора
Подпишитесь на автора, если вам нравятся его публикации. Тогда вы будете получать уведомления о его новых статьях.
Отписаться от уведомлений вы всегда сможете в профиле автора.
Мне очень понрав...
Переделка старичка FlyingBear P905 в Core XY
Подпишитесь на автора
Подпишитесь на автора, если вам нравятся его публикации. Тогда вы будете получать уведомления о его новых статьях.
Отписаться от уведомлений вы всегда сможете в профиле автора.
Краткая предыстория.
Полгода назад, друг отдал свой FlyingBe...
Настраиваем прошивку Marlin и заливаем её в 3D принтер
Подпишитесь на автора
Подпишитесь на автора, если вам нравятся его публикации. Тогда вы будете получать уведомления о его новых статьях.
Отписаться от уведомлений вы всегда сможете в профиле автора.
Комментарии и вопросы
Вроде после недавнего обновлен...
напомнить, откуда сами эти "мо...
Ответил в личку.
Здравствуйте подскажите пожалу...
Добрый день.Есть 3d-принтер cr...
Всем привет.Купил значит полно...
здравствуйте, недавно заказал...