Marlin 2.0.6.1. Эволюция подключения экранов и интерфейсов пользователя.

X-Dron
Идет загрузка
Загрузка
07.09.2020
4132
22
Техничка

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

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

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

10

Способы подключения интерфейса пользователя к 3D-принтерам на основе Marlin 2.0.6.

1. RepRap Arduino Mega Pololu Shield (RAMPS)

Прямое подключение LED 12864-экранов.

Самый древний из способов. Шина состоит из 16-ти управляемых непосредственно с Arduino Mega GPIO и питания. В настоящее время данный способ не используется. 

Интерфейс пользователя всем давно знаком

2. RepRap Full Graphic Smart Controller

(https://reprap.org/wiki/RepRapDiscount_Full_Graphic_Smart_Controller#Description)

Подключение LED 12864-экранов по SPI -интерфейсу к материнской плате 3D-принтера. Часто китайцы называют этот способ RAMPS, но это неправильно. В RAMPS см. выше.

Для работы необходимо, чтобы LED 12864 поддерживал работу по SPI, например, используя ST7920 контроллер.

Данные передаются по трем пинам SPI-интерфейса, высвободив 13 GPIO. Помимо LED-экрана на модуль выводятся так же энкодер управления, зуммер («пищалка») и SD-карта.

На плате выглядят как два 10-пиновых разъема типа DC10P.

Классический RepRap Full Graphic Smart Controller имеет след. разводку разъемов.

VCC, GND- питание

LCDE(SID), LCDRS(CS), LCD4(SCLK) – огрызок SPI-интерфейса для LED 12864.

LCD5, LCD6, LCD7, KILL – по-умолчанию, не используются. Разработчики могут задействовать для своего функционала, например NeoNeoPixel LED.

BTN_ENC, BTN_EN1, BTN_E2 – подключение энкодера.

Beeper – «пищалка».

MISO, SCK, MOSI, SD_CSEL, SD_DET – интерфейс работы с SD-картой по второму SPI.

RESET - кнопка сброса.

Подключение RepRap Full Graphic Smart Controller может быть реализовано на RAMPS с помощью переходника.

Интерфейс пользователя не кардинально не отличался от RAMPS.

3. UART

Все взаимодействие с пользователем вынесено на внешнее устройство. Процессор даже не знает, что у него есть графический интерфейс, SD-карта, Wifi, энкодер и «пищалка». Часто даже концевые выключатели переносятся на внешнее устройство. В качестве такого устройства может выступать RaspberryPi (OrangePi) или Smart TFT-дисплей. Примером такого Smart-дисплея является JZ-TSxx, BTT TFT35 V3.0 в графическом режиме.

Это основной способ подключения TFT-дисплеев к материнским платам на 8-битном процессоре. С него снимаются все функции обработки пользовательского интерфейса, но накладываются серьезные требования в работе UART, его скорости и устойчивости работы при постоянном потоке данных. Данный способ будет хорошо работать на скоростях UART 230400, 250000 с относительно небольшими размерами буферов команд и принимаемых по UART данных (MAX_CMD_SIZE, RX_BUFFER_SIZE). Однако, некоторые платы/CPU по непонятным причинам не могут устойчиво работать на таких скоростях, максимум 115200. Тогда для организации стабильного потока команд используется максимальное увеличение буферов, контроль переполнения буфера SERIAL_XON_XOFF и ADVANCED_OK. Последние должны поддерживаться со стороны Smart TFT-дисплея. В Octoprint для RaspberryPi (OrangePi) их поддержка реализована.

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

Интерфейс пользователя может быть любым, зависит от фантазии разработчика.

4. FSMC_GRAPHICAL_TFT

У материнских плат для 3D-принтеров плат на основе STM32 для подключения дисплея предусмотрен специальный интерфейс и называется он FSMC, его также называют контроллером внешней памяти. Смысл работы FSMC заключается в следующем, при подключении по FSMC дисплея или внешней памяти, мы можем обращаться к регистрам подключённого устройства, как будто они находятся в памяти микроконтроллера. Нам не надо дёргать за ножки и отсчитывать временные интервалы, обо всём позаботиться интерфейс.

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

Разъем интерфейса может выглядеть следующим образом. В шлейф так же могут включены линии для контроля Touch-панели (SPI).

Marlin и CPU материнской платы сами занимаются отрисовкой интерфейса пользователя.

Начиная с Marlin 2.0.6.1 на FSMC TFT-экране можно включить 3 разных интерфейса пользователя.

• #define FSMC_GRAPHICAL_TFT - Upscaled 128x64 Marlin UI

Долгое время был основным интерфейсом пользователя для FSMC TFT-экранов. Кнопки на экране заменяют управление через энкодер. 

• #define TFT_LVGL_UI_FSMC – графический интерфейс от MKS.

Интерфейс пользователя появился только Marlin 2.0.6. основан на библиотеке LVGL . Занимает много места в оперативной памяти, требует установки дополнительной SPI Flash-памяти для хранения графических элементов. MKS разрабатывала данный графический интерфейс  для плат Robin Nano 1.1, 1.2. 

• #define TFT_320x240 (#define TFT_480x320) - Цветной Marlin UI для сенсорных TFT-экранов со стандартной системой меню

Интерфейс пользователя появился только Marlin 2.0.6.1.

Программисты считают FSMC_GRAPHICAL_TFT наименее глючным способом подключения экранов с графическим интерфейсом пользователя.

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

5. SPI_GRAPHICAL_TFT

В Marlin появился начиная с версии 2.0.6.1. Основная идея та же что у RepRap Full Graphic Smart Controller – уход от параллельной шины, требующей большое количество GPIO, на шину SPI.

Физическое подключение – все те же два 10-ти пиновых разъема как у RepRap Full Graphic Smart Controller. Теоретически имеется полная совместимость, и на любую плату вместо LCD 12864 можно попробовать установить графический TFT экран с SPI-интерфейсом. Лишь бы памяти хватило.

В исполнении платы MKS Robin Nano 2.0 и экрана MKS TS35 v2.0 разъемы имеют следующую разводку.

VCC,+3V3, GND- питание

LCD_EN(FSMC_LIGHT|DP13) – TFT_BACKLIGHT_PIN управление подсветкой экрана

LCD_RS(FSMC_RST|PC6) – TFT_RST_PIN -ресет экрана,

LCD_D4(SPI2_NSS|PE14) - TOUCH_CS_PIN – выбор сенсора,

LCD_D5(LCD_D5|PE15) – в режиме SPI_GRAPHICAL_TFT не используется,

LCD_D6(LCD_D6|PD11) - TFT_CS_PIN – выбор экрана,

LCD_D7(LCD_D7|PD10) - TFT_DC_PIN,

BTN_ENC(PE13), BTN_EN1(PE8), BTN_E2(PE11) – подключение энкодера,

Beeper – «пищалка»,

SPI1_MISO(PA6) - TOUCH_MISO_PIN, TFT_MISO_PIN,

SPI1_SCK1(PA5) - TOUCH_SCK_PIN, TFT_SCK_PIN, 

SPI1_MOSI(PA7) - TOUCH_MOSI_PIN, TFT_MOSI_PIN,

SPI1_CS(PE10) - в режиме SPI_GRAPHICAL_TFT не используется,

SPI1_RS(PE12)- не используется.

RESET - кнопка сброса.

На SPI_GRAPHICAL_TFT экране так же можно включить 3 разных интерфейса пользователя.

• #define SPI_GRAPHICAL_TFT - Upscaled 128x64 Marlin UI

• #define TFT_320x240_SPI (#define TFT_480x320_SPI) - Цветной Marlin UI со стандартной системой меню

• #define TFT_LVGL_UI_SPI - графический интерфейс от MKS.

Подключение SPI_GRAPHICAL_TFT самое молодое и наименее изученное. Но мне кажется, что его будут доводить до основного способа подключения TFT-экранов к платам управления 3D-принтеров и бюджетных ЧПУ.

PS.

Про MKS Robin Nano 2.0 и экрана MKS TS35 v2.0  есть предварительный обзор типа "диванной аналитики". плата с экраном недавно покинула таможню и находится в пути.

Предварительно: полностью совместимы по посадочным отверстиям с предыдущими RobinNano, но есть UART/SPI по всем осям, Sensorless одной перемычкой, гребенка с различными напряжениями питания для периферии, SPI-подключение TFT-экрана.   

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

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

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

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

Комментарии

07.09.2020 в 17:35
0

Хороший обзор. В ближайшее время попробую в Марлин ещё свой вариант панели добавить. Сама панель работает нормально давно, но в последнее время разбирался с работой SD карты на STM32F411. Проблема оказалась в HAL SPI для STM32 и некоторых других архитектур, что приводило к аппаратным сбоям. Закинул им пул-реквест, но его не приняли, проблема осталась. Причём её нет у AVR, DUE, LPC и STM32F1.

07.09.2020 в 19:54
0

просто интересуюсь  , в марлин 2.0.6.1  глюков много завезли ?

07.09.2020 в 20:38
0

В новых фичах встречаются. Говорят, вызов babystepping на графическом iu Marlin, вызывает перезапуск прошивки. 

07.09.2020 в 21:44
3

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


на любую плату вместо LCD 12864 можно попробовать установить графический TFT экран с SPI-интерфейсом. Лишь бы памяти хватило.

Ни в коем случае не на любую и дело тут не в памяти.

Первоначальная реализация (FSMC_GRAPHICAL_TFT) и фирменный интерфейс MKS используют синхронный блокирующий вывод на экран, во время которого основной цикл Marlin останавливается. Контроль температуры и выдача импульсов на шаговые двигатели выполняются, но все остальное (например чтение SD карты или прием данных с COM порта) - уже нет. Интенсивное использование меню в процессе печати приводит к опустошению буфера команд и снижению скорости печати (автоматически, при заполненности буфера менее 50%). В особо запущеных случаях команды в буфере могут закончится совсем.


Цветная реализация классического интерфейса разделена на 2 части - одна часть рисует интерфейс с использованием графический примитивов, вторая - отрисовывает картинку на экран. Это позволило во первых разделить внешний вид интерфейса (320х240 или 480x320) и физическое взаимодействие с экраном (FSMC или SPI), а во вторых сделать отрисовку картинки неблокирующей основной цикл - вывод данных на экран осуществляется в фоновом режиме с использованием DMA.


Соответственно обязательными требованиями к плате для возможности подключения SPI экрана являются наличие аппаратного SPI в разъемах EXP1/EXP2 и поддержка DMА.
Все Arduino-совместимые платы сразу отпадают по причине отсутствия DMA.


Забыл добавить, SPI экран требует выделенный SPI интерфейс, максимум, что на него можно еще повесить, это контроллер сенсорного экрана.
SD карту надо подключать или к другому SPI или к SDIO. Причина в фоновом выводе - когда Marlin захочет что-то прочитать с SD карты или термопары SPI интерфейс может быть занят отрисовкой картинки через DMA.

jmz
07.09.2020 в 22:16
0

Спасибо за дополнения и критику. 

07.09.2020 в 22:33
2

Я несколько запутался в реализациях и смешал в кучу SPI_GRAPHICAL_TFT и TFT_320x240_SPI/TFT_480x320_SPI.


Дело в том, что макрос SPI_GRAPHICAL_TFT использовался в ранних версиях цветного интерфейса для SPI экранов, но но релиза не дожил.
Все написанное выше относится к цветному классическому интерфейсу для SPI экранов - параметры TFT_320x0240_SPI и TFT_480x320_SPI, реализация для нового HAL STM32 (библиотеки CubeMX)


Монохромный 128x64 для SPI экранов (SPI_GRAPHICAL_TFT), а так же все варианты для HAL STM32F1 (библиотеки mapple) и LPC1768 используют блокирующий вывод. Это с одной стороны, позволяет использовать одну SPI шину для всех устройств, с другой стороны очень сильно тормозит процесс печати.
Активное использование меню при блокирующем выводе по параллельной 16-ти битной шине заметно подтормаживает печать, то же самое на последовательной шине может оказаться фатальным.

jmz
07.09.2020 в 22:57
0

вообще по хорошему лучше б они намутили вариант с внешним контроллером интерфейса (как куча популярных с алишки), но не по UART, а по SPI. плюс возможностью исполнять некоторые команды мимо очереди

07.09.2020 в 23:51
0

"Они" - это кто? Код открыт для всех желающих, каждый добавляет тот функционал, который ему нравится.

jmz
07.09.2020 в 23:58
0

Они это те кто могут и хотят. Я могу но мотивации нет

08.09.2020 в 10:49
1

Уже "намучено" - в первом сообщении. Панель с картой на одном аппаратном SPI. Никаких проблем.

jmz
08.09.2020 в 10:56
0

каждый добавляет тот функционал, который ему нравится.

Для себя добавить может и сможет, а включить в сам Марлин может и нет - не примут изменения и всё.

09.09.2020 в 07:20
0

У jmz вон приняли же)

