Металл2024 Реклама
Метобр2024 Реклама

32 бита от BIGTREETECH - казнить нельзя помиловать?

Vladik
Идет загрузка
Загрузка
18.01.2019
15867
31
Техничка

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

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

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

25
Не так давно мой подвальный трудяга Мега стал иногда саботировать задания, заставляя замирать сопло на несколько секунд, а то и минут. И если вначале спасала перезагрузка Mk4Duo, то сейчас это уже не помогает. Логи Octoprint показали, что причина кроется в длительном отсутствии ответа от Меги на команду.

Дилемму, то ли контакты спиртом почистить, то ли поменять плату контроллера, доминирующая трезвость решила в пользу второго варианта, и были приобретены клон Re-Arm с RAMPS 1.6Plus и SKR v1.1 от BIGTREETECH, ну и заодно драйвера TMC2130.

Краткий рассказ о диванном опыте работы с ними, и обнаруженных нюансах, я и хочу предложить вам.
32 бита от BIGTREETECH - казнить нельзя помиловать?
Сначала несколько общих слов.

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

Кроме того, здесь, на сайте, есть две отличные статьи. Про установку Marlin 2.0 на Re-Arm и настройку TMC2130. Повторять из них информацию в своей статье я тоже не буду.

К сожалению, с качеством изготовления не всё хорошо. Олова у производителя, кажется, много, а вот со временем - не очень. Поэтому платы, Re-Arm и RAMPS 1.6Plus, выглядели как ожерелья из оловянных бусинок висящих на выводах - это я так попытался холодную пайку описать. Результат не заставил себя ждать, контакт между кнопкой энкодера и ножкой микроконтроллера отсутствовал. Пришлось паять, тратя своё время, заодно пропаял и все остальные ножки. Но без профита я тоже не остался, у меня теперь есть припой, которого хватит на пару таких плат.

SKR v1.1 на их фоне выглядит образцово, у неё не только всё хорошо с пайкой, но она ещё и была отмыта от флюса. К драйверам претензий у меня тоже нет.

Теперь несколько поподробнее о платах.

SKR v1.1
32 бита от BIGTREETECH - казнить нельзя помиловать?
Плата в целом мне понравилась. Да, она достаточно минималистична в плане выведенных контактов. Разгуляться с большим количеством периферии здесь не удастся. Но как плата начального уровня - очень достойный вариант. SPI для драйверов на плате не разведён, и я включал плату только с A4988.

Что касается разъемов EXP1 и EXP2. Если их воспринимать как интерфейс для плат репраповских дисплеев, то да, проблема есть. Но если на эти разъёмы посмотреть, как на два независимых, и только внешне похожих на репраповский интерфейс, то всё могло бы встать на свои места, если бы не контакт кнопки, разлученный с остальными контактами энкодера.

Я не пытаюсь оправдать производителя с его странной разводкой этих двух разъёмов, но для меня более важно то, что соседний с ними разъём полностью дублирует их. Выведи на него дополнительные контакты, и плата, как мне кажется, смогла бы претендовать на звание одной из лучших. А переделать шнурок, во-первых, не сложно, а во-вторых, я бы его в любом случае заменил, например, на экранированный сетевой патч-корд.
32 бита от BIGTREETECH - казнить нельзя помиловать?
Но это всё лирика. В наличии же у меня есть лишь всё по отдельности - LCD12864, картридер и энкодер. И с их подключением и работой никаких проблем не возникло.

1. LCD12864, распаянный, как на этой картинке:
32 бита от BIGTREETECH - казнить нельзя помиловать?
подключал к EXP1:
  • 1 -> +5 В
  • 2 -> Земля
  • 4 -> 0.16
  • 5 -> 0.18
  • 6 -> 0.15

2. Картридер, с небольшими изменениями:
  • Сделал питание от 3.3 В, запаяв перемычку между контактами AMS1117-3.3 - выделил красным (для этой платы можно не делать, тогда подключать не к 3.3 В, а к 5 В)
  • Для определения наличия карты, соединил контакт разъема (выделил синим) с последним контактом слота картридера (выделил жёлтым)

32 бита от BIGTREETECH - казнить нельзя помиловать?
Подключал его к EXP2:
  • 1 -> +3.3 В (с разъема ICSP в центре платы)
  • 2 -> 1.31
  • 3 -> 0.17
  • 4 -> 0.18
  • 5 -> 0.15
  • 6 -> 1.23
  • 7 -> Земля

3. Энкодер
  • Со стороны двух контактов, один подключил к земле, а второй к 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
32 бита от BIGTREETECH - казнить нельзя помиловать?
32 бита от BIGTREETECH - казнить нельзя помиловать?
Именно эту связку я хочу установить вместо Меги в свой принтер.

