Технический форум по робототехнике.
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 не удалось запустить, надо написать или найти библиотеку для них)
Что сейчас работает:
- Мапинг базовых пинов
- Эндстопы
- Грелки
- Сервы
- Термисторы
- Экран 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битной борде
karabas2011 » 08 ноя 2017, 20:05
alexxy писал(а):demonx писал(а):Я сегодня попробовал. У меня MKS SBase 1.3+LV8729 на XY+FullFraphicDisplay+Encoder. Скачал Марлин 2.0, скомпилил и прошил. В итоге - экран не работает, движки работают странно, еле ползают, шаги и ускорения совсем не соотвествуют заданным в конфиге. Самое странное, в конфиге заданы концевики: x_min, y_max, z_max, а M119 выдаёт x_min, y_min, z_min. Вентилятор включается нормально. Температуру стола не показывает.
Так вы проверьте соответствие пинов. Концевиков, термисторов и тд..
Могу поправить по результатам ваших тестов. У меня нет этой платы
Тебе плату дать? в Москве?
У тебя кардридер работает?
setar » 08 ноя 2017, 22:34
Леша В питере, даже скорее в Гатчине (Леннинградская область)
karabas2011 » 09 ноя 2017, 12:36
На текущий момент ситуация хреновая,
Разработчики решили встроенную флешку использовать только как EEPROM эмулятор.
Она недоступна как носитель жкодов. По поводу внешней флешки никто не чешется. Мои запросы закрывают с дурацкой пометкой - смузевцы типа сказали что оно не работает.
С SPI какие-то непонятные проблемы, даже если цепляешь дисплей, который его вообще не использует, флеха не инитится. Хотя пытается.
В файле spi_pins.h пины вообще не для Sbase.
sergey2x » 09 ноя 2017, 13:19
karabas2011 писал(а):В файле spi_pins.h пины вообще не для Sbase.
Там только SS_PIN не понятен, остальные это SSP0 на котором LCD висит.
Проблема, имхо, в том, что внутренняя и внешняя карты висят на одном интерфейсе SSP1.
karabas2011 » 09 ноя 2017, 16:24
sergey2x писал(а):karabas2011 писал(а):В файле spi_pins.h пины вообще не для Sbase.
Там только SS_PIN не понятен, остальные это SSP0 на котором LCD висит.
Проблема, имхо, в том, что внутренняя и внешняя карты висят на одном интерфейсе SSP1.
Там как external SPI объявлены пины которые идут как данные в LCD поэтому и артефакты на экране при втыкании флешки.
А закоментированы internal которые как раз и вынесены на разъём EXT2 сбейсы.
SS_PIN это типа SDcard select - и он на ext2 разведён как 0.28 а не как у них.
Можно вооще всё переназначить и всё равно будет нормально грузиться с системной флешки.
можно отцепить дисплей нафиг и оставить один кардридер - но он один фиг не работает.
при ините сдкарты идёт попытка проинитить c sdss - если облом и lcd_sdss на другом пине то вторая попытка инита на lcd_sdss
и если тоже облом то досвиданья
demonx » 09 ноя 2017, 22:49
У меня заработал дисплей когда я в spi_pins.h прописал:
#define SCK_PIN P0_15
#define MISO_PIN P0_18
#define MOSI_PIN P0_17
#define SS_PIN P0_16
#define SDSS SS_PIN
sergey2x » 10 ноя 2017, 10:31
В
chanfs\mmc_ssp.c
usb\mscuser.cpp
идёт работа с "системной" флешкой, для интерфейса USB<->SD. И параллельно "надстройка" в виде марлина на этих пинах должна с экранной флешкой общаться, но что-то не заводится...
karabas2011 » 10 ноя 2017, 12:02
demonx писал(а):У меня заработал дисплей когда я в spi_pins.h прописал:
#define SCK_PIN P0_15
#define MISO_PIN P0_18
#define MOSI_PIN P0_17
#define SS_PIN P0_16
#define SDSS SS_PIN
Так эта хрень там уже и так изначально прописана. Она на дисплей не влияет. Он работает с ходу. Посмотри на разводку EXT1/EXT2
Добавлено спустя 1 минуту 28 секунд:sergey2x писал(а):В
chanfs\mmc_ssp.c
usb\mscuser.cpp
идёт работа с "системной" флешкой, для интерфейса USB<->SD. И параллельно "надстройка" в виде марлина на этих пинах должна с экранной флешкой общаться, но что-то не заводится...
Отож. Намутили где-то с spi. А выключаешь софтовый - перестаёт компилиться
Добавлено спустя 3 минуты 13 секунд:alexxy писал(а):Как известно одна из популярных прошивок для 3D принтеров Marlin обзавелась поддержкой 32битных контроллеров на базе следующих чипов:
[*] Радуемся Marlin на 32битной борде [/list]
Флеха дисплейная доступна?
demonx » 10 ноя 2017, 14:08
karabas2011 писал(а):demonx писал(а):У меня заработал дисплей когда я в spi_pins.h прописал:
#define SCK_PIN P0_15
#define MISO_PIN P0_18
#define MOSI_PIN P0_17
#define SS_PIN P0_16
#define SDSS SS_PIN
Так эта хрень там уже и так изначально прописана. Она на дисплей не влияет. Он работает с ходу. Посмотри на разводку EXT1/EXT2
В твоем коментарии не нуждался. Написал для людей у кого как у меня discount full graphic display подключен к MKS SBase. В исходнике другие пины, видимо под Re-Arm.
karabas2011 » 10 ноя 2017, 17:10
Подцепил к sbase дисплей MKS MINI12864 как AZMSZ или VIKI2
- Код: Выделить всё • Развернуть
#if ENABLED(AZSMZ_12864) || ENABLED(VIKI2)
#define BEEPER_PIN P1_31
#define DOGLCD_A0 P1_23
#define DOGLCD_CS P1_22
#define BTN_EN1 P3_26
#define BTN_EN2 P3_25
#define BTN_ENC P1_30
#define LCD_SDSS P0_28
#define SD_DETECT_PIN P0_27
#define DEFAULT_LCD_CONTRAST 100
#endif
заработал и даже начал читать некоторые флешки, правда не все.
но отвалилось монтирование по USB
и при сохранении настроек вешает плату, хотя и успевает сохранить
spi_pins.h
- Код: Выделить всё • Развернуть
/** onboard SD card */
#define SCK_PIN P0_7
#define MISO_PIN P0_8
#define MOSI_PIN P0_9
#define SS_PIN P0_6
/** external */ /*
#define SCK_PIN P0_15
#define MISO_PIN P0_17
#define MOSI_PIN P0_18
#define SS_PIN P1_23
*/
#define SDSS -1 //SS_PIN
При откате на GLDC(discount full graphic display) те же самые флешки не читаются.
sergey2x » 11 ноя 2017, 14:43
При старте пины настроены на аппаратный SPI и как пины ввода/вывода не работают и софтовый SPI на них не пашет.
Костыли такие:
HAL\HAL_LPC1768\HAL_spi.cpp
- Код: Выделить всё • Развернуть
в блоке LPC_SOFTWARE_SPI
#include <lpc17xx_pinsel.h>
void spiBegin() {
PINSEL_CFG_Type PinCfg;
PinCfg.Funcnum = 0; //!
PinCfg.OpenDrain = 0;
PinCfg.Pinmode = 0;
PinCfg.Pinnum = LPC1768_PIN_PIN(SCK_PIN);
PinCfg.Portnum = LPC1768_PIN_PORT(SCK_PIN);
PINSEL_ConfigPin(&PinCfg);
PinCfg.Pinnum = LPC1768_PIN_PIN(MISO_PIN);
PinCfg.Portnum = LPC1768_PIN_PORT(MISO_PIN);
PinCfg.Pinnum = LPC1768_PIN_PIN(MOSI_PIN);
PinCfg.Portnum = LPC1768_PIN_PORT(MOSI_PIN);
PINSEL_ConfigPin(&PinCfg);
SET_OUTPUT(SCK_PIN);
SET_INPUT(MISO_PIN);
SET_OUTPUT(MOSI_PIN);
}
HAL\HAL_LPC1768\spi_pins.h
- Код: Выделить всё • Развернуть
#define SCK_PIN P0_7
#define MISO_PIN P0_8
#define MOSI_PIN P0_9
#define SS_PIN P0_28
Системная флешка по USB становится невидна.
iYw682w » 11 ноя 2017, 14:56
Не могу найти где ток в конфигурации настраивается на встроенные драйвера у MKS sbase v1.3?
karabas2011 » 13 ноя 2017, 13:23
sergey2x писал(а):При старте пины настроены на аппаратный SPI и как пины ввода/вывода не работают и софтовый SPI на них не пашет.
Костыли такие:
HAL\HAL_LPC1768\HAL_spi.cpp
- Код: Выделить всё • Развернуть
в блоке LPC_SOFTWARE_SPI
#include <lpc17xx_pinsel.h>
void spiBegin() {
PINSEL_CFG_Type PinCfg;
PinCfg.Funcnum = 0; //!
PinCfg.OpenDrain = 0;
PinCfg.Pinmode = 0;
PinCfg.Pinnum = LPC1768_PIN_PIN(SCK_PIN);
PinCfg.Portnum = LPC1768_PIN_PORT(SCK_PIN);
PINSEL_ConfigPin(&PinCfg);
PinCfg.Pinnum = LPC1768_PIN_PIN(MISO_PIN);
PinCfg.Portnum = LPC1768_PIN_PORT(MISO_PIN);
PinCfg.Pinnum = LPC1768_PIN_PIN(MOSI_PIN);
PinCfg.Portnum = LPC1768_PIN_PORT(MOSI_PIN);
PINSEL_ConfigPin(&PinCfg);
SET_OUTPUT(SCK_PIN);
SET_INPUT(MISO_PIN);
SET_OUTPUT(MOSI_PIN);
}
HAL\HAL_LPC1768\spi_pins.h
- Код: Выделить всё • Развернуть
#define SCK_PIN P0_7
#define MISO_PIN P0_8
#define MOSI_PIN P0_9
#define SS_PIN P0_28
Системная флешка по USB становится невидна.
Пару дней назад они пофиксили новую систему нумерации пинов
теперь в spi_pins.h можно просто закоментить
//#define LPC_SOFTWARE_SPI
и по идее врубится хардварный SPI в расшареном режиме.
Я попробовал - MKSный дисплей вешается на экране приветствия. Плата работает и монтируется по USB. Развязывать селекты не удаётся. Гдето селект на дисплей жёстко забит.
sergey2x » 14 ноя 2017, 11:45
karabas2011 писал(а):Пару дней назад они пофиксили новую систему нумерации пинов
теперь в spi_pins.h можно просто закоментить
//#define LPC_SOFTWARE_SPI
и по идее врубится хардварный SPI в расшареном режиме.
Я попробовал - MKSный дисплей вешается на экране приветствия.
Плата работает и монтируется по USB.
Видел. Не работает.
karabas2011 писал(а):Развязывать селекты не удаётся. Гдето селект на дисплей жёстко забит.
Имхо сложнее всё.
Обмен USB<->SD идёт в прерываниях от USB как я понял, и одним SS тут не обойтись.
Вообще проект тёмный, SPI взаимодействие в тысяче мест, и всё вроде работает пока не появляется два слейва на одной шине.
Добавлено спустя 14 минут 51 секунду:iYw682w писал(а):Не могу найти где ток в конфигурации настраивается на встроенные драйвера у MKS sbase v1.3?
Configuration_adv.h
- Код: Выделить всё • Развернуть
#define DIGIPOT_I2C
#define DIGIPOT_I2C_MOTOR_CURRENTS { 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0 } // AZTEEG_X3_PRO
Работоспособность не проверял.
ales2k » 03 дек 2017, 14:03
Запустил в опытное производство платку под 32x битный марлин на STM32F405VGT6
RAM - память, 192 кБайт
Тактовая частота, 168 мГц
Размер программной памяти, 1024 кБайт
Архитектура Cortex M4
Размеры 10*10 см
На борту
5 независимых осей со сменными драйверами
3 Мощных транзистора
3 Выхода под вентиляторы
3 Входа под терморезисторы
4 Входа под конечники + вход под Z пробу
2 SPI для термопар или других устройств
2 СOM порта
EXT1 и EXT2 в формате GLCD//SD
1 I2C
1 Servo
1 SWD - отладочный порт