MKS DLP - продолжаем разговор о кастомной прошивке. Часть 2 - шаговый мотор

AndyBig
Идет загрузка
Загрузка
14.08.2020
1244
34
печатает на Anet A8
Личные дневники

Подпишитесь на автора

Подпишитесь на автора, если вам нравятся его публикации. Тогда вы будете получать уведомления о его новых постах.

Отписаться от уведомлений вы всегда сможете в профиле автора.

9

Часть вторая. Первая тут - https://3dtoday.ru/blogs/andybig/mks-dlp-prodolzhaem-razgovor 

Ну что ж, едем дальше. После устаканивания главных принципов интерфейса я решил взяться за управление шаговым мотором. 

Я наивно полагал, что сейчас просто выдерну исходник управления мотором из оригинальной прошивки и на этом вопрос исчерпан. Ага, щаззз... 

Через минут 20 после начала копания в оригинальной прошивке на предмет управления мотором у меня зародилось странное подозрение. Но я копал еще часа полтора - все никак не мог поверить этому подозрению, потому что ну это какой-то абсурд получался. И все же был вынужден смириться с реальностью - в оригинальной прошивке действительно полный абсурд, в который я не хотел верить. 

Итак.... Китайцы, не мудрствуя лукаво, впихнули в прошивку весь Мерлин только для того, чтобы управлять одним мотором!! Да-да, со всеми осями, экструдерами, нагревателями, калибровками, выравниваниями стола и всем прочим! В составе оригинального проекта - весь исходный Мерлин целиком! Прошивка от MKS отправляет Мерлину текстовые команды для управления осью! У меня просто нет слов, чтобы описать что я чувствовал в тот момент. Это как если бы кто-то взял КАМАЗ для того, чтобы перевозить пару кирпичей. И подъемный кран, чтобы грузить эти два кирпича в КАМАЗ. М-да...  

В общем, я бросил оригинальные исходники, взял из Мерлина исходники управления мотором и начал пытаться отучить их от остального Мерлина, а заодно оставить в них только одну ось и больше ничего. Работы оказалось не на пару часов, как я надеялся. Осложняло дело еще и то, что я никогда в этот Мэрлин не лазил и не был в курсе как у него там все устроено, пришлось все это изучать. По ходу разборок пришлось еще вытащить из него исходники планировщика и обработки концевиков. Все это оказалось довольно сильно переплетено с остальными частями и чтобы все разобрать и сделать автономным, понадобилось много времени. До первого успешного запуска всех этих вырезанных частей в составе моей прошивки прошло, я провозился, пожалуй, с полный рабочий день. Но в конце концов оно заработало :)

Однако звук работы мотора был какой-то подозрительный и я полез в плату осциллографом. Осциллограф показал, что импульсы шагов идут на драйвер пачками по 2-8 штук с довольно большим промежутком между пачками. Почти весь день у меня ушел на поиски проблемы, но найти ее я так не смог. Пока ходишь по коду отладчиком - все хорошо, стоит запустить выполнение без остановок - пачки импульсов с промежутками.

Под конец я решил, что что-то не так кастрировал когда отучал этот кусок Мерлина от всех остальных его кусков. А кастрировать там пришлось ой как немало, так что в процессе мог и отрезать что-то лишнее. И начал все заново - опять выдрал из Мерлина исходники мотора, опять начал резать их... Только в этот раз уже взял исходники последней версии, а не от 2016 года, как в оригинальной прошивке. В свежей версии резать пришлось в полтора раза больше... Из 340 КБ оригинальных файлов после вырезания всего лишнего осталось всего 121 КБ. Мне пришлось внимательно просмотреть 340 КБ текста и аккуратно вырезать ненужные 220 КБ - работка та еще...

И вот момент истины - запуск мотора, тыканье осциллографом и... опять отдельные пачки импульсов. Сссс...ка...

