roboforum.ru

Технический форум по робототехнике.

Marlin 2.0 (32bit)

Ответить

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битной борде

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

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__

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.

Re: Marlin 2.0 (32bit)

setar » 23 апр 2018, 11:04

печально, но глядишь через пол годика допилят ...

Re: Marlin 2.0 (32bit)

karabas2011 » 23 апр 2018, 21:21

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

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

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

Кардридер на марлине2 у меня не пахал - нужно отдельный spi для него отводить. это надо мутить ещё провода.
У тебя какой дисплей и смузя?

Re: Marlin 2.0 (32bit)

setar » 23 апр 2018, 21:29

первый пост - мое железо

Re: Marlin 2.0 (32bit)

Alexus12 » 24 сен 2018, 11:47

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

Куда копать в конфигурации? Остальные концевики механические и нормально отрабатывают. Плата SBase.

Re: Marlin 2.0 (32bit)

setar » 24 сен 2018, 23:27

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

Re: Marlin 2.0 (32bit)

Alexus12 » 25 сен 2018, 06:47

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

Да, но было уже поздно и не успел проверить все что хотел, чтобы потом отписать. А так на первый взгляд Марлин работает неплохо. Удалось подключить модуль управления питанием MKS PWC 2.0 и он таки работает. Дисплей и кардридер на дисплее тоже работают. Все настройки через прошивку, а не через CFG файл.
Правда приходится выбирать - либо дисплей, либо USB。 Вместе пока не работают. В настройках 2 порта, но только второй реагирует на изменения, и там надо выбирать либо одно, либо другое при сборке прошивки.

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 греются немного больше чем раньше на Смузи. Хочу более точно настроить токи.

Как правильно сделать?

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

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 можно закоментить?

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)

Что тут надо поправить я не знаю. Других упоминаний кровати нет. Голова при всем это работает нормально. Греется, показывает температуру и все такое.
Помогите, товарищи!

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

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.


Rambler\'s Top100 Mail.ru counter