Порт прошивки Marlin под stm32 или еще один 32-ух битный контроллер.

Подписаться на 3Dtoday
Rejdok
Идет загрузка
Загрузка
19.03.17
6553
49
Техничка
29
Привет всем!
Это мой первый пост. И т.к. я подумал, что история сборки очередного REPSTRAPа будет не особо интересной. Решил рассказать о своем опыте использования 32-ух битной электроники.

Начну сначала о том, зачем мне нужен 32-ух битный контроллер. В прошивке Marlin есть участок кода, который при достижении частоты STEP импульсов в 10кгц начинает выдавать по 2 или 4 импульса на прерывание. Это приводит к тому, что STEP импульсы следуют не через равный промежуток времени. При какой скорости достигается данная частота? Тут все просто скорость = частота / шаг/мм. Я использовал DRV8825 с микрошагом 1/32, ремень GT2, шкив на 20 зубов и шаговый двигатель с углом поворота 1.8 градуса на шаг. Получается, что в моем случае неравномерность STEP импульсов начинается на скорости -> 10000 = 160*скорость -> скорость = 62.5 мм/с. Это довольно низкая скорость, и т.к. неравномерность STEP импульсов могла сказаться на качестве печати, было принято решение о переходе на 32 битный мк.

Дальше я начал искать какие у меня есть варианты. А вариантов было несколько. Первый и самый простой покупка Arduino DUE. Следующий вариант Smoothie. Ну и последний адаптировать Marlin под другой мк. Smoothie довольно быстро отпал, т.к. информации по данной прошивке мало. Arduino DUE хороша, но за те же деньги можно было взять более производительный мк и поиграться с ним. В итоге выбор пал на мк stm32f4zet6. И за пару недель неспешной работы был написан порт Marlin.

Теперь что касается самого порта.
Что работает:
Двигатели, нагреватели, вентиляторы, USB, термодатчик (пока только один, т.к. мне сейчас больше не нужно, но это легко исправить).
Что точно не работает:
EEPROM( а точнее сохранение конфигурации после выключения питания, т.к. сам мк не имеет EEPROM), LCD дисплей, WI-FI, SD карат.
Что я не проверял:
Эндстопы, датчик нити, автокалибровку стола.
Что планируется в ближайшее время:
Добавить возможность сохранения настроек, починить чтение с SD карты,подключить к принтеру LCD дисплей, прикрутить автоуровень на тензодатчике.

В принципе с этим портом можно использовать любой мк от stm32 начиная с линейки M3, нужно будет только переопределить пины в файлах port.cpp и main.c.

Что касается работы самого принтера. Можно точно сказать, что он стал тише. Субъективно качество печати возросло, на поверхности стало меньше волн. Сравнение качества печати atmega2560 и своего порта я проведу, когда получу трапецеидальные винты.

Прошивка лежит тут https://yadi.sk/d/-Qxd3It33EK42H и в скором времени будет лежать тут https://github.com/Rejdok/STM32-Marlin-Port .

Если будет интересно, могу описать процесс компиляции и настройки данной прошивки, а также подключение мк к RAMPS 1.4.

Спасибо за внимание!
Подписаться на 3Dtoday
29
Комментарии к статье

Комментарии

19 Мар 09:39
1
подключение мк к RAMPS 1.4.
да, опишите пожалуйта. К f429 попробую прикрутить
19 Мар 10:25
1
Ок. Постараюсь написать пост на неделе.
19 Мар 17:53
0
RAMPS много у кого есть. Даже у меня в Hercules New.
Не торопитесь писать. Могут быть описки.

Чуть помедленнее пожалуйста.
Пусть будет точнее и проще. Во всех смыслах этих слов.
20 Мар 07:33
0
Чуть помедленнее пожалуйста.
Слишком плотно текст сжал, нужно расписывать подробнее? Или это касается скорости написания статьи? :)
Пусть будет точнее и проще. Во всех смыслах этих слов.
Постараюсь. :)
14 Май 12:24
0
и к RAMPS FD
19 Мар 10:01
2
Конечно прикручивайте все что используется на принтере и описывайте все это.
Сделаете великое дело для человечества.
Сколько можно уже на этих медляках кататься.

Сам пока пилю на DUE в силу не достатка знаний для перелопачивания прошивки в сторону 32-х биток и времени для получения их в полном объеме.
19 Мар 11:15
1
А чем вам не понравилась готовая под DUE Repetier-firmware?
Или, если рассматривать 32bit Marlin, чем MK4DUO не подошла?

Вопрос не праздный. У меня на DUE сейчас стоит Repetier.
Рассматриваю варианты, чтоб было с чем сравнивать. Когда сравнить не с чем, то и пряники сладкие.
14 Май 12:33
0
Что-то пропустил я коммент.

