Кто-нибудь использовал Shield Buddy (вместо Arduino Mega2560) в качестве хост-платы RAMPS 1.4?

Я несколько раз читал1, что Arduino Mega может изо всех сил выполнять задачи, необходимые для управления 3D-принтером, так как чип AVR работает на пределе своих возможностей, и именно поэтому некоторые производители отошли от ATmega2560, чтобы сделать пользовательские (и интегрированные) платы контроллера с использованием процессоров ARM.

Только что увидев последний ответ на этот вопрос, Многопоточность с Arduino, на сайте Arduino SE, я задался вопросом, использовал ли кто-нибудь Shield Buddy в сочетании со стандартной платой RAMPS 1.4?

Shield Buddy

Он совместим с Arduino Mega (и Arduino IDE - после установки соответствующих дополнений), но имеет гораздо более быстрый трехъядерный процессор. Очевидно, что будет использоваться только одно ядро, а два других будут работать на холостом ходу, но даже в этом случае производительность, по-видимому, намного лучше.

См. Привнесение многоядерности в мир Arduino с помощью ShieldBuddy TC275.

Если у кого-то есть опыт использования этой платы, я хотел бы знать, была ли она успешной или нет? Я не понимаю, почему этого не должно быть, хотя прошивка Marlin потребует перекомпиляции для процессора Aurix TC275. Будет ли замечено какое-либо улучшение? Стоит ли платить высокую цену в 89 фунтов стерлингов?


1 Одним из мест была 3D-печать: Электронные платы:

Хотя они работают для того, для чего предназначены, есть несколько ограничений. Дуги и круги немного странно программировать, и использование этих плат для чего-то другого, кроме декартова 3D–принтера - станка с ЧПУ или лазерного резака, например, – немного необычно.

, 👍4

Обсуждение

Дело не только в перекомпиляции Marlin. Вам придется переписать большую его часть. Он может быть совместим с Arduino IDE, но это не значит, что вы можете просто запустить на нем прошивку, предназначенную для ATmega2560. Все тайминги (например, импульсы, посылаемые на шаговые двигатели) будут отключены, если вам вообще удастся заставить его скомпилироваться., @Tom van der Zanden

@TomvanderZanden - о, хорошо, спасибо. Я еще не смотрел исходный код Marlin, поэтому не знал об этом., @Greenonline

В настоящее время я пытаюсь портировать Marlin RC6 на ShieldBuddy. Мне удалось получить большую часть его для компиляции, и я преобразовал большую часть ассемблера AVR в C (TC275 настолько быстр, что ассемблерный код не нужен!). С чем у меня возникают трудности, так это с прерываниями. Я вижу, что есть прерывание для последовательного приема и есть прерывание timer0 для шагового драйвера. Есть ли другие? Кроме того, на какой частоте выполняется прерывание timer0? Я делаю эту работу в Eclipse, но использую Arduino/ShieldBuddy HAL. Я был бы рад любой помощи, которую кто-либо может оказать!!!, @Mike Beach

@MikeBeach На самом деле это не то место, чтобы задавать такие вопросы., @Tom van der Zanden

@MikeBeach - Хорошая работа, я определенно хотел бы услышать, как продвигается эта работа. Как только вы заставите его работать, вы должны опубликовать ответ на мой вопрос... :-) Однако в то же время ваш вопрос, возможно, лучше подходит для StackExchange Arduino, там есть несколько умных парней, которые, возможно, знают ответ (хотя они, возможно, больше ориентированы на ATmega)... Или, если это не удастся, может быть, StackOverflow?, @Greenonline


1 ответ


Лучший ответ:

2

Это не так просто, как вы предполагаете.

Вы не можете просто перекомпилировать Marlin для другого устройства. Вам придется переписать большую его часть. Он может быть совместим с Arduino IDE, но это не значит, что вы можете просто запустить на нем прошивку, предназначенную для ATmega2560. Все тайминги (например, импульсы, посылаемые на шаговые двигатели) были бы выключены, если бы вам вообще удалось их скомпилировать.

В качестве примеров приведем некоторые фрагменты кода от Marlin, которые были бы сломаны, так как они написаны непосредственно в сборке AVR:

#define DELAY_1_NOP  __asm__("nop\n\t")
#define DELAY_2_NOP  __asm__("nop\n\t" "nop\n\t")

[...]

// обеспечить задержку 100ns - немного больше нормально
asm("nop");//50ns на 20MHz, 62.5ns на 16MHz
asm("nop");//50ns на 20MHz, 62.5ns на 16MHz

[...]

#define MultiU24X32toH16(intRes, longIn1, longIn2) \
asm volatile ( \
             "clr r26 \n\t" \
             "mul %A1, %B2 \n\t" \
             "mov r27, r1 \n\t" \
             "mul %B1, %C2 \n\t" \
             "movw %A0, r0 \n\t" \
             "mul %C1, %C2 \n\t" \
             "add %B0, r0 \n\t" \
             "mul %C1, %B2 \n\t" \
             "add %A0, r0 \n\t" \
             "adc %B0, r1 \n\t" \

,