Но в этот раз я нашел причину всего за пару-тройку часов :))) Это был мой косяк в совсем другом месте, но он влиял на поведение управления мотором :) Когда после исправления этого косяка я попробовал ради интереса подключить старые исходники, которые я резал в первый раз, они тоже неплохо заработали :) Но новые все же работали заметно лучше и равномернее, поэтому оставил их. В новой версии Мэрлина процесс генерации шагов заметно улучшили, причем оптимизировав его под разные платформы, в том числе и под STM32F4xx, который и стоит на этой плате.

А еще в новых исходниках была возможность включения ускорений по S-кривым, а не по линейной. Я попробовал. Действительно, очень неплохо получается, разгон при том же ускорении проходит быстрее, но вот для подъема платформы после засветки очередного слоя линейное ускорение, на мой взгляд, больше подходит, поэтому S-кривые я опять отключил.

После этого встала проблема плавной стыковки движений с разной скоростью.

Для начала поясню поверхностно как работает планировщик Мерлина. Кто уже знает - можете пропустить :) Основная программа выдает планировщику отрезки движений. Например, командует "ехать на координату 20 со скоростью 100" (рассматривать будем только одну ось), потом командует "ехать на координату 50 со скоростью 200". получается два отрезка движения - от текущего положения до 20, и потом от 20 до 50. Планировщик оценивает эти отрезки, исходя из заданных в настройках скорости, ускорения, шагов на мм и т.д. и формирует блоки-задания для процедуры-генератора шагов двигателя. Если вторая команда приходит еще до того, как генератор шагов начал отрабатывать первый отрезок, то планировщик пытается совместить эти два отрезка так, чтобы двигатель не останавливался. Если у второго отрезка скорость выше, то из конца первого отрезка он убирает замедление, а в начало второго отрезка добавляет ускорение. Получается, что первый отрезок начинает с нулевой скорости, ускоряется до своей номинальной скорости и едет пока не дойдет до второго отрезка. Второй отрезок подхватывает движение на текущей скорости и начинает ускорять до номинальной скорости второго отрезка. Если после второго отрезка команд нет, то в его конце происходит замедление до нулевой скорости.

Ну так вот, планировщик не хотел совмещать движения с разной скоростью, если у последующего отрезка скорость выше, чем у текущего. Если скорости у отрезков одинаковые - без проблем, мотор проходит их ровно, как один. Если у второго отрезка скорость меньше - тоже без проблем, мотор замедляется до скорости второго отрезка и едет без остановки. Но если у второго отрезка скорость выше, чем у первого, то мотор между этими отрезками замедляется до нуля.

Почему так происходит я в конце концов нашел и исправил, но понять почему этот код, из-за которого такое происходило, присутствовал в планировщике и как он не мешает работе в составе оригинального Мерлина - понять не смог. Ну да ладно, заработало - и хорошо :)

Что я вынес в настройки, которые планирую предоставить изменять самим пользователям:

  • основные настройки оси: направление движения, инверсия концевиков, шаги на мм
  • ограничения для минимальной и максимальной позиции оси, действуют только после хомления
  • разрешить или запретить движение оси ниже концевика
  • скорость "быстрого" движения при хомлении для грубого поиска концевика
  • скорость второго, "медленного" движения при хомлении для точного обнуления координат
  • отдельно ускорения для холостых перемещений и для режима печати
  • скорость холостых перемещений
  • дистанция подъема при постановке печати на паузу
  • рабочий ток мотора
  • уменьшенный ток удержания мотора при отсутствии движения
  • время после последнего движения до перехода на уменьшенный ток удержания, в режиме печати не работает

И несколько ограничений, которые будут жестко заданы в прошивке:

  • до хомления оси (пока принтер не знает реальных координат) скорость перемещений в три раза меньше заданной в настройках, сделано для того, чтобы не врезаться на высокой скорости в дисплей или в верхний ограничитель оси (если он вообще есть, а то платформа и с ходового винта слетит :))
  • при движениях на высоте меньше 30 мм скорость так же уменьшается в три раза от заданной в настройках если ось отхомлена, если же нет - она и так уменьшена, сделано для того, чтобы не расплескивать смолу быстрыми движениями и не создавать большое давление на дисплей вязкой смолой при быстром опускании платформы
  • из меню движения оси нельзя выйти если ось находится в движении, это для того, чтобы при необходимости быстро остановить ось кнопка остановки была под рукой

