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

Подписаться на 3Dtoday
Rejdok
Идет загрузка
Загрузка
19.03.17
11382
52
Техничка
33
Привет всем!
Это мой первый пост. И т.к. я подумал, что история сборки очередного 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
33
Комментарии к статье

Комментарии

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

Чуть помедленнее пожалуйста.
Пусть будет точнее и проще. Во всех смыслах этих слов.
20.03.17 в 07:33
0
Чуть помедленнее пожалуйста.
Слишком плотно текст сжал, нужно расписывать подробнее? Или это касается скорости написания статьи? :)
Пусть будет точнее и проще. Во всех смыслах этих слов.
Постараюсь. :)
14.05.17 в 12:24
0
и к RAMPS FD
18.05.18 в 15:41
0
Продолжение немного задержалось, будет? Очень надеюсь...
В Klipper добавили поддержку STM32F103, очень хорошая связка получиться.
19.03.17 в 10:01
2
Конечно прикручивайте все что используется на принтере и описывайте все это.
Сделаете великое дело для человечества.
Сколько можно уже на этих медляках кататься.

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

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

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

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

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

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

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

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

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

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

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

be6ae415c71fcc61ffecb310ef30800b.jpg


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

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

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

Есть пока только dev board. И несколько концептов будущих плат.
Готов подключиться к проекту как по программной, так и по аппаратной части.
Буду рад. Советую сразу смотреть исходники на гите, постараюсь сегодня их выложить.
21.03.17 в 18:24
0
А что за среда программирования? (Я лично IAR использую)
22.03.17 в 10:41
0
Sw4stm32 она основана на eclipce, бесплатна и проста для начала.
20.03.17 в 16:46
0
Тема интересная, но ракурс не тот... Подскажите, стоит ли сразу начинать играться с LV8729 и 0.9 step 1А шаговыми двигателями? Или пойти совсем далеким путём с сервоприводами... Есть ли хоть какие-то проекты с сервоприводами?
21.03.17 в 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.03.17 в 14:29
0
Мне лично нужна скорость и тишина. Насколько я понимаю главные проблемы в достижении скорости следующие:
1. Пропуски из-за тормоза 8 бит, которые легко решаются с помощью 32 бит.
2. Пропуски, которые происходят из-за слишком большой скорости для шагового двигателя.
3. Точность, которая теряется из-за механики.

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

Информации как действительно добиться быстрой печати фактически не рассматриваются нигде. Насколько я понимаю, нужно применять сервоприводы и другие алгоритмы работы. А главное и механика должна способствовать удержанию.
22.03.17 в 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.03.17 в 12:57
0
Спасибо за развернутый ответ. Как на счёт перевода статьи по ссылке на этом сайте в роли второй темы?
23.03.17 в 17:56
0
Рад помочь!
Хм. Пока не знаю. Можно попробовать. Но не уверен, что найду на это время в ближайший месяц.
20.03.17 в 16:46
1
Может тут что интересное для себя найдете:
  1. https://github.com/MakerLabMe/Marlin_STM32
  2. https://github.com/St3dPrinter/Marlin4ST
Надеюсь, поможет в ваших изысканиях. ;)
21.03.17 в 09:04
0
Спасибо! Именно эти проекты, в свое время подтолкнули меня к написанию своего порта. :)
21.03.17 в 00:46
1
покопайте сорцы Sailfish 7.7+ там в отличие от марлина намного качественнее работа с микроускорениями и стабильнее печать на 1/32 даже на меге...
21.03.17 в 00:47
0
правда порта на stm нет но можно как минимум посмотреть сорцы...
21.03.17 в 09:06
0
Хм. Хорошо, посмотрю. Вы случайно не знаете названия алгоритмов, которые используются в планировщике передвижений и где про них прочесть можно?
21.03.17 в 09:32
0
в гугл ообществах можно найти и описания и названия, давно там не рылся...
есть группы в которых и марлин и салли обсуждались в 2011 году сейчас ссылки быстро не смог найти...
22.03.17 в 12:08
0
Хм. Спасибо, поищу.
21.03.17 в 17:57
0
Кстати, по поводу EEPROM: Когда частая перезапись данных не нужна, я выделяю последнюю страничку FLASH контроллера под свои нужды. Вот тебе и EEPROM)))
22.03.17 в 12:07
0
Спасибо. Уже думал над этим. Но пока не уверен, что это лучшее решение.
22.03.17 в 15:18
1
Ну тогда I2C и дешевый EEPROM, если жалко ресурс перезаписи FLASH или опасаетесь за надежность системы. Но мы такую систему развернули на приборах, используемых на АЭС. Правда для надежности у нас выделено три страницы: данные по умолчанию, страница буфер для записи, страница с действующими данными + CRC к каждой странице. По данной части вопросов не возникало.
23.03.17 в 17:55
0
Спасибо! Это действительно хорошая мысль.
23.03.17 в 20:19
0
У меня написан драйвер "EEPROM" под F103. Вроде на 407 немножко по другому. Сделать драйвер работы с FLASH?
24.03.17 в 23:45
0
Буду рад! Только, надо придумать, как сделать драйвер так, чтобы eeprom работал на линейках 1хх-4хх. Так как я хочу, чтобы порт работал на всех мк от stm32, начиная с cortex m3, заканчивая m4. Самым простым вариантом, как мне кажеться, будет использование HAL. Что скажите?
30.03.17 в 16:13
2
Открытое 32-х битное решение - это то, что давно всем нужно! Сделаете огромное доброе дело, если доведете до ума! Уже задумывался над разводкой своей "мультифункциональной платы с блэкджеком", останавливало отсутствие нормалтного ПО.
Заранее благодарю за работу! Надеюсь, сил и запала хватит! Удачи!
03.04.17 в 04:00
0
Спасибо!
19.03.18 в 11:53
0
Если будет интересно, могу описать процесс компиляции и настройки данной прошивки, а также подключение мк к RAMPS 1.4.

Очень интересно!!! Когда это всё можно будет лицезреть?Ещё можно с видео!!!!!
05.04.18 в 01:10
0
Тоже интересна тема. +За видео

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

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

Голова кабана. Литье

Моя версия Lego technic

машина для перевозки баллонов газа

Портал на базе камаза 5320 3D печать

Еще одна разборная катушка для лески, пластика в мотках и так далее.

Сделал плутоний из пластика BestFilament :)