Тут вопрос в производительности, если запилить под более мощные контроллеры то и возможности расширяются.

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

Вы указывали номера или использовали по умолчанию?
14 Май 14:39
0
Вы указывали номера или использовали по умолчанию?
Что-то оставил, а что-то указывал непосредственно. В основном касается пинов для дополнительных вентиляторов, как например обдув на плату поставил, на всякий случай, и при необходимости могу задействовать. По термодатчикам они и по-умолчанию правильно стоят.
14 Май 14:42
0
Спасибо.
19 Мар 10:17
4
Smoothie довольно быстро отпал, т.к. информации по данной прошивке мало.
А, т.е. сорцы на гитхабе это теперь мало? Оок..
Кстати, по моему опыту ковыряния grbl, Marlin и Смузи - смузи написан нормальними программерами, а в марлине рукожопость зашкаливает.
19 Мар 10:51
1
Ну. Исходники это хорошо, но аудитория у смузи поменьше будет. В ру сегменте не популярен особо, статей о нем мало. Поправьте, если я ошибаюсь.
Потом еще один плюс в сторону марлина ушел потому, что у него больше больше плюшек реализовано. Например, есть поддержка lcd дисплея, чего я не нашел в смузи, но может я просто плохо искал.
Что касается качества исходников, тут я соглашусь. Но мой код, думаю, будет не сильно лучше марлинского, так как это мой первый проект и не будет так сильно выделяться :).
19 Мар 11:01
2
код, думаю, будет не сильно лучше марлинского
Вопрос не в качестве кода, а в реализации алгоритмов. В марлине планировщик перемещения писал обкуренный индус. Глупо просто за счет разницы алгоритмов терять 10% производительности принтера.

поддержка lcd дисплея, чего я не нашел в смузи
Ага :)
19 Мар 12:12
1
.

Ага :)
Каюсь. Видимо плохо искал.

Не подскажите название алгоритма планировщика, используемого в смузи, и где про него прочесть можно? Думаю, я адаптирую его под марлин.

И еще одни вопрос. Какие еще алгоритмы в марлине Вам кажутся не оптимальными, по сравнению со смузи?
19 Мар 16:11
2
Ну адаптировать -вряд ли. Логика другая. Именно из-за этого в Марлине можно делать mixing extruder, а в Смузи никак не получается. Это, кстати, о ложке дегтя :(
20 Мар 07:28
0
Эх. Оставлю тогда планировщик в покое. :)
19 Мар 18:09
1
Как всегда, по своему обычаю, поддержу как могу и подскажу автору - ТС - разработчику:

А никто не пробовал понять "обкуренного индуса" - программиста Марлина?

Может там - совсем иная идеология имелась в виду...
В случае затыка - поглядеть вот на это -

be6ae415c71fcc61ffecb310ef30800b.jpg


минут так эдак пятнадцать, а потом - взять и переписать проблемный код...
Индусы - они Его - уважают...
20 Мар 08:01
0
понять "обкуренного индуса"
Ух. Это довольно сложная задача.
В случае затыка - поглядеть вот на это -
За совет спасибо. Надо будет попробовать. Глядишь, стану чутка ближе к индусам, пойму чего они хотели. :)
19 Мар 19:30
0
Очень интересная тема. В стародавние времена прошивка Teacup могла зашивать Ардуинки на 328 чипе, поскольку для одного экструдера без стола там вполне хватало ног. И вот в связи с этим давно терзает меня мысль - нельзя ли адаптировать Марлин под копеечный STM32F103C8T6
20 Мар 07:37
0
В принципе это возможно, главное что бы хватало ног. А ног хватает. Тогда надо просто переопределить порты в файлах main.c и port.c. Я скоро напишу, как это сделать.
20 Мар 13:40
0
День добрый, пытаюсь собрать прошивку используя мейк-файл, ругается на отсутствие stm32f4xx_3dprinter_sd.h, не подскажите, где его искать?
ПС:
Беда вот с этим:
#ifdef USE_STM324x9I_EVAL
#include "stm324x9i_eval_sd.h"
#else
#include "stm32f4xx_3dprinter_sd.h"
#endif
20 Мар 14:10
0
Здравствуйте! Makefile сами писали? Если да, то не включайте в сборку папку FatFs и файлы
9a30ae14b4ec487896eccc791c2e222a.bmp
.
20 Мар 14:20
0
У меня есть скрипт который из ws4stm32 проекта, который кубик создает, делает мейк-файл.
В общем, я почти собрал, нашел не достающие файлы в проекте stm32_testing уважаемого canvanquyen.
Правда, собрался не до конца, говорит нет правила для сборки цели.
Если интересно, могу и мейкфайл скинуть и скрипт.
20 Мар 14:29
0
Дело в том, что эти файлы не нужны для сборки проекта. Они нужны для поддержки SD карты, которую я еще не успел подключить.
Если интересно, могу и мейкфайл скинуть и скрипт.