В интерфейс добавил еще одну кнопку шага - 0.05. Мне вот ее не хватает при калибровке Фотона :) 

Кроме того, значок домика на кнопке "Домой" отображает статус хомления - если оно было успешно произведено и принтер точно знает реальные координаты, значок становится зеленым.

Мотор я запустил больше недели назад, но вот с меню управления мотором закончил только сегодня. Пока еще не работает только кнопка установки нуля - в интерфейсе пока что не реализованы всплывающие окна с подтверждениями или вопросами, а для этой кнопки такое окно понадобится.

Хомление происходит стандартно - на первой, более быстрой скорости ось едет вниз пока не встретится с концевиком, после сего приподнимается на 3 мм и еще раз едет вниз до концевика на маленькой скорости, чтобы точно выставить 0. Если на момент начала хомления концевик сработан, то перед первым быстрым опусканием ось приподнимается на 20 мм. Если после начала хомления ось опустилась на значение максимальной высоты оси (из настроек), а концевик так и не встретился, хомление прерывается с ошибкой.

И снял видео, показывающее основные моменты работы меню и мотора :)

Подпишитесь на автора

Подпишитесь на автора, если вам нравятся его публикации. Тогда вы будете получать уведомления о его новых постах.

Отписаться от уведомлений вы всегда сможете в профиле автора.

9
Комментарии к статье

Комментарии

14.08.2020 в 23:43
0

Любопытный проект. Только это же совсем другое :)

15.08.2020 в 08:13
0

Я так понял, что только концевик нижний концевик опрашивается? а если у мя концевик в верху?

15.08.2020 в 08:40
0

На плате есть возможность подключения двух концевиков, оба опрашиваются. Нижний концевик - при движении вниз, верхний - при движении вверх. Но останов по концевикам происходит только пока ось не отхомлена, после этого действуют программные ограничения, заданные в настройках. Можно хомиться и по верхнему концевику, для этого в настройках надо изменить направление хомления. По умолчанию - вниз.

15.08.2020 в 08:46
0

Ну т.е. возможность такая есть? а то у меня только концевик максимум. Минимума нет.

15.08.2020 в 08:48
0

Да, такая возможность есть и она работает :)

15.08.2020 в 09:41
2

Жду с огромным нетерпением бету )) Записываюсь на очередь для испытаний на своей переделке из "чудо принтера" Photon Zero. Железо от Zero. Кишки все MKS с базовой "чудо прошивкой". 

15.08.2020 в 10:06
0

Отлично, будет кому поэкспериментировать :) Вот только по срокам пока ничего не могу сказать, работы еще довольно много...

15.08.2020 в 10:14
1

Жду появления беты и тоже прикуплю на замену нанодлп. Хоть оно и работает, но звук мотора при движении вымораживает.

15.08.2020 в 10:22
0

Самострой?

15.08.2020 в 10:55
0

Да. На малине. Малина не может обеспечить реалтайм выходные сигналы, поэтому частота степ плавает. Иногда попадает в резонанс корпуса и звуки такие что находится в одном помещении не хочется. Подобрал скорость 600 мм/мин но которой резонансы возникают минимальные, медленно конечно, но можно находится рядом с принтером без желания раскуячить его кувалдой, и из соседней комнаты его вообще не слышно. Звук мотора это единственный минус который я нашел в моем принтере.

15.08.2020 в 11:00
0

К сожалению не знаком с NanoDLP, сказать просто нечего.

15.08.2020 в 11:16
0

