Blue Pill & SSD1306, ну очень маленькие.., но 32 бит!

3dmaniack
Идет загрузка
Загрузка
20.11.2018
89340
289
Техничка

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

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

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

235
Добрый день.

Решил я тут попробовать перейти с 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-карты, собственно сама плата, линейки коннекторов, транзисторы, конденсаторы, резисторы. Всё по схеме проекта.
Blue Pill & SSD1306, ну очень маленькие.., но 32 бит!
Blue Pill & SSD1306, ну очень маленькие.., но 32 бит!
Blue Pill & SSD1306, ну очень маленькие.., но 32 бит!
Blue Pill & SSD1306, ну очень маленькие.., но 32 бит!
Blue Pill & SSD1306, ну очень маленькие.., но 32 бит!
В итоге я получил ремонтно-пригодную 32-битную плату управления, с дисплеем, энкодером и картридером, примерно за 10$ за весь комплект, с учетом всех радиодеталей (без учета драйверов).

Единственно, с компиляцией и программной частью было не все так гладко, но, спасибо за помощь уважаемому jmz, во многом помог разобраться.
1. Подготовка синей таблетки.
Подключаем таблетку к компьютеру кабелем USB, в компе тишина, 'ты-дын' не слышно, не определилась?! Ок идем дальше

Подключаем таблетку к программатору ST-Link V2 (см. распиновку!) там у таблетки четыре пина сбоку GND, SWDIO, SWCLK, +3.3V,
Blue Pill & SSD1306, ну очень маленькие.., но 32 бит!
ST-Link V2 подключаем к компьютеру, запускаем прошивальщик STM32 STlink, нажимаем коннект, не конектится?
Blue Pill & SSD1306, ну очень маленькие.., но 32 бит!
Blue Pill & SSD1306, ну очень маленькие.., но 32 бит!
Тогда нажимаем и удерживаем reset на таблетке, нажимаем коннект, отпускаем reset, снова ошибка?! Ок, значит в таблетке прошит бут для ардуино, либо защита, либо еще какая то засада.

Запускаем Arduino IDE, с установленной поддержкой плат 32-bits ARM Cortex-M3, при этом наша таблетка подключена через программатор ST-Link V2 к компьютеру.

Пакет 32-bits ARM Cortex-M3 в менеджере плат:
Blue Pill & SSD1306, ну очень маленькие.., но 32 бит!
Выбираем в ардуино нашу плату Generic STM32F103C series и выставляем следующие опции:
Blue Pill & SSD1306, ну очень маленькие.., но 32 бит!
Открываем пример скетча Blink,
Blue Pill & SSD1306, ну очень маленькие.., но 32 бит!
Выставим там мигание встроенного светодиода на пине PC13, чтобы при загрузке визуально определить прошилось или нет.
Blue Pill & SSD1306, ну очень маленькие.., но 32 бит!
Загружаем скетч в таблетку.

Загрузилось и замигало! Ок

Теперь таблетка будет определятся и в STM32 ST-LINK Utility. И мы сможем ее прошить прошивкой для принтера.
Blue Pill & SSD1306, ну очень маленькие.., но 32 бит!
В логе пишет, что типа у таблетки всего 64кб, но это не так, там 128кб.

Осталось установить драйвер.

Скачаем и распакуем Arduino_STM32_master. В каталоге: 'Arduino_STM32driverswin' будет bat-файл 'install_drivers.bat' который следует запустить с правами администратора, установятся драйвера.

Подключим таблетку кабелем Micro-USB к компьютеру и проверим, появилось ли устройство Maple Serial в диспетчере устройств.
Blue Pill & SSD1306, ну очень маленькие.., но 32 бит!
Таблетка готова.
2. Изготовление платы
Печатаем на лазерном принтере на специальной подложке изображение обеих сторон платы.

