32 бита от BIGTREETECH - казнить нельзя помиловать?
Дилемму, то ли контакты спиртом почистить, то ли поменять плату контроллера, доминирующая трезвость решила в пользу второго варианта, и были приобретены клон Re-Arm с RAMPS 1.6Plus и SKR v1.1 от BIGTREETECH, ну и заодно драйвера TMC2130.
Краткий рассказ о диванном опыте работы с ними, и обнаруженных нюансах, я и хочу предложить вам.Сначала несколько общих слов.
На мой взгляд, исчерпывающая информация о каждой плате содержится на её странице в магазине, по крайней мере, мне её оказалось достаточно. Поэтому я не стал (ну почти не стал) дублировать картинки оттуда, а просто добавил ссылки в заголовки.
Кроме того, здесь, на сайте, есть две отличные статьи. Про установку Marlin 2.0 на Re-Arm и настройку TMC2130. Повторять из них информацию в своей статье я тоже не буду.
К сожалению, с качеством изготовления не всё хорошо. Олова у производителя, кажется, много, а вот со временем - не очень. Поэтому платы, Re-Arm и RAMPS 1.6Plus, выглядели как ожерелья из оловянных бусинок висящих на выводах - это я так попытался холодную пайку описать. Результат не заставил себя ждать, контакт между кнопкой энкодера и ножкой микроконтроллера отсутствовал. Пришлось паять, тратя своё время, заодно пропаял и все остальные ножки. Но без профита я тоже не остался, у меня теперь есть припой, которого хватит на пару таких плат.
SKR v1.1 на их фоне выглядит образцово, у неё не только всё хорошо с пайкой, но она ещё и была отмыта от флюса. К драйверам претензий у меня тоже нет.
Теперь несколько поподробнее о платах.
SKR v1.1Плата в целом мне понравилась. Да, она достаточно минималистична в плане выведенных контактов. Разгуляться с большим количеством периферии здесь не удастся. Но как плата начального уровня - очень достойный вариант. SPI для драйверов на плате не разведён, и я включал плату только с A4988.
Что касается разъемов EXP1 и EXP2. Если их воспринимать как интерфейс для плат репраповских дисплеев, то да, проблема есть. Но если на эти разъёмы посмотреть, как на два независимых, и только внешне похожих на репраповский интерфейс, то всё могло бы встать на свои места, если бы не контакт кнопки, разлученный с остальными контактами энкодера.
Я не пытаюсь оправдать производителя с его странной разводкой этих двух разъёмов, но для меня более важно то, что соседний с ними разъём полностью дублирует их. Выведи на него дополнительные контакты, и плата, как мне кажется, смогла бы претендовать на звание одной из лучших. А переделать шнурок, во-первых, не сложно, а во-вторых, я бы его в любом случае заменил, например, на экранированный сетевой патч-корд. Но это всё лирика. В наличии же у меня есть лишь всё по отдельности - LCD12864, картридер и энкодер. И с их подключением и работой никаких проблем не возникло.
1. LCD12864, распаянный, как на этой картинке:подключал к EXP1:
- 1 -> +5 В
- 2 -> Земля
- 4 -> 0.16
- 5 -> 0.18
- 6 -> 0.15
- Сделал питание от 3.3 В, запаяв перемычку между контактами AMS1117-3.3 - выделил красным (для этой платы можно не делать, тогда подключать не к 3.3 В, а к 5 В)
- Для определения наличия карты, соединил контакт разъема (выделил синим) с последним контактом слота картридера (выделил жёлтым)
- 1 -> +3.3 В (с разъема ICSP в центре платы)
- 2 -> 1.31
- 3 -> 0.17
- 4 -> 0.18
- 5 -> 0.15
- 6 -> 1.23
- 7 -> Земля
- Со стороны двух контактов, один подключил к земле, а второй к 2.11 на разъёме EXP1.
- Со стороны трёх контактов, средний подключил к земле, а крайние к 3.25 и 3.26 на разъёме EXP2
После этого, свободными остались только контакты трёх концевиков и пищалки. Если в принтере один экструдер, то добавляются ещё четыре контакта, два из которых можно использовать для I2C.
Прошивка мало чем отличается от изложенного в указанной выше статье. Только в configuration.h надо указать вместо BOARD_RAMPS_14_RE_ARM_xxx BOARD_BIQU_SKR_V1_1. И прошивка нормально собирается без удаления строки extra_scripts в platformio.ini. Редактирование контактов надо тоже производить не в pins_RAMPS_RE_ARM.h, а в pins_BIQU_SKR_V1.1.h.
После перепрошивки на Marlin, Smoothie порт превратится в новое устройство, для установки которого надо подсунуть следующий файл: [lpc176x_usb_driver.inf]
Попробовал нагревать силиконовую грелку 12 В, 200 Вт. Напряжение просело до 11 Вольт на входных клеммах, а на выходе к грелке было 10.8 В. Грел не долго, минут 10, температура полевика была порядка 65 градусов. Хочу заметить, что производитель не рекомендует подключать к плате нагрузку выше 180 Вт.
клон Re-Arm и RAMPS 1.6PlusИменно эту связку я хочу установить вместо Меги в свой принтер.
И сначала я подключил, как и предыдущем пункте, LCD12864, картридер и энкодер:
1. LCD12864 подключал к AUX-4 RAMPS:
- 2 -> Земля
- 4 -> 18
- 5 -> 17
- 6 -> 16,
- а +5 В с разъёма UART Re-Arm
3. Энкодер
- Со стороны двух контактов, один подключил к земле, а второй к 10 контакту AUX-4 RAMPS.
- Со стороны трёх контактов, средний подключил к земле, а крайние к 11 и 12 контактам AUX-4 RAMPS.
В процессе подключения оказалось, что AUX-2 RAMPS в связке с Re-Arm как бы и есть, но к микроконтроллеру он не подключён. Но не всё так плохо, на самом Re-Arm есть разъём J12, на котором можно найти контакты AUX-2 RAMPS.
Прошивка, после замены названия платы и редактирования контактов в pins_RAMPS_RE_ARM.h, прошла без проблем. Всё подключённое заработало сразу, только надо не забыть, при использовании драйверов A4988 или DRV8825, на платах соединить между собой контакты Sleep и Reset, как указано на странице RAMPS1.6 Plus.
Несмотря на то, что и на платах SKR и Re-Arm используются полевики с одной и той же маркировкой, результат нагрева был несколько иной. При тех же 11 В на входе, на выходе было только 10.6 В, а полевик разогрелся почти до 80 градусов. Но повторюсь, производитель не рекомендует подключать к плате нагрузку выше 180 Вт, а у меня грелка была 200 Вт.
Таким образом, предварительная проверка с драйвером A4988 каких-либо проблем не выявила, и можно было преступать к проверке работы платы с TMC2130 в режиме 'частичного' SPI.
TMC2130
Драйвера поставляются уже готовыми работать в режиме SPI, ничего с ними делать не надо. На плате же RAMPS1.6 Plus необходимо переставить перемычки под драйверами TMC2130 так, чтобы они замыкали контакты чёрного, а не белого, разъёма. Это подключит к нужным контактам драйвера SPI и сигнал выбора чипа.
Настройка в текущей версии Marlin 2.0 несколько отличается от описанного в вышеуказанной статье.
Во-первых, надо в разделе Stepper Drivers файла configuration.h, установить для нужных осей правильный тип драйвера. Я проверял на оси Z, поэтому я привёл строку с Z_DRIVER_TYPE к такому виду:
#define Z_DRIVER_TYPE TMC2130Во-вторых, я отредактировал некоторые строки в секции tmc_smart файла configuration_adv.h:
#define Z_CURRENT 400Следующие изменения в том же файле, думаю, не нужны, а может даже вредны, так как заставить остановиться двигатель у меня не получилось:
#define MONITOR_DRIVER_STATUS
#define TMC_DEBUG
#define SENSORLESS_PROBING // TMC2130 onlyПопытка компиляции закончилась ошибкой, так как при использовании LCD12864 необходимо для драйверов включать софтовый SPI. Честно говоря, это сообщение меня не обрадовало. Покупка RAMPS1.6 Plus была обусловлена именно желанием обойтись без лишних проводов, что при использовании софтового SPI невозможно.
//#define X_STALL_SENSITIVITY 8
//#define Y_STALL_SENSITIVITY 8
#define Z_STALL_SENSITIVITY 8
Кроме того, я не могу сказать, что меня впечатлил графический экран. Приятно, конечно, что буковки родного языка, но графика примитивная...
Поэтому я решил вернуться к LCD2004. Ну как вернуться? Вообще-то он у меня сейчас не работает, а когда работал, я им не пользовался, так как все мои потребности общения с принтером с лихвой перекрываются Octoprint. Но для порядку, решил я, подключить надо.
Отредактированная конфигурация превратилась в прошивку без предупреждений, и легко была залита в контроллер. Но вот только драйвер не заработал. Причём сначала он даже не крутил мотором. Именно тогда я обнаружил, что нужные контакты, используемые для сигнала выбора, не подключены к AUX-2 RAMPS и, соответственно, к драйверам. Проводок от J12 к AUX-2 решил эту проблему - мотор начал вращаться. Но команда M122 продолжала ругаться до тех пор, пока я полностью не отключил в конфигурации дисплей. Но для порядку-то он нужен...
Являясь счастливым обладателем LCD2004 с интерфейсом I2C, я вовремя вспомнил, что в configuration.h есть упоминание о чём-то подобном. Будем пробовать...
Сначала надо установить библиотеку LiquidCrystal_I2C [файл LiquidCrystal_I2C.zip]. Есть, точнее, я знаю, два пути - простой и сложный. Опишу оба:
Простой.
Копируем из архива два файла, LiquidCrystal_I2C.h и LiquidCrystal_I2C.cpp, например, в папку Marlinsrclibs
Сложный.
Копируем папку из архива в папку libraries фреймворка нашего микроконтроллера, например, в c:.platformiopackagesframework-arduino-lpc176xlibraries, где c:.platformio - это место установки PlatformIO.
Добавляем в файл platformio.ini, в секцию [env:LPC1768] для параметра lib_deps новую строку LiquidCrystal_I2C, должно получиться как-то так:
lib_deps = ServoТеперь можно настраивать конфигурацию для подключения дисплея по I2C.
LiquidCrystal
LiquidCrystal_I2C
И здесь опять же есть два способа - простой и сложный. Опять же расскажу про оба:
Простой
в файле configuration.h находим, например, следующую строку: '//#define LCM1602', и после неё добавляем следующий код:
#define LCD_I2C_TYPE_PCA8574 // он мне больше всего понравилсяи если Вы выбрали простой путь установки библиотеки, надо в файле ultralcd_HD44780.h,
#define LCD_I2C_ADDRESS 0x27 // Адрес дисплея на шине I2C, обычно 0x27
#define LCD_WIDTH 20 // Ширина дисплея в символах
#define LCD_HEIGHT 4 // Количество строк дисплея
#define ULTIPANEL // Без этого ничего не заработает
под строкой: #elif ENABLED(LCD_I2C_TYPE_PCA8574)Сложный
заменить строку: #include LiquidCrystal_I2C.h // название обрамлено знаками меньше и больше
на строку: #include '../../libs/LiquidCrystal_I2C.h' // здесь надо указать путь до библиотеки относительно редактируемого файла
в файле configuration.h находим, например, следующую строку: '//#define LCM1602', и после неё добавляем новую строку:
#define LCM1602_I2C // придумали новый тип дисплея
в файле SanityCheck.h находим следующую строку: ' + ENABLED(LCM1602) ', и после неё добавляем новую строку:
+ ENABLED(LCM1602_I2C)в файле Conditionals_LCD.h находим следующую строку: '#elif ENABLED(REPRAPWORLD_GRAPHICAL_LCD)', и ПЕРЕД ней добавляем следующие строки:
#elif ENABLED(LCM1602_I2C)в файле ultralcd_HD44780.h находим следующую строку: '#elif ENABLED(SR_LCD_2W_NL)', и ПЕРЕД ней добавляем следующие строки:
#define LCD_I2C_TYPE_PCF85741
#define LCD_I2C_ADDRESS 0x27
#define LCD_WIDTH 20
#define LCD_HEIGHT 4
#define ULTIPANEL
#elif ENABLED(LCD_I2C_TYPE_PCF85741)в файле ultralcd_HD44780.cpp находим следующую строку: '#elif ENABLED(SR_LCD_2W_NL)', и ПЕРЕД ней добавляем следующие строки:
#include
#include
#define LCD_CLASS LiquidCrystal_I2C
#elif ENABLED(LCD_I2C_TYPE_PCF85741)в этом же файле ищем строку: '#elif ENABLED(LCD_I2C_TYPE_PCA8574)', а буквально через две строки видим оператор '#else'. Вот перед этой строкой с оператором и вставляем следующие строки:
LCD_CLASS lcd(LCD_I2C_ADDRESS, LCD_WIDTH, LCD_HEIGHT);
#elif ENABLED(LCD_I2C_TYPE_PCF85741)Любой путь когда-нибудь заканчивается, и, после компиляции и заливки новой прошивки со всеми этими изменениями, я ожидал наконец-то увидеть оживший экран, но увидел только 'зебру'. И продолжал я её наблюдать ещё несколько часов, перепробовав разные комбинации библиотек и типов экранов. Не работает.
lcd.begin();
lcd.backlight();
Уже под конец рабочего дня (начало светать) обнаружив несколько интерфейсов I2C, я решил проверить, к тому ли подключаюсь? Но осциллограф радостно рисовал кривые на тех самых контактах. Тупик.
Перед выключением решил я всё-таки глянуть, а что там шлёт плата экрану? - И с удивлением обнаружил на шине числа 0x13. Выяснять, кто творит это безобразие, превращая с помощью лишнего сдвига на разряд адрес 0x27 в 0x13, я не стал, удовлетворившись, после замены адреса 0x27 на 0x4E, наконец-то заработавшим экраном.Ах, да, вывод же нужен. С оговоркой про качество ручной пайки, помиловать.
P.S. В названиях контактов возможны ошибки, поэтому рекомендую сверять их со схемами и файлом контактов конфигурации.
P.P.S. Картинки взяты из Интернета, со страниц магазина, а также из папки DCIM телефона.
P.P.P.S. К сожалению, файлы lpc176x_usb_driver.inf и LiquidCrystal_I2C.zip приложить к статье не смог. Но они достаточно легко находятся в Интернете. Только надо учитывать, что для сложного подключения библиотеки в папке должен быть файл library.properties, а простое подключение экрана требует наличия в библиотеке LiquidCrystal_I2C метода init().
Еще больше интересных статей
Сушилка на 4 катушки своими руками
Подпишитесь на автора
Подпишитесь на автора, если вам нравятся его публикации. Тогда вы будете получать уведомления о его новых статьях.
Отписаться от уведомлений вы всегда сможете в профиле автора.
Антивоблинг на flyingbear ghost 5
Подпишитесь на автора
Подпишитесь на автора, если вам нравятся его публикации. Тогда вы будете получать уведомления о его новых статьях.
Отписаться от уведомлений вы всегда сможете в профиле автора.
Собираем 3D-принтер своими руками. Пошаговая инструкция. Часть 1.
Подпишитесь на автора
Подпишитесь на автора, если вам нравятся его публикации. Тогда вы будете получать уведомления о его новых статьях.
Отписаться от уведомлений вы всегда сможете в профиле автора.
Как уже анонсировал Серега, я начинаю публиковать цикл статей по сборк...
Комментарии и вопросы
Хвост съёмный для печати
Рама здорового человека :)
Спасибо за оценку!
Здравствуйте, у меня перестала...
Доброго времени суток.Неожидан...
Всем доброго дня. Вчера кинул...
Мне нужно напечатать модель эт...