Звуки мотора будут и на этой плате, драйвер тут стоит не самый бесшумный. А точнее, пожалуй, самый шумный - A4988 :) Хотя, конечно, можно и внешний прицепить, более тихий.

15.08.2020 в 11:22
0

На Фотонах разве что-то другое? ))))

15.08.2020 в 11:23
0

Ну вот по опыту Фотона и говорю :)))

15.08.2020 в 11:35
0

Здесь у пациента видимо более серьезное заболевание, чем у А4988.

15.08.2020 в 11:37
0

Вполне возможно :) Послушать бы :)

15.08.2020 в 14:19
0

Не отложите кирпичей в конце. Там идеальное попадание в резонанс корпуса. При движении иногда кажется что заедает механика, но это не так. При подключении ардуины с тмц2208 движение абсолютно беззвучное, лишь небольшой шелест ремня. На длпшильде распаян drv8825 https://youtu.be/EPBLjsWw-NE 

15.08.2020 в 14:32
0

М-даааа... Равномерность работы мотора просто поражает. Я же правильно понял - все эти трески и завывания в процессе движения - это неравномерность шагов мотора?

Ну и звук в конце не из тех, что хочется неожиданно услышать в тишине :))))

15.08.2020 в 14:52
0

Именно так. Отключаю мотор от платы nanodlp, втыкаю его в cnc shield c ардуиной и tmc2208 и ось ездит вверх/вниз беззвучно.

15.08.2020 в 14:56
0

Блин, аж даже интересно стало подключить сейчас эту МКС к своему Фотону и посмотреть как будет звучать его двигатель в его корпусе...

ЗЫ: полез разбирать Фотон :)))

15.08.2020 в 15:34

Комментарий удалён

15.08.2020 в 15:35
0

Да в общем-то отлично звучит для A4988, не громче, чем с родной платой :) Правда вот на родных 12 вольтах мотор не потянул ту скорость, которая установлена в настройках после хомления. Слишком высокая, мотор затыкался. После подключения 24 вольт - потянул :)

Звука движения при медленном хомлении практически не слышно. 

Сейчас видео заливается, зальется - дам сюда ссылку :)

15.08.2020 в 15:40
0


15.08.2020 в 17:32
0

лично я переделав zero вообще не заметил разницы работы мотора. так что можно считать на mks вполне годный драйвер. мое мнение )) но зеро в целом полегче фотона s. и направляющая одна всего. стало быть так или иначе меньше сил трения.

15.08.2020 в 18:03
0

Но вряд ли же ты на МКС выставил такую высокую скорость :)

Я, кстати, тоже у себя уменьшу, а то уж слишком шустро бегает :)

16.08.2020 в 14:45
0

Здесь у тебя ускоренее бешенное. Конечно 12в мало будет. Мне на своем микрофрезере тоже 24в пришлось подавать что бы двигаться с таким ускоренеием без пропуска кадров.

16.08.2020 в 14:56
0

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

15.08.2020 в 10:21
0

Понимаю ) Ну скажу откровенно: на базовой проше печатать можно. Глюков особо не обнаружил, но очень медленная загрузка сложных, тяжелых по весу, я так понимаю, слоев. Есть чисто юзерские недоработки такие как некорректная пауза, постоянная работа вентиляторов сразу при включении питания, последняя прошаV 1.1.4 с Github поддерживает *.Photon, что в принципе уже неплохо, но хотелось бы еще и *.pws хотя бы. В настройках все скорости движения оси Z (рабочая, холостая, ретракт, грубый и точный хоуминг) задаются пользователем, но жестко и через Слайсеры рабочую скорость на ретракте изменить невозможно (ну вовсяком случае у меня после слайсинга не заходит новое значение скорости на ретракте). Концевики отрабатывает корректно и механические и программные. Вся каша с Мерлином на работе мотора визуально не отражается. Но лишнее конечно же нужно убирать, смысл память далеко не резиновую ненужным забивать. Вот уменьшение тока на моторе при простое - это тема хорошая. Поддерживаю обеими руками ))