И сначала я подключил, как и предыдущем пункте, LCD12864, картридер и энкодер:

1. LCD12864 подключал к AUX-4 RAMPS:
  • 2 -> Земля
  • 4 -> 18
  • 5 -> 17
  • 6 -> 16,
  • а +5 В с разъёма UART Re-Arm

2. Картридер, с описанными выше изменениями, просто надел на AUX-3 RAMPS.

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

//#define X_STALL_SENSITIVITY 8

//#define Y_STALL_SENSITIVITY 8

#define Z_STALL_SENSITIVITY 8
Попытка компиляции закончилась ошибкой, так как при использовании LCD12864 необходимо для драйверов включать софтовый SPI. Честно говоря, это сообщение меня не обрадовало. Покупка RAMPS1.6 Plus была обусловлена именно желанием обойтись без лишних проводов, что при использовании софтового SPI невозможно.

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

Поэтому я решил вернуться к 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

LiquidCrystal

LiquidCrystal_I2C
Теперь можно настраивать конфигурацию для подключения дисплея по I2C.

И здесь опять же есть два способа - простой и сложный. Опять же расскажу про оба:

Простой

в файле configuration.h находим, например, следующую строку: '//#define LCM1602', и после неё добавляем следующий код:
#define LCD_I2C_TYPE_PCA8574 // он мне больше всего понравился

#define LCD_I2C_ADDRESS 0x27 // Адрес дисплея на шине I2C, обычно 0x27

#define LCD_WIDTH 20 // Ширина дисплея в символах

#define LCD_HEIGHT 4 // Количество строк дисплея

#define ULTIPANEL // Без этого ничего не заработает
и если Вы выбрали простой путь установки библиотеки, надо в файле ultralcd_HD44780.h,
под строкой: #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)

#define LCD_I2C_TYPE_PCF85741

#define LCD_I2C_ADDRESS 0x27

#define LCD_WIDTH 20

#define LCD_HEIGHT 4

#define ULTIPANEL
в файле ultralcd_HD44780.h находим следующую строку: '#elif ENABLED(SR_LCD_2W_NL)', и ПЕРЕД ней добавляем следующие строки:
#elif ENABLED(LCD_I2C_TYPE_PCF85741)

#include

#include

#define LCD_CLASS LiquidCrystal_I2C
в файле ultralcd_HD44780.cpp находим следующую строку: '#elif ENABLED(SR_LCD_2W_NL)', и ПЕРЕД ней добавляем следующие строки:
#elif ENABLED(LCD_I2C_TYPE_PCF85741)

LCD_CLASS lcd(LCD_I2C_ADDRESS, LCD_WIDTH, LCD_HEIGHT);
в этом же файле ищем строку: '#elif ENABLED(LCD_I2C_TYPE_PCA8574)', а буквально через две строки видим оператор '#else'. Вот перед этой строкой с оператором и вставляем следующие строки:
#elif ENABLED(LCD_I2C_TYPE_PCF85741)

lcd.begin();

lcd.backlight();
Любой путь когда-нибудь заканчивается, и, после компиляции и заливки новой прошивки со всеми этими изменениями, я ожидал наконец-то увидеть оживший экран, но увидел только 'зебру'. И продолжал я её наблюдать ещё несколько часов, перепробовав разные комбинации библиотек и типов экранов. Не работает.

Уже под конец рабочего дня (начало светать) обнаружив несколько интерфейсов I2C, я решил проверить, к тому ли подключаюсь? Но осциллограф радостно рисовал кривые на тех самых контактах. Тупик.

Перед выключением решил я всё-таки глянуть, а что там шлёт плата экрану? - И с удивлением обнаружил на шине числа 0x13. Выяснять, кто творит это безобразие, превращая с помощью лишнего сдвига на разряд адрес 0x27 в 0x13, я не стал, удовлетворившись, после замены адреса 0x27 на 0x4E, наконец-то заработавшим экраном.
32 бита от BIGTREETECH - казнить нельзя помиловать?
Ах, да, вывод же нужен. С оговоркой про качество ручной пайки, помиловать.

P.S. В названиях контактов возможны ошибки, поэтому рекомендую сверять их со схемами и файлом контактов конфигурации.

P.P.S. Картинки взяты из Интернета, со страниц магазина, а также из папки DCIM телефона.

P.P.P.S. К сожалению, файлы lpc176x_usb_driver.inf и LiquidCrystal_I2C.zip приложить к статье не смог. Но они достаточно легко находятся в Интернете. Только надо учитывать, что для сложного подключения библиотеки в папке должен быть файл library.properties, а простое подключение экрана требует наличия в библиотеке LiquidCrystal_I2C метода init().

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

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

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

25
Комментарии к статье
Кремень КБ Реклама
Кремень КМ Реклама