Далее ЛУТ утюгом на нижнюю сторону.
Blue Pill & SSD1306, ну очень маленькие.., но 32 бит!
Blue Pill & SSD1306, ну очень маленькие.., но 32 бит!
Подкрашиваем дефекты специальным маркером.

Травление в хлорном железе 2...3 часа, периодически помешивая.

Промывка платы в воде, промывка тонера ватным тампоном смоченным в ацетоне.

Далее ЛУТ зеркального изображения верхней стороны платы. Покрытие лаком верхней стороны для защиты тонера.

У себя я этот пункт пропустил.
Blue Pill & SSD1306, ну очень маленькие.., но 32 бит!
Далее долгое и муторное сверление отверстий разными сверлами, 0,8мм и 1,0мм (клемная колодка, мосфет).

Плата маленькая, но отверстий много..
3. Пайка платы
Blue Pill & SSD1306, ну очень маленькие.., но 32 бит!
Проверяем прозваниваем все соединения, промываем плату спиртом.

Устанавливаем компоненты.
Blue Pill & SSD1306, ну очень маленькие.., но 32 бит!
Резисторы для термисторов по схеме проекта один на 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
Blue Pill & SSD1306, ну очень маленькие.., но 32 бит!
Распаковываем архив прошивки.

Добавляем в 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
Blue Pill & SSD1306, ну очень маленькие.., но 32 бит!
Blue Pill & SSD1306, ну очень маленькие.., но 32 бит!
В configuration.h прописываем плату 1806, это плата MORPHEUS:
Blue Pill & SSD1306, ну очень маленькие.., но 32 бит!
Включаем SD-карту:
Blue Pill & SSD1306, ну очень маленькие.., но 32 бит!
Включаем поддержку энкодера:
Blue Pill & SSD1306, ну очень маленькие.., но 32 бит!
Включаем дисплей SSD1306:
Blue Pill & SSD1306, ну очень маленькие.., но 32 бит!
Конфигурируем тип кинематики, концевиков и пр. в зависимости от конфигурации принтера.

Конфиг готов, но для 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

Ну и вот наконец:

Компиляция

Нажимаем на иконку и ждем успешной компиляции
Blue Pill & SSD1306, ну очень маленькие.., но 32 бит!
В итоге должно получиться следующее:
Blue Pill & SSD1306, ну очень маленькие.., но 32 бит!
6. Прошивка
Прошивка .bin в таблетку stm32 через STM32 ST-Link Utility

Файл firmware.bin после компиляции сохраняется в папку Marlin-bugfix-2.0.x.pioenvsluepill.

Подключаем ST Link V2, запускаем STM32 ST-Link Utility.

Выбираем бинарный файл с нашей прошивкой firmware.bin:
Blue Pill & SSD1306, ну очень маленькие.., но 32 бит!
Сначала жмем коннект:
Blue Pill & SSD1306, ну очень маленькие.., но 32 бит!
Потом делаем очистку памяти:
Blue Pill & SSD1306, ну очень маленькие.., но 32 бит!
И нажимаем прошить:
Blue Pill & SSD1306, ну очень маленькие.., но 32 бит!
По окончании прошивки отключаем программатор:
Blue Pill & SSD1306, ну очень маленькие.., но 32 бит!
Отсоединяем 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
Blue Pill & SSD1306, ну очень маленькие.., но 32 бит!
Чтобы их программно задействовать, нужно:

в 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-картой. И количество выходов-пинов, их тоже получилось впритык, ни одного не осталось в запасе.
Blue Pill & SSD1306, ну очень маленькие.., но 32 бит!
На этом все.

В дальнейшем хочу переделать плату под штатные разъемы EXP1, EXP2, для подключения разных дисплеев, а также разъем USB-B.

Плату и схему под новый проект я уже нарисовал, но это уже будет в следующей статье.
Blue Pill & SSD1306, ну очень маленькие.., но 32 бит!

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

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

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

235
Комментарии к статье