07.09.2020 в 22:20
0

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

07.09.2020 в 22:40
0

Код в упомянутой статье не имеет никакого отношения к FSMC_GRAPHICAL_TFT.
Автор переписал реализацию китайского интерфейса, ныне известную как TFT_LVGL_UI_FSMC.

jmz
08.09.2020 в 00:12
0

точно, FSMC_GRAPHICAL_TFT - это уже чисто марлиновский экран, мне он как-то не нравится на сенсорном экране. TFT_LVGL_UI_FSMC все ж интереснее с иконками, пусть программисты и не считают его самым быстрым...

07.09.2020 в 22:50
1

вроде хорошо. но вот это как понимать? - "Часто даже концевые выключатели переносятся на внешнее устройство. В качестве такого устройства может выступать RaspberryPi (OrangePi) или Smart TFT-дисплей."

08.09.2020 в 00:01
0

Видимо машине уже не доверяют концевики))) Малинка/Апельсинка же только по уарту машину гоняют, к ней ничего от машины не подключается, кроме уарта, я так считал до этого, но не юзал.

08.09.2020 в 00:04
0

Ну, еще доверяют управление питанием принтера. Но пожалуй это в основном все

08.09.2020 в 00:16
0

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

08.09.2020 в 06:28
0

Ну с концевиками я похоже погорячился. Это не в марлине. Но датчики окончания филамента, питания, организацию подсветки рабочей области все выносят на octo. К сожалению возможности подкорректировать статью нет. Спасибо, что внимательно читаете. 😀

08.09.2020 в 08:14
0

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

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


08.09.2020 в 08:47
0

Связь по uart только малинами и апельсинами не ограничивается. Это частный случай. Есть смарт-экраны типа JZ-TS35, JZ-TS40. Они со своими прошивками, с материнской общаются g-code-ми. На них куча разъёмов для подключения периферии. 

Для написания комментариев, пожалуйста, авторизуйтесь.

Читайте в блогах

Структурная печать: без стенок, заполнения, дна и крышки. И без расслоения.

MKS Robin Nano 2.0. Новый хит?

Дайджест №6

UlTi-Chimera. Некоторые итоги полугода эксплуатации.

Медицина и 3D печать | Новости Импринты | Стрим Вечерний аддитив 20 сентября

Подборка сегментных игрушек часть 3-я - Flyingbear Ghost 4S, Tornado 2