RepRapFirmware + RURAMPS4D + LCD12864 (FullGraphic)
Предисловие.
В процессе разработки новой управляющей платы для 3d принтера контроллером STM32F4 естественно встал вопрос, какую же прошивку использовать. Изначально в качестве основной прошивки был выбран Marlin 2.0: прошивка довольно популярна, ведутся работы по добавлению поддержки STM32F4, да и неплохо себя показала на связке Due + RuRamps4D. Но на разрабатываемой плате я хотел поддержки дополнительного функционала: работа c SD картой по интерфейсу SDIO вместо SPI, работа с wifi, в том числе и передача данных не по UART, а про более быстрому SPI интерфейсу (вместе с SDIO это даст возможность быстрой записи файлов на SD карту по WiFi, а не как сейчас – 20Мб файлик заливается почти час), поддержка Ethernet, USB флэшек и еще всякого по мелочи. Пообщавшись с разработчиками, и поковыряв код Marlina, понял что работы тут предстоит очень много , и сам я все не потяну. Начал смотреть альтернативу: для начала рассматривал SmoothieWare – там уже есть порт для STM и реализована часть нужного мне функционала, но как то не часто у ребят выходят коммиты, разработка вяленько выглядит. Осталась RepRapFirmware (RRF), прошивка, используемая на платах Duet3D. Широкого распространения она не получила видимо из-за отсутствия поддержки 8-битных плат, и ограниченного набора поддерживаемых 32-битных. С момента последнего знакомства с этой прошивкой, вышла уже вторая версия, в которой используется FreeRTOS. В ней реализованы все мои хотелки, и даже больше (например работа по CAN шине). Единственно прошивка написана для контроллеров ATSAM, но просмотрев код, пообщавшись с товарищем который занимался портированием данной прошивки на LPC, и отыскав программера, который обещал помощь, понял что данная задача в общем то под силу.
Итак, что же отличает данную прошивку от других:
- Прошивка изначально писалась и оптимизировалась для 32 битных контроллеров.
- Используется FPU на контроллерах Cortex-M4/M7.
- Используется свой алгоритм перемещения, с генерацией импульсов шага с «правильными интервалами» (не в приближении Брезенхэма) на всех фазах движения. Некоторые пользователи сообщают, что это обеспечивает более высокое качество печати и более тихий звук.
- Особые алгоритмы движения для дельта принтера, не использующие апроксимацию, плюс говорят реализована лучшая калибровка у дельта принтеров.
- С помощью G-code можно менять ВСЕ (почти) настройки принтера, включая кинематику, используемые термодатчики, концевики и т.д. По сути прошивка заливается под определенную плату, а дальше все параметры настраиваются без перезаливки.
- Конфигурация хранится в файлах на SD карте.
- Апгрейд прошивки производится записью бинарника на карту, и вводом соответсвующей команды на принтере.
- Поддержка WiFi, Ethernet и хороший web интерфейс.
- Программная поддержка до 4-х зон для нагреваемой платформы.
Единственное что меня смущало, это поддержка экранов. У Duet3D есть свой TFT дисплей, который работает с данной прошивкой, и все. Причем интерфейс экрана мне не понравился, для тыканья пальцем все было мелковато. Частично проблему решила альтернативная прошивка для MKS TFT, хотя бы покупать экран не нужно было, но интерфейс остался тот же самый.
И вот недавно в RRF добавили поддержку LCD 12864 (Он же FullGraphic), да не просто добавили, а сделали возможность очень просто создавать свое меню с высокой степенью кастомизации. Ну естественно я захотел срочно все это попробовать на RuRamps4D.
Теперь собственно речь пойдет о том как я подружил RuRamps c RRF и RepRap FullGraphic, а так же о том как создавать/изменять свое меню.
Железо.
С подключением все оказалось не совсем просто. Дело в том что для работы с LCD12864 в RRF используется хардварный SPI, а у Marlin и всех остальных программный, поэтому SPI интерфейс на разъем EXP1 не выведен. Можно конечно было заморочиться, написать реализацию софтверного SPI и работать с дисплеем через нее, но мне проще паять чем кодить, поэтому я быстро спаял на макетке переходник.
Включил, но кроме мусора на экране ничего не увидел, снижение частоты SPI c 2Mhz до 50KHz улучшило ситуацию, но полностью не решило. Почитал мануалы на ST7920, пообщался с разработчиком RRF, оказалось не все так просто. При работе SPI на низких частотах 3.3В идущих с контроллера Due вполне хватало, а на высоких дисплею уже надо минимум 4.5В. Кроме этого желательно чтобы при неактивном сигнале CS идущем на дисплей, по MOSI на него ничего не приходило, а так как SPI используется для SD карты, то там сигналов хватало. Поэтому в переходник была добавлена микросхема «4 элемента 2И», и схема получилась следующая.
Микросхема решает сразу обе проблемы: логический уровень сигналов на выходе получаем 5В, При CS=0 на выходы MOSI и SCK так же прижаты к «нулю».
Запустил… но немного мусора на экран все же выкидывалось при старте платы.
Вооружился осцилографом, стал смотреть что происходит при старте платы, оказалось что на лини CS после включения устанавливается логическая единица, т.е. дисплей при появлении строба SCK принимает данные c линии MOSI ему не предназначенные. А при старте как раз обращение к SD карте для считывания конфигурации и на экран накидывается «мусор», и только потом CS дисплея устанавливается в неактивное состояние. Ну, тут решение было простым, просто добавить pulldown резистор. Финальная схема переходника получилась такая.
Программная часть.
Про небольшой допил прошивки для работы с RuRamps4D сейчас писать не буду, как-нибудь потом. Перейду сразу к описанию возможностей конструктора меню дисплея.
Меню конфигурируется так же как и все остальное в текстовых файлах, которые надо выложить на SD карту в папку /menu. Каждый экран меню описывается в отдельном файле. Немного порывшись в интернете, нашел пару готовых меню для RRF.
Вот как это выглядит.
Теперь подробнее про конструктор меню.
Для создания меню используется следующий набор команд:
Примеры:
text R26 C22 F0 T'E0'
отображает просто текст «Е0» с координатами (26,22) шрифтом номер «0»
button R0 C0 F0 V5 T' PREHEAT ' A'heat'
отображает текстовую кнопку с надписью PREHEAT c координатами 0,0 (левый верхний угол), шрифтом номер «0», при выборе пункта меню, происходит переход в подменю, которое необходимо описать в файле heat.
button V2 T' PAUSE ' A'M25'
отображает текстовую кнопку с надписью PAUSE при выборе пункта меню, происходит выполнение gcode команды M25.
image R11 C0 L'hline.img'
отображает картинку с координатами 11,0 (первая координата это строка, вторая столбец) из файла hline.img (в данном случае это просто линия)
value N0 W20
отображает параметр N0, в данном случае это температура хотенда 0, под вывод параметра выделяется область шириной 20 пикселей (W20)
alter C45 N100 W20 D2
отображает устанавливаемое значение параметра N100, в данном случае установка температуры для хотенда 0, начиная с пикселя 45 по ширине экрана, под значение выделено 20 пикселей
Теперь для понимания команд распишем назначение параметров
R – номер строки, верхнего края элемента, R0 верхняя строка дисплея
С – номер столбца левого края элемента - С0 крайний левый столбец
A – действие. Действие для параметра A может быть следующим:
A Gcode (должен начинаться с букв G, M, T), например M32.
F – Размер шрифта (на данный момент в прошивке доступно только два: ‘0’ шрифт 7х11 ‘1’ шрифт 11х14, но в своей сборке я добавил еще один '2' шрифт 6х6.
D – указывает сколько знаков после запятой необходимо выводить
H - привязка текста по горизонтали: 0 - слева, 1- по центру, 2- справа
T – просто текст
L – имя файла меню или картинки
V – параметр используется с командой “button” и служит для определения «видимости» кнопки
V0 всегда отображать;
V2 отображать когда принтер в печатает;
V3 отображать когда принтер НЕ выполняет печать;
V4 отображать во всех режимах задания печати, включая паузу и возобновление печати;
V5 отображать только если принтер не печатет;
V10 отображать когда SD карта вставлена;
V11 отображать когда SD карта извлечена;
V20 отображать при ошибке нагрева хотенда;
V28 отображать при ошибке нагрева стола.
N – применяется с командами “value” и “alter” для отображения/изменения различных параметров принтера.
000 – 078 отображает температуру указанного хотенда N0 - для хотенда '0';
079 - отображает температуру текущего хотенда;
080 - 089 - отображает температуру нагреваемой платформы. N80 - платформа '0';
090 - 099 - отображает температуру термокамеры;
100 - 178 - задает температуру для хотенда, N100 - хотенд '0';
179 - задает температуру текущего хотенда;
180 - 189 - задает температуру для нагревательной платформы
190 - 199 - задает температуру для термокамеры;
200 - 278 - задает температуры ожидания для хотенда;
279 - задает температуру ожидания для текущего хотенда;
280 - 289 - задает температуру ожидания нагреваемой платформы;290 - 299 - задает температуру ожидания для термокамеры;
300 - 389 - задает 'скорость' вращения вентилятора в процентах;
399 - задает скорость текущего вентилятора;
400 - 499 - задает коэффициент экструзии;
500 - задает коэффициент скорости печати;
501 - вывод текста, заданного командой M117;
510 -518 - выводит текущие координаты;
520 - выводит номер текущего хотенда;
521 - Z babu-step оффсет;
530 - 533 - IP адрес.
На данный момент это все параметры, но автор прошивки их постепенно добавляет.
Тут я добавил немного картинок в меню:
Далее кратенько о том как загрузить прошивку и настроить принтер.
Загрузка прошивки и настройка принтера.
В первый раз прошивка загружается с помощью программы bossa, для загрузки Arduino Due необходимо подключить к Native Port. Перед загрузкой обязательно стереть FLASH - нажать Erase, потом Reset. Erase удерживайте пока не отожмете Reset.
Пред загрузкой в программе bossa необходимо установить галочки 'Erase all' и 'Boot to flash'.
Далее необходимо подготовить конфигурацию принтера, проще всего это сделать в online конфигураторе
https://configurator.reprapfirmware.org/Start
в результате конфигуратор сгенерирует нам набор файлов, который надо сохранить в папке /sys на SD карте
так же на карте необходимо создать еще папки:
/gcode - тут будут размещаться файлы моделей
/macros - папка для размещения макросов
/menu - папка файлов меню LCD экрана
Полный список gcode команд RRF тут https://duet3d.dozuki.com/Wiki/Gcode
Если есть желающие испытать прошивку, обращайтесь, поделюсь опытом. Но данный момент я портирую ее под STM32 и заодно скоро добавлю библиотеку работы с TMC2130 по SPI.
На этом пока все.
Еще больше интересных статей
Изменения в следующей версии 3D-принтер PonyBot
Подпишитесь на автора
Подпишитесь на автора, если вам нравятся его публикации. Тогда вы будете получать уведомления о его новых статьях.
Отписаться от уведомлений вы всегда сможете в профиле автора.
•Порт...
Скорость, температура и перевод RAMPS 1.5 на 24В
Подпишитесь на автора
Подпишитесь на автора, если вам нравятся его публикации. Тогда вы будете получать уведомления о его новых статьях.
Отписаться от уведомлений вы всегда сможете в профиле автора.
350х350х500. Чертежи и модели.
Подпишитесь на автора
Подпишитесь на автора, если вам нравятся его публикации. Тогда вы будете получать уведомления о его новых статьях.
Отписаться от уведомлений вы всегда сможете в профиле автора.
Комментарии и вопросы
Извините, а не могли бы вы мне...
Да : ) Выщелкнул! Спасибо, не....
Разве вот эта прорезиненная го...
А получилось вот чтоПриветству...
Добрый день! Возникла проблема...
Здравствуйте, при работе столк...
Хотел спросить, будет ли интер...