Marlin 2.0 (32bit)

Обсуждение технологии печати на 3D принтерах. Самостоятельное изготовление и приобретение. RepRap и его последователи.

Marlin 2.0 (32bit)

Сообщение alexxy » 29 окт 2017, 20:54

Как известно одна из популярных прошивок для 3D принтеров Marlin обзавелась поддержкой 32битных контроллеров на базе следующих чипов:
  • AT91SAM3X8E (на базе Arduino Due) (например RAMPS-FD, RADDS)
  • LPC176x (Всем известные девайсы на базе Smoothieboard) (работают ReARM, MKS Sbase, Azteeg X5 GT, AZSMZ mini)
  • STM32F1
  • Teensy 3.5/3.6 (они уже Cortex-M4 с FPU)

Предыстория: Товарижчь setar подбросил мне плату Azteeg X5 GT с драйверами BigFoot BSD2660. В оригинале плата работала на Smoothiware, но мне хотелось попробовать Marlin на ней. Собственно дело оставалось за малым, добавить в Marlin поддержку этой платы. К плате прилагался дисплей Viki2.

На фото ниже, Marlin запущенный на Azteeg X5 GT с Viki2 (к принтеру пока не подключал, драйвера tmc2660 не удалось запустить, надо написать или найти библиотеку для них)
DSC_0339.JPG

DSC_0340.JPG

DSC_0341.JPG

DSC_0342.JPG


Что сейчас работает:
  • Мапинг базовых пинов
  • Эндстопы
  • Грелки
  • Сервы
  • Термисторы
  • Экран Viki2
  • Драйверы (пробовал drv8825 и tmc2100)
Что не работает:
  • Драйверы BSD2660 (нет библиотеки, надо написать)
  • Ну и потенциально всё что не проверялось ;)

Как всё это было: вся проблема заключалась в том, что по этой борде нет нормальной спецификации с пинами, а предположение что все пины будут совпадать с тем что заявлено для Smoothieboard мягко говоря не оправдалось =). Так что пины искались методом реверс энжиниринга и научного тыка. Порт по сути делался не с нуля, а в качестве базы использовалось то, что было сделано уже для re-arm. Фотки и может пара видео этого дела будет в следующих постах.

Мой код поддержки Azteeg X5 GT смержили в основное дерево Marlin, так что берем бранч bugfix-2.0.x и пользуем

Базовая инструкция для сборки
  • Ставим platformio
  • Клонируем основную репу марлина
    Код: Выделить всё
    git clone https://github.com/MarlinFirmware/Marlin
  • Переключаем бранч на bugfix-2.0.x
    Код: Выделить всё
    git checkout -b bugfix-2.0.x origin/bugfix-2.0.x
  • Конфигурим как обычно, выставляем нужные параметры для платы и тип платы
  • Собираем
    Код: Выделить всё
    pio run -e LPC1768
  • В итоге получится файл firmware.bin (смотрим где он в выводе pio), копируем его на флешку, и перезапускаем плату
  • Радуемся Marlin на 32битной борде
alexxy
 
Сообщения: 93
Зарегистрирован: 05 фев 2015, 22:58

Re: Marlin 2.0 (32bit)

Сообщение setar » 21 апр 2018, 00:31

пины тут вооюще не при чем,
сейчас гляну

Добавлено спустя 1 час 15 минут 20 секунд:
все обычно

#define EEPROM_SETTINGS
#define EEPROM_CHITCHAT
#define SDSUPPORT

но использование SD как хранилища EEPROM это часть HAL (Hardware Abstraction Layer) и задается таргетом сборки бинарного кода.
для примера посмотрите src/HAL/HAL_LPC1768/persistent_store_impl.cpp
Аватара пользователя
setar
Site Admin
 
Сообщения: 10989
Зарегистрирован: 04 окт 2004, 12:58
Откуда: St.Petersburg
Skype: taranenko.sergey
ФИО: Сергей Тараненко

Re: Marlin 2.0 (32bit)

Сообщение Rockman256 » 21 апр 2018, 10:57

setar писал(а):пины тут вооюще не при чем,
сейчас гляну

Добавлено спустя 1 час 15 минут 20 секунд:
все обычно