15.08.2020 в 11:14
0

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

Да, базовая прошивка позволяет печатать, но вот эти мелочи как раз и все портят. Даже Фотоновские прошивки, которые лишены этих недостатков, все равно не идеальны, хотелось бы большей гибкости или немного другого алгоритма работы в каких-то моментах :) Чем хороша своя прошивка - можно изменить или добавить практически любой момент :)

В настройках все скорости движения оси Z (рабочая, холостая, ретракт, грубый и точный хоуминг) задаются пользователем

Хм, вроде там для хомления только одна скорость задается в настройках. Да и скорости/ускорения там задаются в каких-то попугаях, не соответствующих реальности. Хотя это и мелочь, конечно.

Плюс вот еще мне хочется, например, иметь возможность подъема платформы между слоями в два этапа - медленный отрыв, скажем на высоту 1 мм, и потом более быстрый подъем еще на пару-тройку мм. И опускать можно быстро до высоты, например 0.5-1.0 мм и потом медленно до нуля. А не черепашья скорость на весь подъем и все опускание. Это мелочь, но это может заметно сократить время печати.

Вся каша с Мерлином на работе мотора визуально не отражается.

На работе-то она не отражается, но отражается на возможности дальнейшей модификации прошивки - эту кашу очень-очень сложно поддерживать и модернизировать :) Ну и размер кода страдает, как Вы заметили :)

15.08.2020 в 11:32
0

Хм, вроде там для хомления только одна скорость задается в настройках. 

Да. Но по факту скорость точного определения датчика раза в 2 или даже 3 меньше от заданного в настройках. То есть все как положено, после грубого определения датчика происходит подъем примерно на 5мм и опускание со сниженной примерно в 2-3 раза скоростью.  Скорее всего частное задано в прошивке самой, а не в конфиге.


Да и скорости/ускорения там задаются в каких-то попугаях


Ага ))) Это просто какая то лажа, один лишь параметр среагировал на изменения. Не помню какой сейчас, но помню, что стояло 100, оставил 5 ))) И, стало похоже на нормальное плавное ускорение.

15.08.2020 в 11:37
0

Ну я и говорю, что в настройках только одна скорость :) Я сделал наоборот - настраивается именно вторая, медленная скорость :) Быстрая скорость не так критична.

15.08.2020 в 11:42
0

Ну я и говорю, что в настройках только одна скорость :) 

Я запамятовал уже... 

Я сделал наоборот - настраивается именно вторая, медленная скорость :) Быстрая скорость не так критична.

Отлично, КЭП ))))

15.08.2020 в 11:53
0

Это просто какая то лажа, один лишь параметр среагировал на изменения. Не помню какой сейчас, но помню, что стояло 100, оставил 5 ))) И, стало похоже на нормальное плавное ускорение.

Джерк и ускорение. Я тоже уменьшал их в десятки-сотни раз, чтобы получить что-то похожее на работу Фотона, когда игрался с оригинальной прошивкой :)

Вообще такие параметры как джерк, минимальные и максимальные ускорения и скорости я даже не стал выносить в настройки. Оптимальный джерк жестко задан в прошивке, менять его не вижу смысла. Это ведь не FDM, где важно настроить максимальную скорость без пропуска шагов, тут все должно быть медленно и плавно :)

15.08.2020 в 17:36
1

полностью согласен. fdm это ведь классический станок с чпу. когда свои микрофрезер с чпу строил тоже огромное значение именно параметрам работы моторов уделял. та еще возня что бы обеспечить и скорость и отсутствие пропусков и что бы не грелся лишнего. ну и момент что бы был ))) особенно когда двигатели напрямую к винтам идут.

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

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

Отключение питания командой М300

Как мы делали из 3D-принтера фрезерный станок ! Фрезеруем фанеру, МДФ, акрил, текстолит

Бомжэкструдер собранный из мусора

Laser tolerance 2

Качок

Датчик измерения угла натяжения 3D нити