Я как то уже писал о том как загрузить прошивку RepRapFirmware (RRF) на плату RuRamps4D и подключить дисплей FullGraphic. Прошивка эта очень интересная, но информации про нее на портале немного, поэтому я хочу восполнить этот момент.

Для начала я хочу сделать небольшой обзор об  некоторых особенностях, достоинствах и недостатках прошивки. Возможно я повторюсь в некоторых моментах, но последний пост писался давно, и неплохо было бы освежить память.
Начнем с достоинств.

Что же отличает данную прошивку например от Marlin, Repetier и других?

1. Прошивка собирается из исходного кода непосредственно под плату, а не под принтер. Все параметры принтера задаются в текстовом файле, размещенном на SD карте, как на smoothieware. Кроме того параметры принтера можно так же менять «на лету» Gcode командами, вплоть до смены типа кинематики. Это очень удобно при настройке самосборных принтеров.  Конфигурационные файлы можно редактировать непосредственно из web интерфейса.
2. В прошивке реализована работа с SD картой по высокоскоростному интерфейсу SDIO, а так же обмен данными с WIFI модулем ESP8266 по SPI, и все это работает через DMA (прямой доступ к памяти). Все это позволяет копировать файлы на SD карту принтера через WiFi на высокой скорости (1Мбайт/c).  
3. В прошивке уже реализован web сервер и написан  функциональный Web интерфейс, почти не уступающий интерфейсу OctoPrint () .
Приведу некоторые скриншоты web интерфейса RRF.
Основной экран интерфейса
PREVIEW
Консоль для работы с GCODE. Как видно, из консоли можно не только вводить команды, но и получать информацию о результате выполнения.
98d221c0785a6b5eba86f1c442ab789c.PNG
Экран мониторинга за печатью.
c9e16bab4fe6c1847cb19243b5f8b6c2.PNG
На данном скриншоте открыт для редактирования файл конфигурации принтера.
337f2b780c8b67ad3fefdcab4d796d40.PNG
4. Есть возможность удобного использования макросов, в которых описываются некие рутинные операции. Например загрузка/выгрузка филамента (кстати эти макросы вынесены в отдельную категорию, и можно сделать макрос для каждого из видов пластика), некие операции по тестированию принтера, подготовке к печати и прочие.
5. Действия принтера при паузе/возобновлении печати так же можно прописать в конфигурационных файлах так, как вам необходимо.
6. Прошивка имеет модульную структуру, что позволяет просто добавлять дополнительный функционал, например новые кинематические схемы.
7. Прошивка написана с использованием FreeRTOS, благодаря чему переключение между задачами управление принтером четко распределены по приоритетам и не мешают друг другу. Что позволяет повысить надежность работы принтера.
8. Кроме функции управления принтером, прошивка так же может управлять лазерным гравером, фрезером и 3D сканером.
9. Отдельное преимущество прошивка дает владельцам дельта принтеров. Перемещения эффектора не сегментированы (разбиты на мелкие сегменты) как в других прошивках. Кроме этого есть несколько интересных алгоритмов калибровки дельта принтера.
10. Работой с драйверами Trinamic конечно уже не удивишь, но у RRF есть «фича». У драйверов TMC2130, 2660, 5130 есть опция stalldetect, который используют для парковки без концевиков. Но в RRF можно выбрать каким образом реагировать на stalldetect и кроме sensorless парковки можно еще и определять пропуск шага, после чего перепарковать нужную ось, и возобновить печать.
11. Работа с инструментом. Командами прошивки можно гибко настраивать рабочий инструмент, привязывая к нему необходимые нагреватели термисторы и моторы.
12. Добавлена возможность считывания и обработки данных тахо сигнала с трехпроводных вентиляторов (можно получать скорость вращения вентилятора).
12. Обновление прошивки может осуществляться через веб интерфейс или через SD карту.
Далее хочу немного рассказать о конфигурационном файле прошивки. Во первых если принтер с более менее стандартной конфигурацией, то можно воспользоваться web конфигуратором https://configurator.reprapfirmware.org, если же у вас например используется несколько моторов для какой нибудь оси, или драйвера требуют настойки длительности степ импульсов то надо будет править созданный файл конфигурации.
Теперь приведу пример и разбор конфигурационного файла принтера.

M667 S1                        
В данном случае выбрана кинематика COREXY, если используется кинематика cartezan, то команда должна выглядеть так M667 S0
Для выбора кинематики дельта принтера используется команда M665.

Настройка драйверов
M569 P0 S1  D3                  
M569 P1 S1  D3                  
M569 P2 S0  T2.5:2.5:5:0                  
M569 P3 S0  T2.5:2.5:5:0
M569 P4 S1 R1                    
Для настройки используется команда M569 з различными параметрами, так в данном примере используются следующие параметры:
Pnn — этот параметр задает номер драйвера
Snn — может принимать значения 0 и 1, и задает направление вращения мотора
Enn — может принимать значения 0 и 1, и задает активный уровень сигнала Enable
Dnn — параметр используется для драйверов Trinamic и задает режимы их работы D2 — spreadCycle, D3 stealthChop
Taa:bb:cc:dd — задает минимальные значения длительности STEP импульса, интервала, между ними, а так же время установки и удержания DIR импульса. Так в примере для драйверов 2 и 3 для STEP импульсов задана минимальная ширина и интервал между импульсами равными 2,5us и 5us на установку DIR импульса.
Причем в отличие от Marlin, для каждого драйвера можно задавать свои временные интервалы.