Давайте.
20 Мар 15:22
2
Четвертый Cortex - это правильно. Натыкался на статью, где человек исследовал обработку float в Marline. А F4 имеет FPU! Когда начал собирать принтер, как раз думал, что хорошо бы было на STM перейти (на работе все устройства на них делаем). Плата уже есть?

Я к тому, что сам думал делать порт, но пока только собрал принтер и отлаживаю техпроцесс. Готов подключиться к проекту как по программной, так и по аппаратной части. Попробую на неделе посмотреть исходники.
21 Мар 08:17
0
Да, fpu есть, это одни из причин по которой я брал именно m4. Но я не знаю, дает ли он ощутимый прирост.
Плата уже есть?

Есть пока только dev board. И несколько концептов будущих плат.
Готов подключиться к проекту как по программной, так и по аппаратной части.
Буду рад. Советую сразу смотреть исходники на гите, постараюсь сегодня их выложить.
21 Мар 18:24
0
А что за среда программирования? (Я лично IAR использую)
22 Мар 10:41
0
Sw4stm32 она основана на eclipce, бесплатна и проста для начала.
20 Мар 16:46
0
Тема интересная, но ракурс не тот... Подскажите, стоит ли сразу начинать играться с LV8729 и 0.9 step 1А шаговыми двигателями? Или пойти совсем далеким путём с сервоприводами... Есть ли хоть какие-то проекты с сервоприводами?
21 Мар 09:04
1
Тема интересная, но ракурс не тот...
В плане?
Подскажите, стоит ли сразу начинать играться с LV8729 и 0.9 step 1А шаговыми двигателями?
Хм. Дело в том, что начиная с микрошага 1/16 вы не получите ощутимого прироста к точности. А большие шаги используются для снижения шума и вибраций. Насколько я понимаю, вы хотите получить максимальную точность используя двигатели с шагом 0.9 градусов. Но для точности я бы посоветовал в первую очередь начать с хорошей механики. Вот смотрите, используя ремень gt2, шкив на 20 зубов, шд 1.8 градус/шаг и микрошаг 1/16 можно получить точность перемещения = 1/80 мм = 0,0125 мм(тонкий человеческий волос 0,05 мм). А если взять двигатель с 0,9 градус/шаг, то макс точность перемещения будет = 1/160 мм. Довольно сложно сделать механику, которая сможет печатать с точностью 1/80 мм, не говоря уже про 1/160 мм. Так, что пока механика не сможет обеспечить точность перемещения 1/80 мм переходить на шд с шагом в 0.9 градус/шаг смысла большого нет. Да и шд с током в 1А маловато, мне кажется для принтера. Если я, вдруг, ошибся с микрошагом, после которого начинает расти точность, то расчет легко поправить точность = 1/( (шаг/мм) * микрошаг).
Или пойти совсем далеким путём с сервоприводами...

Основное отличие сервопривода от шаговика, насколько я помню, заключается в том, что сервопривод знает точно ли он сделал шаг. Обычно шаговики на принтере не пропускают шаги. Так что вряд ли сервоприводы необходимы.
Есть ли хоть какие-то проекты с сервоприводами?

Проекты есть, они легко находятся по запросу: " 3d printer servo motor ".
21 Мар 14:29
0
Мне лично нужна скорость и тишина. Насколько я понимаю главные проблемы в достижении скорости следующие:
1. Пропуски из-за тормоза 8 бит, которые легко решаются с помощью 32 бит.
2. Пропуски, которые происходят из-за слишком большой скорости для шагового двигателя.
3. Точность, которая теряется из-за механики.

3 пункт можно дорабатывать сколько угодно, но фактически ситуацию можно только испортить. Валы имеют свои свойства, ролики и рельсы свои. Где-то лучше большее ускорение, где-то меньшее.