#define EEPROM_SETTINGS
#define EEPROM_CHITCHAT
#define SDSUPPORT

но использование SD как хранилища EEPROM это часть HAL (Hardware Abstraction Layer) и задается таргетом сборки бинарного кода.
для примера посмотрите src/HAL/HAL_LPC1768/persistent_store_impl.cpp

Да вот только этот файл для arduino due какой-то кастрированный.
Код: Выделить всё
#ifdef ARDUINO_ARCH_SAM

#include "../persistent_store_api.h"

#include "../../inc/MarlinConfig.h"

#if ENABLED(EEPROM_SETTINGS)

extern void eeprom_flush(void);

namespace HAL {
namespace PersistentStore {

bool access_start() {
  return true;
}

bool access_finish(){
#if DISABLED(I2C_EEPROM) && DISABLED(SPI_EEPROM)
  eeprom_flush();
#endif
  return true;
}

bool write_data(int &pos, const uint8_t *value, uint16_t size, uint16_t *crc) {
  while (size--) {
    uint8_t * const p = (uint8_t * const)pos;
    uint8_t v = *value;
    // EEPROM has only ~100,000 write cycles,
    // so only write bytes that have changed!
    if (v != eeprom_read_byte(p)) {
      eeprom_write_byte(p, v);
      if (eeprom_read_byte(p) != v) {
        SERIAL_ECHO_START();
        SERIAL_ECHOLNPGM(MSG_ERR_EEPROM_WRITE);
        return true;
      }
    }
    crc16(crc, &v, 1);
    pos++;
    value++;
  };
  return false;
}

bool read_data(int &pos, uint8_t* value, uint16_t size, uint16_t *crc, const bool writing/*=true*/) {
  do {
    uint8_t c = eeprom_read_byte((unsigned char*)pos);
    if (writing) *value = c;
    crc16(crc, &c, 1);
    pos++;
    value++;
  } while (--size);
  return false;
}

}
}

#endif // EEPROM_SETTINGS
#endif // __AVR__
Rockman256
 
Сообщения: 76
Зарегистрирован: 21 авг 2013, 02:29
Откуда: Теперь Питер
Skype: Rockman256
ФИО: Стельмах Роман

Re: Marlin 2.0 (32bit)

Сообщение Rockman256 » 22 апр 2018, 10:13

Получил ответ с гитхаба. Грусть печаль, придется ждать чип еепром
At this time the EEPROM functions for DUE write to an EEPROM, and do not support writing the data to SD. In fact, none of the platforms support using an external SD card for this purpose. The ARM platforms all use the onboard SD card that contains the FIRMWARE.CUR.
Rockman256
 
Сообщения: 76
Зарегистрирован: 21 авг 2013, 02:29
Откуда: Теперь Питер
Skype: Rockman256
ФИО: Стельмах Роман

Re: Marlin 2.0 (32bit)

Сообщение setar » 23 апр 2018, 11:04

печально, но глядишь через пол годика допилят ...
Аватара пользователя
setar
Site Admin
 
Сообщения: 10989
Зарегистрирован: 04 окт 2004, 12:58
Откуда: St.Petersburg
Skype: taranenko.sergey
ФИО: Сергей Тараненко

Re: Marlin 2.0 (32bit)

Сообщение karabas2011 » 23 апр 2018, 21:21

setar писал(а):
karabas2011 писал(а):А кардридер на дисплее так и не починили?
а в чём нестабильность смузи?

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

более 100 принтеров на mks sbase. Вешается только на HC флешках если врубать питание. Горячий ресет нормально.

Кардридер на марлине2 у меня не пахал - нужно отдельный spi для него отводить. это надо мутить ещё провода.
У тебя какой дисплей и смузя?
karabas2011
 
Сообщения: 1607
Зарегистрирован: 04 мар 2012, 01:06
Откуда: Севастополь-Москва

Re: Marlin 2.0 (32bit)

Сообщение setar » 23 апр 2018, 21:29

первый пост - мое железо
Аватара пользователя
setar
Site Admin
 
Сообщения: 10989
Зарегистрирован: 04 окт 2004, 12:58
Откуда: St.Petersburg
Skype: taranenko.sergey
ФИО: Сергей Тараненко