M584 X0 Y1 Z2:3 E4  
Данной командой привязываем драйверы к осям, конкретно в данном примере морами оси  Z управляют два мотора

M350 X16 Y16 I1
M350 Z16 E16 I0
Данная команда задает значение микрошага для каждой из осей, параметр I1 включает интерполяцию микрошага.      

M92 X80 Y80 Z4000 E420   ; задаем значения шагов на мм
M566 X900 Y900 Z12 E120  ; задаем аналог Jerk (задается в мм/мин)
M203 X6000 Y6000 Z180 E1200    ; задается максимальная скорость (мм/мин)
M201 X500 Y20 Z250 E250  ; максимальные ускорения мм/c2
M906 X800 I30   ; тут задаем токи для драйверов и процент от максимального тока для удержания в процентах.

M208 X0 Y0 Z0 S1              
M208 X230 Y210 Z200 S0
тут все просто — задаются минимальные и максимальные значения для осей
Концевики
M574 Z2 S1                  
M574 X2 Y2 S3
Параметр S задает вариант срабатывания концевика:
S0 — срабатывает при низком уровне сигнала
S1 — срабатывает при высоком уровне сигнала
S2 — используется датчик ZProbe
S3 — используется режим  sensorless (для драйверов Trinamic)
Нагреватели
M305 P0 T100000 B4138 C0 R4700
M143 H0 S120                  
M305 P1 T100000 B4138 C0 R4700
M143 H1 S280
Параметры команды M305  
Pnn — номер нагревателя («0» — нагреватель стола)              
T100000 — обозначает что при 25С термистор имеет сопротивление 100кОм
R4700 — обозначает что термистор относится к серии 4,7кОм
B4138 — бета коэффициент термистора
Вообще у команды M305 намного больше параметров, но рассмотрение их всех требует отдельной статьи.
С командой M143 все просто, она задает максимальную температуру для нагревателя.
Вентиляторы
M106 P0 S1 I0 F500 H-1
M106 P1 S1 I0 F500 H1 T45
В данном примере вентилятор 0 настроен на обдув модели, вентилятор 1 на охлаждение радиатора первого нагревателя, с автостартом при температуре 45С. Причем вентилятор может использоваться для нескольких нагревателей, тогда комада буде записана так M106 P1 S1 I0 F500 H1:2 T450
Инструмент (в данном случае печатающая голова)
M563 P0 D1 H1                
Pnn — номер инструмента
Dnn — номер мотора экструдера
Hnn — номер нагревателя
G10 P0 X0 Y0 Z0             ; здесь просто задаются смещения инструмента
Собственно на этом с базовой конфигурацией можно закончить.
А теперь о недостатках прошивки.
На мой взгляд главный недостаток, из за которого прошивка мало распространена, это ограниченный набор плат, с которыми она может работать. Это платы линейки Duet3D,  Alligator, RADDS и RURAMPS4D. Первые две платы довольно дорогие, а на двух других не получится завести Web сервер и интерфейс,  входящий в состав прошивки. Это связано с ограничениями Arduino Due. Плюс  прошивка поддерживает только ARM контроллеры семейства Atmel.
Но тут есть некоторые подвижки: не так давно появился порт RRF под контроллеры LPC1768/9, но данный у данного контроллера маловато памяти, и порт прошивки работает с рядом ограничений, так например не реализована работа с драйверами Trinamic по SPI, быстрая запись на SD карту по WiFi и ряд других моментов. Ну я понемногу допиливаю порт на STM32F429, дело идет хотя и не быстро. Хочется перенести все функции RRF, а что то и добавить.
Еще меня не устраивало то, что я не мог использовать данную прошивку c драйверами TMC2130 в режиме конфигурирования SPI на RuRAMPS4D, и я решил сам добавить в прошивку библиотеку для работы с ними, благо библиотека для TMC51xx уже была, хотя и под контроллеры старших серий. На данный момент библиотека TMC2130 работает только с платой RuRAMPS4D. На платах Duet3D драйверы моторов запаяны, TMC2130 не используется и смысла в этой библиотеки для Duet3D нет.

Вот ссылка  на исходики и бинарник
К сожалению я еще не реализовал возможности задания количества драйверов TMC2130 из GCODE, поэтому егего надо задать перед компиляцией прошивки, бинарник собран на использование 4-х TMC2130. Если кому то понадобится могу рассказать как пересобрать прошивку под необходимое количество, или соберу сам.

Ну и напомню как залить прошивку

Загрузка прошивки и настройка принтера.

В первый раз прошивка загружается с помощью программы bossa,  для загрузки Arduino Due необходимо подключить к Native Port. Перед загрузкой обязательно стереть FLASH — нажать Erase, потом Reset. Erase удерживайте пока не отожмете Reset.

Пред загрузкой в программе bossa необходимо установить галочки «Erase all» и «Boot to flash».

В результате конфигуратор сгенерирует нам набор файлов, который надо сохранить в папке /sys на SD карте
так же на карте необходимо создать еще папки:
/gcode — тут будут размещаться файлы моделей
/macros — папка для размещения макросов

Думаю на сегодня достаточно, если в комментариях проявится интерес к прошивке, напишу еще ряд статей, где освещу подробно разные аспекты, например настройку автоуровня. Возможно так же подключатся владельцы плат DUET3D и в комментариях чем то дополнят мою статью.
Подробнее…

RepRapFirmware небольшой обзор прошивки + бонус библиотека для работы TMC2130 c RuRamps4D