Blue Pill & SSD1306, ну очень маленькие.., но 32 бит!
Решил я тут попробовать перейти с 8 бит на 32.
Готовые решения конечно есть, но я решил пойти сложным путем, и собрать свою плату управления.
Нашел в сети проект Morpheus-STM32. Проект этот на базе синей таблетки Blue Pill.
То есть на чипе STM32F103C8T6. То есть на чипе так написано, но на самом деле это STM32F103CBT6 которая например в ЧИП-ДИПе по 380руб. На Али в обвязке на плате стоит 125 руб (1,9$)!
Характеристики у него следующие:
Ядро ARM Cortex-M3
Частота ядра 72МГц
Flash-память 128 кБайт
RAM-память 20 кБайт
Количество входов/выходов 37
Также в наличии USART 3шт, I2C 2шт, SPI и пр.
Размер платы Morpheus-STM32 100х70мм.
Итак:
Перечень железа.
Blue Pill stm32f103c8t6, программатор ST Link V2, дисплей SSD1306, энкодер KY-040, модуль SD-карты, собственно сама плата, линейки коннекторов, транзисторы, конденсаторы, резисторы. Всё по схеме проекта. В итоге я получил ремонтно-пригодную 32-битную плату управления, с дисплеем, энкодером и картридером, примерно за 10$ за весь комплект, с учетом всех радиодеталей (без учета драйверов).
Единственно, с компиляцией и программной частью было не все так гладко, но, спасибо за помощь уважаемому jmz, во многом помог разобраться.
1. Подготовка синей таблетки.Подключаем таблетку к компьютеру кабелем USB, в компе тишина, 'ты-дын' не слышно, не определилась?! Ок идем дальше
Подключаем таблетку к программатору ST-Link V2 (см. распиновку!) там у таблетки четыре пина сбоку GND, SWDIO, SWCLK, +3.3V,ST-Link V2 подключаем к компьютеру, запускаем прошивальщик STM32 STlink, нажимаем коннект, не конектится?Тогда нажимаем и удерживаем reset на таблетке, нажимаем коннект, отпускаем reset, снова ошибка?! Ок, значит в таблетке прошит бут для ардуино, либо защита, либо еще какая то засада.
Запускаем Arduino IDE, с установленной поддержкой плат 32-bits ARM Cortex-M3, при этом наша таблетка подключена через программатор ST-Link V2 к компьютеру.
Пакет 32-bits ARM Cortex-M3 в менеджере плат:Выбираем в ардуино нашу плату Generic STM32F103C series и выставляем следующие опции:Открываем пример скетча Blink, Выставим там мигание встроенного светодиода на пине PC13, чтобы при загрузке визуально определить прошилось или нет.Загружаем скетч в таблетку.
Загрузилось и замигало! Ок
Теперь таблетка будет определятся и в STM32 ST-LINK Utility. И мы сможем ее прошить прошивкой для принтера.В логе пишет, что типа у таблетки всего 64кб, но это не так, там 128кб.
Осталось установить драйвер.
Скачаем и распакуем Arduino_STM32_master. В каталоге: 'Arduino_STM32driverswin' будет bat-файл 'install_drivers.bat' который следует запустить с правами администратора, установятся драйвера.
Подключим таблетку кабелем Micro-USB к компьютеру и проверим, появилось ли устройство Maple Serial в диспетчере устройств.Таблетка готова.
2. Изготовление платыПечатаем на лазерном принтере на специальной подложке изображение обеих сторон платы.
Далее ЛУТ утюгом на нижнюю сторону.Подкрашиваем дефекты специальным маркером.
Травление в хлорном железе 2...3 часа, периодически помешивая.
Промывка платы в воде, промывка тонера ватным тампоном смоченным в ацетоне.
Далее ЛУТ зеркального изображения верхней стороны платы. Покрытие лаком верхней стороны для защиты тонера.
У себя я этот пункт пропустил.Далее долгое и муторное сверление отверстий разными сверлами, 0,8мм и 1,0мм (клемная колодка, мосфет).
Плата маленькая, но отверстий много..
3. Пайка платыПроверяем прозваниваем все соединения, промываем плату спиртом.
Устанавливаем компоненты.Резисторы для термисторов по схеме проекта один на 1к второй на 4,7к, подтянуты к 3,3в. Не совсем правильные.
Для стандартных термисторов не подошли, температуру показывало не корректную, подобрал оба резистора на 5.1ком.
Полевые транзисторы у меня все три IRLB3034.
Дисплей подключается к SDA, SCL, 3,3V, GND.
SD-карта подключается к MOSI, MISO, SCK, SS, 3,3V, GND.
Плата в проекте под энкодер не разведена, поэтому подпаял коннектор 3пин сверху контроллера к пинам PC13, PC14, PC15.
Энкодер подключается к EN1(PC13), EN2(PC14), ENC(PC15). И GND.
4. Установка Visual Studio Code и PlatformioСкачиваем и устанавливаем VSC и поверх Platformio.
ИнструкцияДалее конфигурировать и компилировать будем в ней.
5. Конфигурация и компиляция прошивкиСкачиваем последнюю версию прошивки Marlin 2.0
bugfix-2.0.xРаспаковываем архив прошивки.
Добавляем в Marlinsrcpins
файл pins_MORPHEUS.h из проекта, если его там нет.
Добавляем в этот файл текст:
#define BTN_EN1 PC13
#define BTN_EN2 PC14
#define BTN_ENC PC15
#define SD_DETECT_PIN -1
#define KILL_PIN -1
В папке Marlin-bugfix-2.0.x заменяем
platformio.ini
ссылка на исправленный файлс поддержкой Blue Pill.
Открываем VSC
Добавляем проект, указав путь к содержимому папки Marlin-bugfix-2.0.xВ configuration.h прописываем плату 1806, это плата MORPHEUS:Включаем SD-карту:Включаем поддержку энкодера:Включаем дисплей SSD1306:Конфигурируем тип кинематики, концевиков и пр. в зависимости от конфигурации принтера.
Конфиг готов, но для STM32F103C8T6 для правильной компиляции необходимо выполнить еще кое что:
а) У STM32F103C8T6 два I2C контроллера
По умолчанию используется первый, пины PB6/PB7, а в проекте используется второй - PB10/PB11,
Какой именно будет использоваться, прописано в последней строке в файле Wire.cpp
C:Users\.platformiopackagesframework-arduinoststm32STM32F1librariesWire
там прописано 'TwoWire Wire(1);'
Для использования пинов PB10/PB11 как в проекте, нужно поменять на 'TwoWire Wire(2);'
б) Еще проблема с ШИМ на вентилятор, он не работал, а просто включался на 100%. Чтобы заработал ШИМ на вентилятор:
В файле Marlin-bugfix-2.0.xMarlinsrc/HALHAL_STM32F1HAL_timers_Stm32f1.h
нужно заменить заменить
#define TEMP_TIMER_NUM 2
на
#define TEMP_TIMER_NUM 3
в) Также не работали пины PB3, PB4, PA15, они в проекте в качестве выхода и управляют драйвером ШД. А не работают они потому, что пины PB3, PB4, PA15 по умолчанию заняты каналом JTAG, и поэтому JTAG необходимо отключить, чтобы можно было задействовать эти пины для управления драйвером ШД.
Для этого:
в файле board.cpp
C:UsersGame.platformiopackagesframework-arduinoststm32STM32F1variantsgeneric_stm32f103c
исправить #ifndef на #ifdef
в строке:
#ifndef CONFIG_MAPLE_MINI_NO_DISABLE_DEBUG
это будет вызывать функцию AFIO_DEBUG_NONE в файле gpio.h и отключит и JTAG (PB3, PB4, PA15) и SWDIO, SWCLK (боковые пины для прошивальщика). Можно оставить и так, но в дальнейшем, при коннекте с STM32 ST-Link Utility будет ошибка, в принципе законнектить можно, удерживая Reset на таблетке, но это не удобно.
Поэтому, чтобы оставить SW, исправим
в файле gpio.h
C:UsersGame.platformiopackagesframework-arduinoststm32STM32F1systemlibmaplestm32f1includeseries
заменить строку:
AFIO_DEBUG_NONE = AFIO_MAPR_SWJ_CFG_NO_JTAG_NO_SW
на:
AFIO_DEBUG_NONE = AFIO_MAPR_SWJ_CFG_NO_JTAG_SW
Возможно можно было по другому, но я нашел только такое решение.
г) Памяти 128кб для всех опций не хватит, поэтому
в Configuration_adv.h отключим поддержку некой G2/G3 Arc Support
закомментировав строку:
#define ARC_SUPPORT
если и этого будет мало, можно еще там же отключить и
#define FASTER_GCODE_PARSER
Ну и вот наконец:
Компиляция
Нажимаем на иконку и ждем успешной компиляцииВ итоге должно получиться следующее:
6. ПрошивкаПрошивка .bin в таблетку stm32 через STM32 ST-Link Utility
Файл firmware.bin после компиляции сохраняется в папку Marlin-bugfix-2.0.x.pioenvsluepill.
Подключаем ST Link V2, запускаем STM32 ST-Link Utility.
Выбираем бинарный файл с нашей прошивкой firmware.bin:Сначала жмем коннект:Потом делаем очистку памяти:И нажимаем прошить:По окончании прошивки отключаем программатор:Отсоединяем ST Link V2.
Плата с прошивкой готова.
Можно устанавливать в принтер и подключать.
7. Подключение MKS TFT или WiFi модуля NodeMCU по каналу RX/TX.Вместо отдельных, дисплея, энкодера и модуля SD, можно подключить один MKS_TFT, где все в одном. Он управляется по линии RX/TX. Таким образом освободятся много пинов контроллера Blue Pill. И, при отключении вывода на локальный дисплей в прошивке, освободится почти половина памяти контроллера.
Также, по RX/TX можно подключить популярный в народе WIFI-модуль ESP8266 (NodeMCU v3), для подключения принтера удаленно. Оставив при этом локальные дисплей, энкодер и модуль SD-карты.
Для подключения RX/TX можно освободить пару пинов для второго канала USART1,
так как в проекте используются отдельные линии Enable для Z, E, вот мы эти пины и освободим,
Z-Enable, E-Enable подключим на общую линию Enable PB8.
Z-DIR подключим к PB3.
И соответственно в pins_MORPHEUS.h перепишем так:
#define X_STEP_PIN PB7
#define X_DIR_PIN PB6
#define X_ENABLE_PIN PB8
#define Y_STEP_PIN PB5
#define Y_DIR_PIN PB4
#define Y_ENABLE_PIN PB8
#define Z_STEP_PIN PA15
#define Z_DIR_PIN PB3
#define Z_ENABLE_PIN PB8
#define E0_STEP_PIN PA8
#define E0_DIR_PIN PB15
#define E0_ENABLE_PIN PB8
Освободились пины PA9, PA10 это как раз UART1Чтобы их программно задействовать, нужно:
в Configuration.h:
для одного порта
изменить
#define SERIAL_PORT 0
на
#define SERIAL_PORT 1
но при этом, microUSB на таблетке работать уже не будет.
Для двух портов UART, к строке #define SERIAL_PORT 0
добавить еще строки
#define SERIAL_PORT_2 1
#define NUM_SERIAL 2
Но в случае использования всех опций, дисплей SSD1306, энкодер, SD-карта и два USART, памяти может не хватить.
Поэтому либо вариант MKS-TFT, и два USART.
Либо дисплей SSD1306, энкодер, SD-карта и один USART, который можно подключить к WiFi-модулю NodeMCU V3.
У модуля NodeMCU логика также на 3,3в, подключается напрямую, GND, +3.3V, RX к TX, TX к RX.
Прошивка ESP3D в модуль NodeMCU V3 ESP8266 описана например ]здесь.Дисплей MKS TFT подключать к RX/TX через делитель напряжения, но возможно будет работать и напрямую. В варианте подключения к MKS TFT, в прошивке дисплей SSD1306, SD карту и энкодер отключить, тогда освободится почти половина памяти.
Испытания прошли успешно. Новая 32-битная плата показала в работе хороший результат.
Дисплей не тупит, как на 8-битной плате. Отзывается на энкодер шустро.
Качество печати вроде бы немного улучшилось, на большой скорости.
Единственный минус в контроллере Bluе Pill это то, что память 128кб это маловато, у меня прошивка заняла 99% памяти в варианте с дисплеем SSD1306, энкодером и SD-картой. И количество выходов-пинов, их тоже получилось впритык, ни одного не осталось в запасе.На этом все.
В дальнейшем хочу переделать плату под штатные разъемы EXP1, EXP2, для подключения разных дисплеев, а также разъем USB-B.
Плату и схему под новый проект я уже нарисовал, но это уже будет в следующей статье.
Еще больше интересных статей
Klipper - восстановление прерванной печати
Подпишитесь на автора
Подпишитесь на автора, если вам нравятся его публикации. Тогда вы будете получать уведомления о его новых статьях.
Отписаться от уведомлений вы всегда сможете в профиле автора.
Внезапно выяснилось что у стокового клиппера есть странная особенно...
Как определить высоту слоя прерванной печати
Подпишитесь на автора
Подпишитесь на автора, если вам нравятся его публикации. Тогда вы будете получать уведомления о его новых статьях.
Отписаться от уведомлений вы всегда сможете в профиле автора.
Цветная печать двумя хотэндами с сервоприводом
Подпишитесь на автора
Подпишитесь на автора, если вам нравятся его публикации. Тогда вы будете получать уведомления о его новых статьях.
Отписаться от уведомлений вы всегда сможете в профиле автора.
Пару месяцев назад я решил, что мне жизненно необходимо научить свою...
Комментарии и вопросы
Код .plgx сгенерированный Poly...
если вы будете использовать то...
В общем RepRap надо использова...
Привет.Принтер долго стоял, се...
При автовыравнивании после 12...
Полиамид и полипропилен с 30%...
Неделю назад пришел с сопла 0....