Re: Marlin 2.0 (32bit)

Сообщение Alexus12 » 24 сен 2018, 11:47

Помогите решить проблемку.
Есть оптический эндстоп на оси Z. Когда даю команду домой, стол поднимается до концевика, потом опускается на 5 мм и там останавливается. При этом его положение теперь считается нулем. Если опять нажать домой, он сразу опускается опять на 5 мм. И так далее. С экрана при этом поднять вверх нельзя (выше уже ноль), но можно опустить.

Куда копать в конфигурации? Остальные концевики механические и нормально отрабатывают. Плата SBase.
Noname + Arduino + RAMPS 1.4 + Marlin (не понравился)
Noname (CoreXY) + Duet2 WiFi v1.03 (MKS Clone) + 4 x (E3D V6 1,75 мм (боуден)) ToolChanger (в процессе эксплуатации)
Alexus12
 
Сообщения: 1132
Зарегистрирован: 18 дек 2014, 01:43

Re: Marlin 2.0 (32bit)

Сообщение setar » 24 сен 2018, 23:27

вижу уже сами разобрались :)
forum107/topic18095.html#p388848
Аватара пользователя
setar
Site Admin
 
Сообщения: 10989
Зарегистрирован: 04 окт 2004, 12:58
Откуда: St.Petersburg
Skype: taranenko.sergey
ФИО: Сергей Тараненко

Re: Marlin 2.0 (32bit)

Сообщение Alexus12 » 25 сен 2018, 06:47

setar писал(а):вижу уже сами разобрались :)
forum107/topic18095.html#p388848

Да, но было уже поздно и не успел проверить все что хотел, чтобы потом отписать. А так на первый взгляд Марлин работает неплохо. Удалось подключить модуль управления питанием MKS PWC 2.0 и он таки работает. Дисплей и кардридер на дисплее тоже работают. Все настройки через прошивку, а не через CFG файл.
Правда приходится выбирать - либо дисплей, либо USB。 Вместе пока не работают. В настройках 2 порта, но только второй реагирует на изменения, и там надо выбирать либо одно, либо другое при сборке прошивки.
Noname + Arduino + RAMPS 1.4 + Marlin (не понравился)
Noname (CoreXY) + Duet2 WiFi v1.03 (MKS Clone) + 4 x (E3D V6 1,75 мм (боуден)) ToolChanger (в процессе эксплуатации)
Alexus12
 
Сообщения: 1132
Зарегистрирован: 18 дек 2014, 01:43

Re: Marlin 2.0 (32bit)

Сообщение Alexus12 » 02 окт 2018, 19:04

Подскажите, нужно настроить токи на драйверах MKS Sbase. В простом конфиге выбрал драйвера 8825. В расширенном токи выставляются для них в строчке

#define PWM_MOTOR_CURRENT { 800, 800, 1000 } // Values in milliamps

Я правильно понимаю? Первые три это для X, Y, Z. Надо ещё для экструдера добавить?
У меня с такими настройками сейчас все работает, но моторы X и Y греются немного больше чем раньше на Смузи. Хочу более точно настроить токи.

Как правильно сделать?
Noname + Arduino + RAMPS 1.4 + Marlin (не понравился)
Noname (CoreXY) + Duet2 WiFi v1.03 (MKS Clone) + 4 x (E3D V6 1,75 мм (боуден)) ToolChanger (в процессе эксплуатации)
Alexus12
 
Сообщения: 1132
Зарегистрирован: 18 дек 2014, 01:43

Re: Marlin 2.0 (32bit)

Сообщение sergey2x » 02 окт 2018, 23:09

#define DIGIPOT_I2C
....
#define DIGIPOT_I2C_NUM_CHANNELS 5 // 5DPRINT: 4 AZTEEG_X3_PRO: 8 MKS SBASE: 5
#define DIGIPOT_I2C_MOTOR_CURRENTS { 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0 }
Первые пять значений - токи для моторов.

Про PWM_MOTOR_CURRENT: - used by MINIRAMBO & ULTIMAIN_2
* known compatible chips: A4982
sergey2x
 
Сообщения: 235
Зарегистрирован: 14 янв 2015, 16:18
Откуда: СПб