Информации как действительно добиться быстрой печати фактически не рассматриваются нигде. Насколько я понимаю, нужно применять сервоприводы и другие алгоритмы работы. А главное и механика должна способствовать удержанию.
22 Мар 12:03
2
1. Пропуски из-за тормоза 8 бит, которые легко решаются с помощью 32 бит.
На самом деле пропусков шагов нет, просто частота шагов ограничена,если использовать микрошаги. От этого и может упасть скорость. Планка скорости для шага 1/32 примерно 250 мм/с. А для шага 1/128 62.5 мм/с.
2. Пропуски, которые происходят из-за слишком большой скорости для шагового двигателя.
Тут пропуски происходят скорее не из-за того, что скорость слишком большая, а из-за того, что у двигателя не хватает мощности для того, что бы изменить направление движения. С этим можно бороться несколькими способами: снижением веса каретки( например перейдя на боуден), установкой более мощных двигателей, повышением тока.
Информации как действительно добиться быстрой печати фактически не рассматриваются нигде.
На самом деле информация есть, но она разбросана. Принтеры на базе corexy могут достаточно хорошо печатать на скоростях 200-300 мм/с, дельты 150-300. Это довольно большие скорости. Можно взять уже готовый проект и повторить его. Вот неплохой цикл статей с теорией и настройко прошивки. Я на своем самосборе(3 prusa из фанеры) достиг скорости в 100 мм/с, дальше рама просто не позволяет. Я хочу добиться стабильной скорости печати 200-300 мм/с, но для этого надо собирать другой принтер.
22 Мар 12:57
0
Спасибо за развернутый ответ. Как на счёт перевода статьи по ссылке на этом сайте в роли второй темы?
23 Мар 17:56
0
Рад помочь!
Хм. Пока не знаю. Можно попробовать. Но не уверен, что найду на это время в ближайший месяц.
20 Мар 16:46
1
Может тут что интересное для себя найдете:
  1. https://github.com/MakerLabMe/Marlin_STM32
  2. https://github.com/St3dPrinter/Marlin4ST
Надеюсь, поможет в ваших изысканиях. ;)
21 Мар 09:04
0
Спасибо! Именно эти проекты, в свое время подтолкнули меня к написанию своего порта. :)
21 Мар 00:46
1
покопайте сорцы Sailfish 7.7+ там в отличие от марлина намного качественнее работа с микроускорениями и стабильнее печать на 1/32 даже на меге...
21 Мар 00:47
0
правда порта на stm нет но можно как минимум посмотреть сорцы...
21 Мар 09:06
0
Хм. Хорошо, посмотрю. Вы случайно не знаете названия алгоритмов, которые используются в планировщике передвижений и где про них прочесть можно?
21 Мар 09:32
0
в гугл ообществах можно найти и описания и названия, давно там не рылся...
есть группы в которых и марлин и салли обсуждались в 2011 году сейчас ссылки быстро не смог найти...
22 Мар 12:08
0
Хм. Спасибо, поищу.
21 Мар 17:57
0
Кстати, по поводу EEPROM: Когда частая перезапись данных не нужна, я выделяю последнюю страничку FLASH контроллера под свои нужды. Вот тебе и EEPROM)))
22 Мар 12:07
0
Спасибо. Уже думал над этим. Но пока не уверен, что это лучшее решение.
22 Мар 15:18
1
Ну тогда I2C и дешевый EEPROM, если жалко ресурс перезаписи FLASH или опасаетесь за надежность системы. Но мы такую систему развернули на приборах, используемых на АЭС. Правда для надежности у нас выделено три страницы: данные по умолчанию, страница буфер для записи, страница с действующими данными + CRC к каждой странице. По данной части вопросов не возникало.
23 Мар 17:55
0
Спасибо! Это действительно хорошая мысль.
23 Мар 20:19
0
У меня написан драйвер "EEPROM" под F103. Вроде на 407 немножко по другому. Сделать драйвер работы с FLASH?
24 Мар 23:45
0
Буду рад! Только, надо придумать, как сделать драйвер так, чтобы eeprom работал на линейках 1хх-4хх. Так как я хочу, чтобы порт работал на всех мк от stm32, начиная с cortex m3, заканчивая m4. Самым простым вариантом, как мне кажеться, будет использование HAL. Что скажите?
30 Мар 16:13
2
Открытое 32-х битное решение - это то, что давно всем нужно! Сделаете огромное доброе дело, если доведете до ума! Уже задумывался над разводкой своей "мультифункциональной платы с блэкджеком", останавливало отсутствие нормалтного ПО.
Заранее благодарю за работу! Надеюсь, сил и запала хватит! Удачи!
3 Апр 04:00
0
Спасибо!

Для написания комментариев, пожалуйста, авторизуйтесь.

Читайте в блогах

Новый центр аддитивных технологий в Жуковском получит промышленные 3D-принтеры BeAM

О нанесении клея.

Китайская прюша в кубе

Как собрать 3д принтер за 3 часа? Часть 3.

Вторая жизнь Ноутбуку Samsung NP530U3B

Обдув для prusa i4