Re: Marlin 2.0 (32bit)

Сообщение Alexus12 » 03 окт 2018, 19:18

sergey2x писал(а):#define DIGIPOT_I2C
....
#define DIGIPOT_I2C_NUM_CHANNELS 5 // 5DPRINT: 4 AZTEEG_X3_PRO: 8 MKS SBASE: 5
#define DIGIPOT_I2C_MOTOR_CURRENTS { 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0 }
Первые пять значений - токи для моторов.

Про PWM_MOTOR_CURRENT: - used by MINIRAMBO & ULTIMAIN_2
* known compatible chips: A4982

Я думал это для внешних драйверов настройки. Спасибо, попробую.
Получается PWM_MOTOR_CURRENT можно закоментить?
Noname + Arduino + RAMPS 1.4 + Marlin (не понравился)
Noname (CoreXY) + Duet2 WiFi v1.03 (MKS Clone) + 4 x (E3D V6 1,75 мм (боуден)) ToolChanger (в процессе эксплуатации)
Alexus12
 
Сообщения: 1132
Зарегистрирован: 18 дек 2014, 01:43

Re: Marlin 2.0 (32bit)

Сообщение ursus » 07 окт 2018, 01:21

Приветствую, товарищи.
Решил я тут попробовать залить Марлин 2.0 на свою AZSMZ, благо на ютубе увидел, что у кого-то оно работает и даже печатает.
Покурил форумы, вики, вспомнил старые времена, проведенные в обнимку с рампсом. И залил ведь. И даже заработало. Моторы крутятся, лавеха... А нет, не то. Работают короче основные функции.
Но видимо после пятка часов ковыряния в этом всем мозги начала подплавляться. Не могу включить кровать. Ставлю #define TEMP_SENSOR_BED 11, а в Репитере кровать не появляется. Ставлю 999(типа заглушка с температурой 100С) появляется. ЧЯДНТ?
Может с пинами что нить не так? Но я не вкурил как поправить пины. В пинах только это
Код: Выделить всё
#define TEMP_0_PIN          0   // A0 (TH1)
#define TEMP_BED_PIN        1   // A1 (TH2)

Что тут надо поправить я не знаю. Других упоминаний кровати нет. Голова при всем это работает нормально. Греется, показывает температуру и все такое.
Помогите, товарищи!
ZAV MAX Pro V1. ZAV mini.
ursus
 
Сообщения: 267
Зарегистрирован: 27 авг 2014, 02:11
Откуда: Тольятти
ФИО: Михаил

Re: Marlin 2.0 (32bit)

Сообщение sergey2x » 07 окт 2018, 02:24

Термистор кровати в какой разъём подключен?
Попробуй так:
#define TEMP_0_PIN 0 // A0 (TH1)
#define TEMP_BED_PIN 2
#define TEMP_1_PIN 1
sergey2x
 
Сообщения: 235
Зарегистрирован: 14 янв 2015, 16:18
Откуда: СПб

Re: Marlin 2.0 (32bit)

Сообщение ursus » 07 окт 2018, 23:31

Хммм.. Заработало. Благодарю. Видимо действительно мозг уже поплавился, раз не допер столь очевидное попробовать.

Добавлено спустя 20 минут 48 секунд:
Теперь вылез еще один вопрос.
У меня на смузе в конфиге был такой кусок
Код: Выделить всё
switch.misc.enable                          true             # Enable this module
switch.misc.input_on_command                M42              # Command that will turn this switch on
switch.misc.input_off_command               M43              # Command that will turn this switch off
switch.misc.output_pin                      0.26             # Pin this module controls
switch.misc.output_type                     digital          # Digital means this is just an on or off pin

По команде М42 включался пин 0.26, по М43 выключался.
В Марлине ессно это не работает.
В файле пинов пин 0.26 прописан
Код: Выделить всё
#define FAN1_PIN           P0_26

Как мне им управлять? В конфигах я не нашел упоминаний FAN1_PIN.
ZAV MAX Pro V1. ZAV mini.
ursus
 
Сообщения: 267
Зарегистрирован: 27 авг 2014, 02:11
Откуда: Тольятти
ФИО: Михаил

Пред.След.

Вернуться в 3D печать

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 15