Метки: конкурс #6, сервоконтроллер, сервопривод  
2017-11-19  
  
Раздел: На конкурс, Постройка 3D принтера, Прошивка, Своими руками, Электроника  
Как построить 3D-принтер без единого шаговика
Добавлено в закладки: 13
Ссылки на гуглдиск изменил, теперь должны открываться.
Данная статья не является руководством к повторению продукта высокого полета моей технической фантазии. Поэтому полного BOM-списка и подробного описания всех этапов постройки Вы здесь не найдёте. В моём принтере много спорных, а также бесспорно не удачных решений, во многом является примером того, как делать нельзя, поэтому на данный момент прошу его считать скорее рабочим прототипом, чем готовым к повторению устройством. Однако прототип получился вполне себе рабочим, уже некоторое время меня радует своим существованием и производит неплохие, по моему мнению, отпечатки ;). И определенно данная статья будет интересна аудитории 3дешника, которая очень терпима ко всевозможным принтерам из желудей и палок.
Поехали.
Иногда на профильных форумах и прочих сайтах по 3D печати появляются посты с примерно следующим содержанием: «У меня много старых/ненужных струйных принтеров, но в них не оказалось шаговых двигателей, только коллекторные с энкодерными дисками и лентами, можно ли их использовать для постройки 3D принтера?». А дальше, как правило, человека пытаются отговорить от этой идеи и предлагают просто купить на али шаговики. По большому счёту я согласен с тем большинством, если тебе нужен 3D принтер, то лучше купи шаговики. А сейчас, с кучей вариантов недорогих принтеров на том-же али, лучше купить готовый кит, хотя бы и анет. Но для тех, кого засилье всяческих анетов не заставляет отказаться от вопроса «А можно ли…», я отвечаю:
— Да, очень даже можно собрать 3D принтер на коллекторных двигателях от струйных принтеров.
И при этом он не будет печатать хуже, чем принтер на «классических» шаговиках. Ну, по крайней мере я так думаю, ибо визуально качество отпечатков моего агрегата весьма не плохо, учитывая, что собрал я его вот только-только, и на момент публикации статьи я буквально вчера получил на почте первый килограмм ABS пластика, а до этого лишь попробовал печатать триммерной леской. И при этом даже успел по-печатать пару раз на заказ, правда без коммерческого интереса. Несколько фото-примеров печати.
Кубик. Расслоился. Нейлон…
Канонический левый сапог Марго, один слоем 0,1мм, другой 0,05. Конечно не очень, но что они будут не очень было уже видно после слайсинга, в районе пряжек Slic3r что-то не того нагородил.
Клипса для bluetooth гарнитуры
Учтите, что это нейлон, да ещё и не специальный для 3D печати. Пойдёт для первых отпечатков на первом 3D-принтере, который я увидел не на ютубе, а в реальной жизни?
А это часть сапога из ABS, слой 0,05, печать прервалась, “отвалилась” карта памяти.
Фотоаппарат с трудом тут фокусируется, но зубчики на подошве видны, в реальности они гораздо четче. И это с ускорением 5000мм/с2 . Честно говоря не ожидал таких результатов от своего квазимоды. Не, я верил, что он будет работать, но либо медленно, либо плохо. Эта была моя самая приятная ошибка, связанная с этим проектом . Мне ещё предстоит подбор параметров ретракта, ибо боуден, и прочие калибровки по небезызвестному Caligator-у, после этого качество должно стать на уровне.
В качестве доноров в мои руки попали следующие принтеры: пара мфу Canon MP160, пара недорогих фотопринтеров Canon iP4940 и один дешёвый HP, не помню точно модель, вроде dj1000. Но обо всём по порядку и пройдёмся для начала по механике.
По кинематике мой принтер — классический кубоидный картезианец, в котором привод оси X катается вместе со всей осью X по оси Y, а привод оси Y закреплен на раме. Как в летающем медведе и мейкерботе. Кстати, если Вы решили воспользоваться моим опытом и использовать коллекторный привод в своём принтере, то забудьте о нелинейных кинематиках. SCARA, дельты а также скорее всего и H-bot с CoreXY, в данном случае не подойдут. Дело в том, что использованный мной в приводах сервоконтроллер не рассчитан на переменный момент инерции, а там он будет очень переменным. Но вернемся к моему детищу. Изначально образцом механики для меня послужил известный в своё время QuadRap от Shauki Bagdadi. Рама из алюминиевой трубы квадратной, некоторые ребра рамы служат ещё и как направляющие, каретки из алюминиевого уголка и шарико-подшипников. Идея выглядит красиво и лаконично. Не знаю, как у них там в Европе с качеством алюминиевых труб, но когда я приложил две заготовки рамы друг к другу и посмотрел на просвет между ними, я понял, насколько кривы отечественные трубы))). Но отступать не стал, позади Москва. Взял кусок стекла 400х200мм толщиной 10мм, краску, разнокалиберную наждачку, и пошел ровнять напиленные и насверленные части моей рамы, по которым в будущем планировал катать оси. Итого одна заготовка для оси Х и по две для осей Y и Z. Времени ушла уйма, не делайте так никогда! Даже не буду описывать, как я это делал. Но мой слесарный скилл стал выше, а направляющие достаточно ровными. Ещё значительных усилий стоило мне выровнять саму раму, отстроить параллельность и перпендикулярность нужных граней. Хотя хитрый Шауки обещал, что де, оно само, при сборке мол, перпендикулярно и параллельно всё соберётся))). Но для этого надо было точно сверлить, чего я в домашних условиях выполнить не смог. Ладно, считаем, что оси X и Y готовы, каретки катаются, ничего не люфтит. Ось Z. Она достойна отдельного абзаца.
Так вот, ось Z тоже яркий пример того, как делать нельзя. Приводится в движение одной строительной шпилькой М5, движется по двум направляющим. Стол соответственно консольный. Жесткости подшипниковых кареток не хватило, пришлось изобретать, как стабилизировать дальний от них конец стола. Можно было бы поступить правильно и поставить на этом конце ещё пару шпилек, и соединить их с первой одним ремнем, трёх точек хватило бы для однозначного задания положения плоскости стола. Но я пошёл своим путём. Сочинил вот такую конструкцию из 11 миниатюрных блочков и трёх метров рыболовной PE-плетенки на 0,55мм. Такая плетенка отличается высокой жесткостью растяжению, хотя со временем и слабнет из-за текучести материала.
Но я точно не знаю, где именно, но где-то есть упругие элементы во всей получившейся системе, из-за чего ось Z имеет ярко выраженный гистерезис. Т.е. если привести ось из крайнего нижнего положения в крайнее верхнее, а потом задать движение вниз на 1мм, ось пройдёт около 0,5мм, ещё 1мм задания вниз будет равен примерно 0,7мм и так далее. И приблизительно с третьего миллиметра задание=перемещению. Пока я эту проблему так и решил, в стартовом G-коде в слайсере забил движение из максимума(там у меня концевик) до 0, потом 3мм в другую сторону и принять это положение за 0 и начать печать. Благо стол не во всё рабочее поле перемещения головки и такой кульбит возможен с отводом головки в зону за пределы стола. Но на будущее в рабочий план внёс пункт “Переделать ось Z”.
Но ещё раньше исполнения этого пункта предстоит победить износ направляющих. Всё таки катать стальные подшипники по алюминиевым трубам идея не ахти. Износ есть и заметен хорошо. Для решения этой проблемы у меня есть два плана:
- План А – установить на подшипники напечатанные из триммерного нейлона в режиме спиральной вазы покрышки. Получаются ровные гладкие трубочки.
- План Б – дешёвые чайна хивины. Но этого не хотелось бы, масса, таскаемая осью Y, утяжелится грамм на 100.
Для борьбы с кривостью строительной шпильки, пара ходовых гаек соединена с поперечиной через кулачково-дисковые муфты, одна из муфт закреплена чрез силиконовые шайбы для выборки люфта резьбы. Муфты я склеил из кусочков гетинакса толщиной 2мм, к сожалению фотографий в разобранном виде нет, но там ничего сложного, устройство муфты легко гуглится.
Теперь попробуем через описание экструдера плавно перейти и ко всем остальным приводам. Из всех механизмов в процессе сборки именно экструдер вызывал у меня больше всего сомнений. Но оказалось зря, давит отменно.
Основание собрано из алюминиево-текстолитово-гетинаксовой композиции, где на винтах, где на эпоксидке. Подающая шестерня выдрана из старого общепромышленного реле времени РВ-132, диаметр шестерни примерно 8мм, зубцы острые. Пришлось рассверлить отверстие до 4мм, ровно получилось не с первого раза. Редуктор привода двух ступенчатый, 1-ая ступень это ременный редуктор с энкодерным диском от MP160, на ведомом колесе это редуктора есть ещё и обычный зубчатый венец, к которому из хлама подобралась ещё одна шестерня в пару. Общий коэффициент редукции получился около 10. Энкодерный диск здесь на 1150 рисок, что в совокупности с редуктором дало 252 отсчёта на 1мм филамента. Довершают картину пара клякс из соплемёта, фиксирующие направляющие филамент трубки, грубо, но работает.
Привод оси X, да и вообще все остальные привода тоже, также выполнен на ременном редукторе. Что стояло в струйнике, то и пошло в дело)).
Редуктор и энкодерный диск уже от iP4940. Двигатели я везде ставил с податчиков бумаги, они более тяговитые. Коэффициент редукции здесь 4,5. Подшипники (623-тьи) выходного вала просто приляпаны к корпусу редуктора на холодную сварку. Выходной вал диаметром 3мм добыл из старого dvd-rom, посажен в шестерню с энкодером через печатную втулочку, с этим помог коллега, который незадолго до этого приобрёл анет. Шкив на 28 зуба и ремень с шагом зуба 1мм и шириной 4мм использованы от iP4940. Их тут достаточно, каретка оси X вместе с e3d v6 получились явно легче того, что на этом ремне таскал струйник. Вал двигателя, с которого я снял этот шкив, был диаметром 3,175мм, поэтому пришлось её сажать через гильзу из алюминия от пивной банки. На глаз получилось ровно))). Холостой шкив – это просто подшипник 623ZZ, к которому я приклеил эпоксидкой пару латунных шайб.
На энкодерном диске 2520 рисок, разрешение оси получилось 360 отсчётов на 1мм ((2520рисок*4)/(28зубцов*1мм.шаг ремня)).
Ведомый шкив редуктора оси Y взят от второго MP160.
Со шкива я удалил энкодерный диск, так как его разрешения здесь было маловато. Коэффициент редукции здесь 7.19, выбран намеренно побольше, так как эта ось значительно тяжелее. Выходной вал здесь на 8мм, добыт из HP dj1000. Подшипники вала 608ZZ также посажены на холодную сварку. Энкодерный диск применил тоже от iP4940, изначально с того-же самого экземпляра струйника, что и на оси X (там их два одинаковых, различаются только шестернями, к которым приклеены), но так как рассверлил я его криво, а потом и вовсе кошка погрызла, то тестовый кубик в Y плоскости стал выходить ромбовидным. Но так получалось, только если при печати энкодер проходил через датчик грызенным участком, поэтому что-то маленькое я мог нормально печатать на некоторых участках стола. Пришлось раздербанить второй экземпляр iP4940 (берег как донора для другого проекта) и использовать точно такое же колесо, как и на оси X в качестве энкодерного диска. Втулочку для него уже печатал сам, наружный диаметр 9,5мм и внутренний 8мм. Совсем немного наждачинга и диск ровно сел на своё место. Приводные шкивы и ремень обычные с али GT2 шириной 6мм, под вал 8мм на 20 зубцов. Разрешение оси Y 252 отсчёта на 1мм. Ремень пришёл бракованный, на некоторых участках зубы были плохо проштампованны, но я на это обратил внимание только когда пришла пора его устанавливать, пришлось извращаться, чтобы по рабочим шкивам катались нормальные куски ремня, остальное пошло в качестве соединительных элементов, ну и заодно автоматом решилась проблема вибрации зубов по гладким подшипникам. В качестве холостых шкивов использовал по паре 624ZZ подшипника, очень удобно они встали на скрепляющие раму шпильки.
Для привода оси Z использовался двигатель, шкив и энкодерный диск от HP dj1000. Вот здесь насчёт двигателя не уверен, возможно он не с подачи бумаги. Коэффициент редукции 5, шпилька М5х0.8мм, энкодерный диск имеет 1200 рисок, на 1мм получилось 6000 отсчётов. Фото приводов осей Y и Z получилось групповым, поэтому повторять не буду
С механикой всё, переходим к электрической части. Блок питания – старый, переделанный специально под принтер, компьютерный ATX. Напряжение питания двигателей и нагревателя головки 23.5В, для питания электроники 12В. Для питания горячего стола в корпус блока питания встроено симисторное реле. Горячий стол самодельный на 220В. Да, 220 детям не игрушка, но как инженер по наладке и испытаниям электрооборудования, я знаю что делаю. Основа стола из обычного стекла 20х20см, толщиной 2мм, на нём два слоя алюминиевой клейкой ленты (именно алюминиевой, не металлизированный скотч), два слоя строительной ленты-серпянки хорошо промазанных серым автогерметиком Автосил, далее уложил змейкой нихромовую проволоку диаметром 0.13мм и свитую дрелью вдвое, и ещё два слоя серпянки с герметиком. Направления слоёв чередуются, крест накрест. Последний слой серпянки обхватывает торец всего бутерброда. И последним с кусочком алюминиевой ленты 30х30мм примазал герметиком термистор. Удельное сопротивление двойного скрученного нихрома на 0.13мм около 50Ом/м, у меня ушло приблизительно 5.6 метра и итоговое сопротивление нагревателя стола 280Ом, мощность составила 170Вт при напряжении питания 220В.
Вместо двойного нихрома на 0.13 можно использовать нихромовую или канталовую проволоку на 0.2мм, которые можно купить у торговцев электронных сигарет, только сопротивление на метр у этих проволок другое, длину придётся скорректировать для получения требуемой мощности. Концы нихромовой проволоки обжаты с термостойкими проводами, которые остались после подрезки и установки на разъём нагревателя головки. У этого провода двойная изоляция и более чем достаточное для стола сечение. На провода надета ПВХ трубка и установлена вилка IEC C14, для которой в блоке питания уже была соответствующая розетка с подключенным к ней выходом симисторного реле. Крепление стола из гетинакса, сам стол не касается напрямую металлических частей рамы принтера. И ещё раз повторюсь: 220 не игрушка, если не уверены в своих познания и навыках, то лучше воздержитесь.
БОльшая часть проводки принтера уложена внутри труб рамы, старался по возможности не прокладывать в одной трубе силовые и сигнальные провода.
Уф, ну вот, кажется и добрались до самого интересного – управляющей электроники принтера.
Для контроллера принтера использовал корпус от старого DVD-ROM, разъёмы питания и подключения к принтеру взяты от него-же. Плата контроллера сделана на макетке 10х15см, ибо прототип и точная окончательная схема не известна до сих пор. Сердце контроллера – китайский клон Arduino nano с прошивкой Teacup firmware. Эта прошивка выбрана не только потому, что легко помещается в nano. Teacup написана идеологически правильно, так, как надо писать для задач реального времени под микроконтроллеры. Она способна выдавать step-импульсы с частотой до 48кГц и это будут точно рассчитанные, калиброванные импульсы. Marlin такое и не снилось. Но это при 20МГц кварца, на arduino стоит 16МГц и частота будет меньше, моя при частоте импульсов более 40кГц начинает чудить. Но есть и недостатки у прошивки, например экран подключить уже можно, но энкодер или кнопки для управления принтером нельзя, нет автоуровня стола, но читать карты памяти она всё же может и это уже неплохо! Есть удобный конфигуратор прошивки, но требует установки python в систему, но об этом на данном ресурсе уже есть статья. С учётом подключенной карты памяти, трёх оптических концевиков, двух пар термистор/нагреватель, одного управляемого вентилятора обдува и четырёх пар step/dir, на nano больше нет свободных пинов, так что возможности роста в этом плане отсутствуют.
Карта памяти подключена к гребёнке выводов avr isp на arduino, так как это и есть аппаратный spi-порт atmega328p. Единственно, вывод reset припаян не на своё место, а к выводу D10, для карты памяти он играет роль пина CS. Эта гребёнка использовалась и для прошивки сервоконтроллеров, но об этом чуть ниже. Схемы подключения полевиков нагревателя головки, вентилятора обдува и термисторов к arduino позаимствованы из схем на RAMPS 1.4, приводить их тут я не вижу смысла. Симисторное реле горячего стола имеет опторазвязку и токоограничивающий резистор на входе, поэтому подключено напрямую к соответствующему выводу nano. Оптические концевики тоже из тех самых старых струйников, на них пришлось подбирать резисторы, для ограничения тока светодиодов до 20мА, и подтянуть выходы к плюсу питания резисторами на 5.1кОм. Энкодерные датчики от всех выпотрошенных мной принтеров Canon оказались с выходом типа общий коллектор, как и оптические концевики, поэтому для них оказалось достаточно подобрать резисторы для светодиодов и подтянуть выходы к плюсу питания, но уже через 1.5кОм резисторы, так как в этом случае важно получить хорошие фронты сигналов и резисторов на 5.1кОм оказалось недостаточно. Датчик же от hp dj1000 оказался с синусоидным выходом, поэтому для него пришлось городить схему на 74LV14A. Под рукой не оказалось такой микросхемы в DIP корпусе, в ближайшем магазине радиодеталей тоже, но нашлась в smd на плате от DVD-ROM. По быстрому вытравить переходную плату и припаять имеющуюся микросхему явно быстрее, чем заказывать деталь почтой. А так как для энкодера нужно всего два элемента микросхемы из шести, на ещё три я завёл концевики, так их срабатывание будет чётче.
На самом деле схема подключения 74LV14A дана для примера, я подключал элементы по месту, как было удобней, но принцип думаю ясен. Результат я поверил осциллографом – теперь сигналы датчика получились красивой прямоугольной формы. К слову, этот датчик, в отличии от кэненовских, был распаян прямо на материнской плате принтера, и для его установки на ось Z пришлось травить маленькую платку. На всех датчиках есть риски, помечающие его оптическую ось, поэтому перед демонтажом с доноров датчиков и энкодерных дисков советую их сфотографировать, чтобы было чётко видно их взаимное положение, а при монтаже, как можно более точно установить, как было на струйнике. Вообще это довольно ответственный этап сборки приводов.
Для питания arduino, датчиков, концевиков и сервоконтроллеров используется классический стабилизатор 7805 в большом корпусе TO-220, установленный на небольшой радиатор. Сначала я попытался использовать встроенный в arduino стабилизатор, ведь он там до 1А, а расчетный ток потребителей 5В у меня выходил меньше 0.2А, но совершил, как оказалось, классическую ошибку – не учёл выделяемую при питании от 12В стабилизатором мощность. Атмега пала смертью храбрых, переродившись неплохим маленьким кипятильником. Что странно, ни сам стабилизатор, ни обычно дохнущая в таких случаях CH340G не сгорели.
А вот теперь осталось самое интересное из самого интересного – сервоконтроллеры!
Ну а начнём мы эту тему с небольшой исторической справки. Самую первую версию этого сервоконтроллера разработал и выложил аж в 2001 году могучий человек с ником ELM ChaN. Ознакомиться с этой версией можно на его сайте. Этот человек действительно могуч, он подарил миру несколько ставших классическими библиотек для avr-микроконтроллеров. В том числе миниатюрную библиотеку Petit FatFs, которая используется в teacup firmware для работы с картой памяти. Потом в 2006 году человек с ником Художник выложил в теме модифицированную версию второй версии сервоконтроллера Чена, а вместе с ней удобную программу для настойки ServoTuning. И лишь два года спустя arisov77 выяснил, что Художник оказался плагиатором, а автор программы и модификации Alexander A. Karsakbayev. Но arisov77 не просто так, правды ради это выяснял, на тот момент он активно занимался дальнейшим совершенствованием сервоконтроллера, и смог значительно поднять его быстродействие. Дальше развитие проекта шло на одном закрытом форуме, доступа к которому у меня нет, но в начале 2015 года в открытом доступе появилась вот такая тема: “Недорогой сервоконтролер вариант от S13”. Здесь ребята упростили схему от arisov77, сохранив при этом или даже улучшив быстродействие. S13 в этой теме также выложил последнюю версию своей прошивки v5.0. Я эту схему ещё немного упростил, удалив из неё токовую защиту. Она с моторчиками от струйников мне кажется излишней, а вообще эту функцию способна выполнить правильно настроенная прошивка сервоконтроллера. Быстродействие ограничивающего ток контура прошивки не велико, но мы и не собираемся таскать порталы весом десятки кг киловатными двигателями! Забегая вперёд скажу – когда я ещё только пробовал двигать осью Z, без сервоконтроллера, просто проводками от двигателя к питанию 24В, один раз я загляделся и пропустил момент, шпилька легко и непринуждённо оторвала подшипник вместе с куском холодной сварки! Сейчас у меня в сервоконтроллере этой оси выставлено ограничение 0.8А при рабочем токе движения оси в районе 0.4А, если мне память не изменяет. И было много моментов, когда ось доходила до упора, но никогда больше подшипник не отрывался! Ось просто останавливается, а на сервоконтроллере загорается светодиод ошибки.
Схема действительно проста и доступна для повторения людьми с минимальными навыками пайки и начальным уровнем освоения arduino, без чего браться за самостоятельную постройку 3D принтера вообще не стоит, ну или осваивать по ходу пьесы, что тоже неплохо (но при этом просто необходим навык гугления, чтобы не задавать вопросы, ответы на которые давались, без преувеличения, сотни раз на десятках сайтов). Как видно из схемы, использован простой и дешёвый микроконтроллер Attiny2313, стоимость его на али в районе 220руб за 5 штук в DIP корпусе вместе с доставкой. Для настройки сервоконтроллера используется последовательный порт, пины RXD и TXD. Прошивочная колодка аналогична той, что есть на arduino nano и если в nano залить стандартный пример ArduinoISP, спаять коротенький кабель, то прошить Attiny2313 будет совсем не сложно. Как это сделать, используя программу SinaProg, можно почитать например здесь.
Ещё из схемы я убрал светодиоды направления право/лево и переключатели множителя шага. Лишняя иллюминация мне на плате не нужна, а по части множителя – мне понадобился дробный множитель. На этот множитель умножаются импульсы по входу STEP, например если множитель установлен 8, то при одном импульсе сервоконтроллер сдвинет вал на 8 отсчётов. Причин использовать множитель у меня было две.
Во первых это скорость. Давайте подсчитаем. Возьмём для примера ось X – 360 отсчётов энкодера на 1мм. Максимальная частота стэпов для teacup в случае с arduino nano 40кГц. 40000/360=111мм/с получается максимальная скорость для оси X. По современным меркам не густо, да и запас должен быть, нельзя гонять ось на предельной частоте управляющего контроллера, итого с запасом в 20% получается 89мм/с, что уже совсем не комильфо. Ставить энкодер с меньшим разрешением тоже не пойдёт, энкодер должен иметь запас по разрешению, а иначе привод не сможет обеспечить точность во время движения, у него всегда есть некоторое рассогласование с заданием. А мне хотелось увеличить доступную скорость перемещения вдвое.
Во вторых это выбранная прошивка Teacup firmware. Дело в том, что эта прошивка не сможет использовать при типе ускорения Ramping опцию Look Ahead, если по осям X и Y различные значения шагов на мм, а у меня как раз такая ситуация, 360 и 252 отсчёта на мм соответственно. А это довольно важная опция, она позволяет не делать полную остановку в конце движения, если следующее движение достаточно похоже, позволяет получить более гладкие перемещения головки. Короче, я решил, что стОит ради использования этой опции пролить немного пота, да заодно лишний повод разобраться немного с ассемблером avr. Кстати да, прошивка сервоконтроллера написана на ассемблере. Но благо, сильно много потеть не пришлось, ELM ChaN в третьей версии контроллера добавил именно дробный множитель, но прошивка, которую развивало сообщество, была основана на второй версии ченовской прошивки, поэтому это изменение туда не вошло, а прошивка от Чена не совместима с программой ServoTuning. Вобщем грубо говоря я скопипастил ченовское решение в прошивку от S13. Конечно копипастой дело не обошлось, прошивка нормально сразу не заработала, пришлось отлаживать в симуляторе, но итог положителен и теперь можно использовать дробные множители от 255.99609375 до 0.00390625. Кстати, это пределы изменения многих настроечнных параметров прошивки, хотя и не всех. Для исключения влияния множителя на точность сервопривода, множитель должен быть кратным 0.00390625, либо при умножении на 256 давать целое число, что есть одно и тоже. Методом тыка я определил множители для осей X и Y, которые оба кратны 0.00390625 и при этом дают одинаковое количество отсчётов на мм. Для X это 2.5, а для Y 1.75, что даёт мне 144 step-импульса на мм и скорость 220мм/с, эти показатели я счёл для себя оптимальными. Теперь, для лучшего понимания дальнейшего материала, пройдемся по структурной схеме системы автоматического управления, реализованной в данном сервоконтроллере.
Схема оригинальная, приведенная на сайте Чена.
Здесь вполне узнаваем почти классическая структурная схема электропривода с двигателем постоянного тока, с поправкой на заграничные обычаи изображения таких схем, почти как в учебнике. Есть почти всё, что должно быть во взрослом приводе: контур положения (position contrtol loop), контур скорости (velocity control loop), а вместо обычного контура тока контур момента (torque control loop). Но для двигателя постоянного тока момент и ток прямо пропорциональны, так что можно считать контур тока и контур момента одним и тем же. И ещё один отличительный нюанс, контур момента здесь бездатчиковый, обычно здесь должен быть датчик тока. А здесь момент рассчитывается исходя из текущего значения скорости, полученного с энкодера и математической модели двигателя, происходит это в блоке EG compensation gain, который в тексте Чен называет также back EMF compensation (компенсация противо-ЭДС). Данный способ контроля момента менее точный и менее быстродействующий, чем с использованием датчика тока, но зато электрическая схема сильно упрощается и удешевляется. И это не просто вольный перевод куска текста со страницы Чена, как электроприводчик по образованию, я понимаю, что значат эти слова))). Образование все таки сила, здорово помогло в понимании и настройке этого хозяйства. В описании Чена есть несколько ошибок, если будете его изучать – будьте бдительны. Например в паре расчётных формул для коэффициентов он по благородной рассеянности забыл написать умножение на 256. А на структурной схеме в блоке EG compensation gain коэффициент назван P4, а в описании и в самой пошивке он уже P5.
Контур момента, как и должно быть по классике, вложен в контур скорости. Т.е. своё управляющее воздействие контур момента получает от контура скорости. Регулятор скорости здесь настолько же классический, как и всё остальное и представляет из себя пропорционально-интегральный регулятор. И пара коэффициентов этого регулятора – единственное, что придётся подбирать методом тыка. Остальное мы рассчитаем. В принципе можно рассчиать и их, но для этого нужны полные данные на двигатель и на рабочий механизм, чего у нас нет и не предвидится.
Контур скорости в свою очередь вложен в контур положения. Регулятор положения, как и регулятор момента, представляет собой сумматор, просто и эффективно: задание не равно положению – получай задание на скорость.
На входах контуров скорости и момента есть соответствующие ограничители, соответственно у нас есть возможность ограничить максимальную скорость и максимальный ток и мы этой возможностью обязательно воспользуемся!
У сервоконтроллера есть четыре режима работы:
-
режим ШИМ, в котором мы можем управлять напряжением на двигателе минуя все регуляторы;
-
режим Крутящий момент;
-
режим Скорость;
-
режим Позиция.
Первые три режима необходимы для первоначальной настройки и проверки электропривода, режим Позиция основной, включается в сервоконтроллере при подаче питания по умолчанию.
В энергонезависимой памяти (EEPROM) сервоконтроллера организовано 5 банков параметров, т.е. можно иметь на борту 5 наборов настроек. Но нам от этого ни холодно, ни жако, так как по умолчанию всегда используется первый банк (Bank 0), а переключать их можно только через последовательный порт и действовать это будет до перезагрузки контроллера.
Теперь изучим настроечные параметры сервоконтроллера, которые мы будем вводить через программу ServoTuning, поэтому их имена будет соответствовать ServoTuning, а последовательность расположению в банке прошивки.
#1 (signed) – ограничение скорости, целочисленная величина, допустимые значения от 0 до 65535.
Kf (#2) – усиление обратной связи по скорости, значения могут быть от 255.99609375 до 0.00390625.
Kp (#3) – пропорциональный коэффициент регулятора скорости, значения могут быть от 255.99609375 до 0.00390625.
Ki (#4) – интегральный коэффициент регулятора скорости, значения могут быть от 255.99609375 до 0.00390625.
#5 (signed) – ограничение момента (тока), целочисленная величина, от 0 до 255.
#6 – усиление обратной связи компенсации противо-ЭДС, ещё этот параметр можно назвать усилением обратной связи контура тока или контура момента, что не совсем правильно, но для нас пойдёт. Для ServoTuning это тоже целая величина от 0 до 65535.
6 – множитель STEP-импульсов. В ServoTuning этого параметра нет, поэтому я обозначил его тем именем, по которому его знает прошивка, не путать с параметром #6 из ServoTuning!
Формул расчёта параметров приводить не буду, а приложу вот эту ссылку на excel-документ с забитым расчётом, а здесь постараюсь подробно описать что там и как. Для удобства скриншот таблицы.
Цветом выделены ячейки для ввода пользовательских данных, остальные трогать не нужно. Ну, про первые две строки писать нечего, там и ежу всё ясно. В строке 3 рассчитывается эквивалентное максимальное напряжение, которое сервоконтроллер может подать на двигатель. Дело в том, что по какой-то причине кто-то из модификаторов пошивки ограничил ШИМ значением 242 из 255 возможных. Я не стал в это вникать.
А строка 4 может стать отдельным квестом. На диске от принтера HP dj1000 было написано 1200CT – это то, что нам нужно, 1200 рисок. С кэнонами было сложнее, из известных данных было только разрешения датчиков. На некоторых датчиках было написано H36, M36, на других A15, H15 соответственно разрешение их 360 и 150 LPI(линий на дюйм). Есть смысл вести учёт, какой датчик с каким диском работал в доноре. Так вот, разрешение в данном случае нам известно, осталось измерить внешний и внутренний диаметры полосы рисок диска и приблизительно рассчитать количество рисок. Для iP4940 диаметры 60 и 53мм, датчики на 360 LPI:
((60+53)/2)*3.14/25.4)*360=2516.
Можно округлить до десятков и на данном этапе этого достаточно, но в дальнейшем эту цифру необходимо будет уточнить опытным путём на собранном приводе, в моём случае получилось 2520 рисок, или 2520*4=10080 отсчётов на оборот энкодерного диска.
5 и 6 строки без премудростей, просто берём двигатель и считаем зубцы на его шкиву, затем тоже самое проделываем со шкивом на энкодерном диске.
Чтобы заполнить строку 7 нужно будет произвести небольшой эксперимент. Берём двигатель, блок питания, от которого в дальнейшем собираетесь питать свой станок, мультиметр. Мультиметр включаем в разрыв одного из проводов питания двигателя и переключаем его в режим измерения тока 10А. Крепко-крепко зажимаем пальцами шкив двигателя и ногой(руки-то все уже заняты) включаем секунд на несколько блок питания. Осторожно, если дать слабину можно обжечь пальцы! Убедитесь, что Ваш блок питания имеет запас и с такой нагрузкой хорошо держит напряжение. Записываем измеренный ток в таблицу. По этому току в строке 8 рассчитано сопротивление якоря двигателя. И Вы можете попробовать измерить это сопротивление мультиметром, но нормальной цифры не получите, это нужно делать под рабочим напряжением, а не теми милливольтами, что даст мультиметр.
Скорость и ток холостого хода тоже определяются экспериментально. Для этого нам понадобится собранный и прошитый (прошивка тут) сервоконтроллер и привод в виде двигателя с энкодерным диском, соединённых ремешком. Привод уже может быть установлен на 3D принтер, но ремень, который непосредственно таскает каретки, нужно снять с выходного шкива. Также нам понадобится переходник USB-UART, например такой. Подключаем к сервоконтроллеру двигатель, энкодерный датчик и к RXD/TXD соответствующие пины переходника USB-UART. Драйвера на переходник уже должны быть установлены и в диспетчере устройств нужно проверить номер COM-порта, к которому он подключается. Если номер больше 4, то в свойствах устройства, на вкладке “Параметры порта “ в дополнительных параметрах придётся изменить номер порта на любой доступный от 1 до 4, таково требование программы ServoTuning. Скачиваем и запускаем ServoTuning. Включаем сервоконтроллер, светодиод ERROR должен приветственно моргнуть. В ServoTuning выбираем наш COM-порт, нажимаем Подключить, если вылазит ошибка “Контроллер не найден”, пробуем менять местами RXD/TXD. В блоке программы “ Серво-режим” переключаем на ШИМ. Если до сих пор ничего не пыхнуло и не раскалилось до красна, пробуем плавно подвигать ползунок “Управление”, двигатель должен начать вращаться. Нужно убедиться, что обороты и направление вращения двигателя зависят от положения ползунка. Если всё нормально, нажимаем кнопку “Измерение” и доводим ползунок в любое крайнее положение, и смотрим по графику скорость импульсов и ток по мультиметру. Учтите, что при большой скорости на графике скорость измеряется в кимп/сек, а таблица использует имп/с, т.е. нужно будет умножить на 1000. Заносим новые данные в таблицу. На самом деле это не точное измерение, мультиметр на таких частотах, как в ШИМ сервоконтроллера, по идее должен изрядно врать, но выбирать не приходится..
В строке 11 увидим обороты холостого хода двигателя и если точное число рисок энкодерного диска не известно, то и эта цифра будет приблизительной.
В строках 12 и 13 зададимся максимальными оборотами и максимальным током двигателя. Для осей X, Y и E сейчас у меня стоит 1.1А, для Z 0.8А, скриншот малость устарел
В 14 строке рассчитывается важная константа двигателя – постоянная ЭДС двигателя. Она в несколько необычных размерных единицах, обычно это В*с/рад, но мастер-Чен указал мВ/об/мин. С помощью этой константы можно рассчитать момент двигателя, чем и воспользовался Чен. В нашем случае эта константа используется для расчёта параметра #6, компенсация противо-ЭДС.
Ну вот и всё, в строках 16-19 мы получили бОльшую часть необходимых нам параметров, можно занести их в соответствующие поля в ServoTuning и нажатием кнопок “Задать” и “Сохранить” записать их в память сервоконтроллера. Теперь можно попробовать покрутить двигатель в других режимах. В режиме Крутящий момент, если я правильно помню, может вылезти несоответствие полярности подключения двигателя и направления вращения, определяемое датчиком энкодера, при этом как ни двигай ползунок “Управление”, двигатель будет вращаться еле-еле, но в режиме Скорость бодро и адекватно реагирует на ползунок. Вылечить это проще всего поменяв местами концы двигателя на клеммнике модуля L298. Если в первых трёх режимах всё отлично, пробуем режим Позиция, при этом ползунок становится недоступным, а управлять приводом нужно через поле ввода “Позиция “ назначение”” и кнопкой под этим полем “Задать”. Неправильное подключение полярности двигателя можно определить и по режиму Позиция, при этом после задания позиции двигатель будет раскручиваться до максимальных оборотов, потом остановится, а на сервоконтроллере загорится светодиод ERROR. Если в поле задания внести количество рисок энкодерного диска умноженное на 4, для моих осей X и Y это будет 10080, диск должен совершить полный оборот. Если количество рисок изначально определялось приблизительно, то теперь самое время найти точное значение. Подбором позиции добиваетесь, чтобы диск делал один полный оборот, а после многократного нажатия кнопки “Задать” диск будет приходить в одно и тоже положение, следить за этим проще всего по предварительно нанесенным меткам, только не метьте на полосе рисок. Когда значение будет найдено, делим его на 4 и вводим полученное в таблицу, а затем заносим в ServoTuning уточненные значения параметров. Задание позиции более 19000(если память мне не изменяет) программа не примет.
Следующий этап – подбор параметров kp и ki, головка со всеми своими причиндалами должна быть установлена на своё место, ремни кареток накинуты на приводные шкивы и масса движимых частей в дальнейшем уже не должна значительно меняться, иначе подбор этих параметров придется повторить. Делается это опытным путём, сначала с помощью только программы ServoTuning, ориентируясь по графикам. При этом добиваемся отсутствия дрожания вала на месте и больших перерегулирований, когда вал пролетает точку задания, затем возвращается больше чем нужно, снова пролетает и так раз несколько. На этом этапе оптимальным будет два-три небольших перерегулирования, которые увидеть можно только по графикам в ServoTuning. После этого можно подключить сервоконтроллеры к контроллеру принтера с залитой прошивкой, у меня это arduino nano с teacup, подключить принтер к Pronterface и погонять оси, подкорректировать при необходимости прошивку, мне например для некоторых осей пришлось инвертировать направление и подобрать оптимальное ускорение. Я делал это так: подключался одновременно к принтеру в Pronterface и в ServoTuning к сервоконтроллеру испытуемой оси и нажимал Измерение, в Pronterface двигал ось на 100мм и быстро останавливал измерение в ServoTuning, чтобы новые данные не закрыли график движения. Если в начале и конце движения рассогласование значительно выше, чем во время движения с постоянной скоростью, значит ускорение нуждается в корректировке, также нужно откорректировать параметры kp и ki, в обстановке, так сказать, приближённой к боевой, добиваясь минимального рассогласования. У меня на данный момент ускорения 5000мм/с2, джерки я вообще поставил нулевые, с ними слишком высоко рассогласование при разгоне/торможении. Для примера скриншот окна ServoTuning с графиком, который я счёл удовлетворительным.
Но на этом графике в прошивке всё ещё были включены джерки, ускорения было 700мм/с2 , а скорость движения 167мм/с, судя по частоте импульсов и времени разгона. А вообще графики из ServoTuning мне не внушают особого доверия, иногда при их съеме привода начинает глючить, явно процесс измерения мешает их нормальной работе, поэтому лучше всего было бы снимать эти данные внешними средствами, например логическим анализатором, подключенным к датчику энкодера и входам step/dir сервоконтроллера. Тогда мы не пропустим ни одного сигнала, исключим вмешательство измерений в работу сервоконтроллера и о точности работы привода можно будет судить очень объективно.
Как компилировать прошивку сервоконтроллера я тут описывать не буду, тут уж гугл поможет, но опишу как изменить множитель шага, ведь другого способа его изменить я пока не нашел. Ищете в исходнике вот такой блок:
Это пять банков параметров. Нас интересует банк, помеченный комментарием “рабочий” и его последняя цифра 256. Эта цифра соответствует множителю 1. Если нужен множитель 2, вместо этой цифры запишите соответственно 256*2=512, если 1,5, то 1,5*256=384, но если 1,3 то не 332,8, значение может быть только целым, а 333, а реальный множитель получится 1,30078125 и это необходимо учитывать, управляющая прошивка принтера (в моем случае teacup) тогда должна “знать” точное итоговое количество шагов на мм, без округлений, иначе получите накапливание ошибки позиционирования. Теперь сохраняем исходник и компилируем отдельно eeprom. Чтобы не качать тяжелую AVR-studio, компилировать можно из командной строки с помощью утилиты avrasm2, она очень маленькая и легко гуглится.
Небольшое видео процесса печати. Печатается как раз тот самый недопечатанный сапог.
Прошу прощение за фоновый звук, телевизор был включен не громко. Но зато можно оценить общую шумность принтера. После роликов на ютубе с поющими прюшами, так мой аппарат просто образец бесшумности
Ну, на этом видимо всё, пора закругляться. Как я показал уважаемой публике, 3D принтер на коллекторных двигателях от струйников, действительно возможен, а возможности его пока до конца не ясны, но уже можно смело сказать, что для хобби-применений этих возможностей как минимум достаточно. Тягаться с лучшими промышленными образцами задачи пока не было
55 комментариев на «Как построить 3D-принтер без единого шаговика»
Обсуждение закрыто.
Укрощение Tarantula       Самый самый самый 3D принтер (дельта)
Супер интересная статья – на мой взгляд однозначно 1 место !!! – читал оторваться не мог – супер !!
Статья интересная. Если не хватает пинов у Ардуино Нано, есть МЕГА 2560PRO
https://ru.aliexpress.com/item/Mega-2560-PRO-Embed-CH340G-ATmega2560-16AU-with-male-pinheaders-Compatible-for-Arduino-Mega-2560/32801785024.html?spm=a2g0s.9042311.0.0.MrpBwD
Очень интересный опыт, но все комплектующие не стандарт – то есть всё это только почитать для общего развития. Типа можно сделать и так – но делать так не надо. Я тоже первый контроллер на НАНО спаял для управления лазерным выжигателем. Но потом мне через месяц приехал китайский серийный образец – на НАНО опять же и с ним оказалось гораздо удобней развлекаться.
Как тут мы видим – надо крупно влазить в механику, электронику , программирование контроллеров и отдельно программирование сервоприводов – то есть очень узко заточенная специализация – чисто для станочников с ЧПУ – причём с образованием не ниже техникума или даже высшее, причем с хорошим саморазвитием по отдельным направлениям. То есть для большинства это просто, не соответствует с их набором компетенций. То есть 3d – принтер из КИТА могут и успешно собирает широкий круг людей от домохозяек , до чистых гуманитариев – дизайнеров, художников и т.д. Продвинутые версии, из самостоятельно купленных комплектующих могут собрать тоже очень широкий круг людей – с начальными навыками радиолюбительства и программирования. С разными изысками- люди уже с профильным образованием в области электроники и программирования – с навыками уже гораздо выше среднего. И всё на этом 80% целевой аудитории по сбыту исчерпано. Остальные 20% – это уже проф сектор. Там либо работают на промышленных принтерах, узкоспециализированных под конкретную техническую задачу, либо исследователи разработчики =они также копают строго узкоспециализированную нишу.
Но приведенный выше принтер не попадает ни в одну целевую аудиторию – для любителей есть стандартные решения, для профессионалов – нет четкого определения задач, целеполагания – какую задачу этот принтер решить лучше, чем серийный образец или чем о лучше серийного образца? Может он дешевле?, Может он доступней по деталям, может на него надо меньше трудозатрат для сборки потратить? Пока, что только видна одна цель -самообучение и наработка личного опыта автором. Автор молодец. Но на доли это другим? Статья очень полезная – смотришь и видишь -трудозатрат море – выход на работающий образец не очевиден -результат печати ничем ни лучше, чем у принтеров, собранных из серийных узлов.
АВТОРУ РЕСПЕКТ и УВАЖЕНИЕ
Как раз чтобы снизить порог вхождения я и описал всё достаточно подробно, да расчеты все на блюдечке выложил. Но заморочки всё равно останутся)). Доноры могут быть очень разные. Как делать не надо – это касалось чисто механического конструктива, там да, наворочил, Z переделывать, XY тоже. Кстати, пересчитал веса, наверно всё таки рельсы буду ставить, не намного они утяжелят. И да, эта тема скорее на любителя. Ну ещё быть может студентов, у меня расходы получились действительно небольшими, около 5000р, но если добавить рельсы – заметно подтянутся к дешевым китам :D. Но и отрыв от дешевого кита уже будет другой, таки рельсы. А станочники, попробовавшие и осилившие серву, даже такую простую, люто любить ее начинают, мол шаговики больше ни-ни. Говорят, что динамика у сервы выше. Я со скоростями пока поиграть не успел, от себя добавить ничего не могу, но ускорение ставил и максимальное, что позволяет теакап, 10000мм/с2, моя механика оказалась для него жидковатой.
За возврат решения управления двигателями 50-60 годов опто-энкодерами 5, за исполнеие (нет места для такой оценки к сожалению ) 10 , за использование тикап прошивки как минималисту 10 – ценю труд, колосальная работа ! Классная статья и перезнтация!!!
То есть почти вся оргтехника, да и не только она, нынче родом из 50-60 годов?
61:)
Варианты снижения износа направляющих:
1. Наклеить на них каптоновый скотч, и менять периодически. Не забывать парковать головку в самых углах – при длительном простое – подшипники продавливают скотч.
2. Подшипники обуть в термоусадку для аккумуляторов 18650. Не очень понравилось – на сгибах термоусадки постукивает, снял, перешел к 3 варианту (см.ниже).
3. Обуть всю трубу в термоусадку (сейчас сам тестирую этот вариант).
Не, надоел колхоз, буду копить на рельсы)))
Но за информацию спасибо!
Можете обратить внимание на https://www.vbesmens.de/en/positioning-controller.html (DC или BLDC)двигатель
Энкодер лучше поставить линейный для исключения ошибок в редукторе. Контроллер на Atmege слабоват.
Но в конечном результате все равно поставите шаговые двигатели если будете делать принтер на нормальном
железе.
Уже обращал внимание, и ещё на несколько штук, что смог найти. Да, неплохой проект. Но dsPIC30F4012, что там применяется, удовольствие дорогое, при непонятных преимуществах в случае с коллекторниками. А для bldc варианта есть и на stm32 проекты, что нынче тоже предпочтительнее. Да, на аттини контроллер не блещет мощностью, но это пока узким местом в моём принтере не является. Линейный энкодер это конечно хорошо, но в струйниках выше 150lpi мне не попадались, а это очень мало. То, что я поставлю когда-нибудь шаговики – очень сомнительно!
150 lpi мало? Можно провести грубый прикид. Предположим что шаговый двигатель при одном обороте проходит
25,4мм при этом он делает 200 шагов. Коллекторный двигатьель при одном обороте делает 150×4=600 шагов
получаем в три раза лучшее разрешение.Есть 180 lpi это 720 шагов. В свое время делал станок на коллекторниках
с енкодером 286 рисок чего вполне хватало для очень быстрой работы на шпильке 8×1,25.
https://www.youtube.com/watch?v=vwB0riTZNlk
Если есть доступ к старой списанной технике можно поискать такие двигатели сделаны на LB1928
Очень удобные двигатели для 3D принтера.Можно напечатать энкодер с разрешение от 300 до 600 и использоавать
оптопару из мышки с колесиком. На фото видно но плохо импульсы при диске 500 рисок.
Именно, очень мало! 150lpi для ЛИНЕЙНОГО энкодера это 600 отсчетов на дюйм, а не оборот, или 23.6 отсчета на миллиметр, для шаговика с 20 зубым шагом и дроблением шага на 8 получится 40, цифры вроде соизмеримы. Но!!, не надо путать разрешение энкодера с точностью привода в динамике! Замкнутый контур в динамике всегда имеет ошибку, рассогласование, поэтому рекомендуется разрешение энкодера иметь с минимум 10кратным запасом. По факту у меня точность получилась даже ещё ниже, раз в 15 на рахгонах/торможениях если верить серве нагруженной дополнительно процессом измерения. Итого, 23,6/15=1,57 отсчета на миллиметр. 286 рисок для шпильки 8х1,25 действительно вполне достаточно, точность в районе 0,05мм вполне можно получить.
пардон, поторопился не проверил, а отредактировать не получается. имел в виду “для шаговика с 20 зубым шкивом и дроблением шага на 8 получится 40″
Я описывал чисто теоретическую ситуацию с прямым приводом без редуктора. Предположим что при одном обороте
шагового двигателя точка проходит 25,4мм. При этом разрешение струйного принтера 1200-1440 точек на дюйм.
К сожалению я не повторял данный сервоконтроллер и ничего не могусказать по его быстродействию.
На видео работает копия G320. Обычный аналоговый сервопривод. Однако он понравился мне гораздо больше чем dsPIC30F4012.
У меня энкодеры на выходе редукторов, поэтому редукторы в этом случае на разрешение не влияют. А такое высокое разрешение струйника получается интерполяцией, он плюет краску не на каждом отсчете, а и между ними, у него нет задач иметь точный разгон, главное примерно знать где головка, чтобы рассчитать где плюнуть.
G320 повторить, да ещё для трех осей – уважаю! Солидная была вещица для самоделок! Там же вроде и контур тока настоящий? Динамическая точность у него должна быть гораздо лучше, чем у ченовского.
Все забываю написать что на мой скромный взгляд это абсолютно 1 место в конкурсе.
Однако 95% данная тема абсолютно не интересна.Даже на том ресурсе где так активно
пытаются повторить я не увидел ни одного законченного контроллера работающего на
станке.
Главное, чтобы эта тема нашла 5% тех, кому это интересно, глядишь из них найдется ещё 0,5%, кто может и хочет развивать дальше. Один человек занимается разработкой скоростных хотэндов, с научным подходом, всё серьезно. У него есть успехи, пора двигать и механику с приводами. Тут конечно будущее не за древней ченовской сервой, но и вряд ли за шаговым приводом.
Серво и шд используются ещё с тридцатых годов прошлого века и по верьте за это время принципиально не изменились.
Что по мне так автор статьи показал как вполне бюджетный способ перехода на серво моторы (на али серво аналог нема 17 + контроллер стоит от 7000р)Дороговизна серво это единственное что тормозит использование серво моторов в остальном только одни преимущества перед ШД
Под древностью я имел в виду конкретный сервоконтроллер, МК всё-таки тут слабоват. Вот если бы перенести его на stm32f030f4p6, думаю точность и быстродействие значительно поднялись бы, а стоимость бы даже уменьшилась. Тут уже и ШИМ на 16 бит, а не 8, и аппаратная обработка энкодера, и аппаратное умножение 32х32 за один цикл, и частота выше.
Вопрос реально ли подключить серво к рампс-1,4 и какая тогда нужна прошивка.
Конечно реально, найти где в разъёмах драйверов step и dir и вывести парой проводков, но можно и заморочиться и распаять на кусочках макеток переходник. Прошивка в принципе любая подойдёт. Я выбрал теакап, потому что степы он по-честному генерирует, а марлин выше определенного порога частоты импульсов, начинает удваивать и учетверять, мне на тот момент это показалось важным, всё же серва не шаговик. Но сейчас я уже не так уверен в принципиальности этого момента.
Ещё дурацкий вопрос
Реально скрестить обычный немА-17 с энкодером от принтера а также как заставить его крутиться
Да https://github.com/jcchurch13/Mechaduino-Firmware . Но считаю для шаговика это лишним.
Этот “способ” я знаю.
В принципе любой мотор с энкодером можно считать стерво
почему не использовать шд коль они есть под рукой, чем он собственно отличается от любого другого двухфазного мотора.
Стол консольный, вот и болтанка. Надо, как минимум 2 каретки поставить по диагонали куба, или 3 каретки, или все 4-ре.
Консольный, но дело не в этом. Упругость где-то в плетенка/шкивы/рама, поэтому при смене направления и получается, что пока у плетнки не появится достаточного натяжения, стол равномерно не поедет. А кареток достаточно двух, чтобы стабилизировать стол в XY, и трёх шпилек, чтобы стабилизировать по Z.
А плетенка – это как раз попытка обойтись одной шпилькой, она добавляет две точки опоры и убирает болтанку стола по Z. Но добавляет проблему с упругостью)))
Попробовать то легко – переставить одну каретку. По собственному опыту говорю – консольный конец всегда будет трястись… ) по бокам приделывал, чтоб об стенки терлось и вибрировал меньше.
Где то видел, люди на конце консольного стола по центру специально ролики приделывали, и вал дополнительно ставили. Кто то поролон к концу (стола
Вы так и не поняли. Не трясётся у меня конец. Стола. Он фиксирован плетенным шнуром через систему шкивов и движется синхронно с другой стороной стола, где ходовая шпилька. Стоит жёстко. Есть гистерезис при смене направления движения, так что не удачная получилась система, но пока пойдёт и так.
Я даже не читая первого места не могу представить что это второе место, я понимаю что это Гик’ство но АФИГИТЕЛЬНОЕ…
Автору респектище…
Тема очень интересная. Было бы очень здорово понять в ней хоть что-то.
Какие движки из принтеров подходят и какие лучше?(протяжка бумаги, развертка лазера, каретка со светом)
Как эти энкодеры выглядят, в каких принтерах они есть, где еще их доставать и как их правильно сделать?
Использование родного драйвера движка дает что-нибудь?
Преимущества перед шаговиками?
Про движки из лазерников ничего сказать не могу, не разбирал. Я использовал с протяжки бумаги от струйников. Какие лучше какие хуже – это пока не ясно, могу только сказать, что на протяжках движки более тяговитые. Энкодер хорошо видно на этом фото , диск из прозрачного пластика с мелкими штрихами по кругу, слева вверху его датчик. Бывают промышленные, в корпусе, можно на али поискать, но цена на них как на целый шаговик будет, так что лучше надергать из струйников. Лучше подходят кэноны на 5 чернильниц, там они небольшого диаметра и имеют хорошее разрешение.
Родные драйвера обычно в специализированных микросхемах с кучей других функций, на которые нет никаких описаний.
Преимуществ хватает, на эту тему целые статьи в инете есть, но для меня главным преимуществом было наличие нескольких струйников с необходимыми запчастями.
Особенно интересна прошивка и подключение SD карты, этот модуль самодельный? Как переделать для такого использования стандартный модуль SD?
Модуль самодельный, пришлось делать на скорую руку, потому что усб соединение было не стабильным, если бы планировал его изначально, то заказал бы на али. Переделывать ничего не надо, надо только разбираться куда что подключить. Сейчас картой не пользуюсь, перешёл на клиппер.
Примерно так подключали SD? И в этом варианте D4 указывать как SD pin?
Такое подключение SD
Примерно так, только cs на d10. В статье есть таблица распределения пинов ардуины.
То есть вы практически использовали стандартную прошивку и ничего специально не допиливали для поддержки SD?
Да, эта возможность в прошивке уже была, нужно только в конфигураторе выбрать пин, на который подключен cs карты.
Можете подсказать как в TeaCup запустить с SD исполнение файла с gcode сразу после включения, т.е. автоматически?
Я про такую возможность ничего не знаю.
Как же вы запускаете печать с флешки в автономном режиме без экрана?
Не делаю я так. В качестве экрана и пульта я раньше использовал старый планшетник с приложением 3dfox.
Можно было бы и сюда все исходники выложить связанные с s13
На том форуме надо регистрироваться что бы посмотреть
Всё есть, всё выложил. Конкретно на прошивку с исходниками ссылку найдёте под фразой (прошивка тут) в тексте статьи
вашу то я видел…
нет звука в видео
Есть, но почему-то не всяким браузером воспроизводится.
Продолжает работать?
Да. Печатал, правда, не много и планов своих наполеоновских не исполнил. Z сейчас выглядит по другому, но тоже на веревочках. XY пока также, хотя рельсы были куплены почти сразу после конкурса. Для моих очень скромных потребностей пока хватало как есть.
Спасибо полезная статья, но вот что не понятно, в прошивках для управления шаговиками, используется библиотека с расчетными параметрами ускорения, скорости для шаговоиков, в том числе и “трапеция скорости”. Т.е. на выходе (step/dir) получаем то, что потом ещё раз делаем в сервопрошивке, не понятно для чего это. Скорее тут просто подойдёт просто PID, который используется во многих библиотеках DC-Servo. Правда может в Teacup что-то по другому?
Teacup или не teacup совершенно не важно, сейчас у меня стоит klipper и в этом плане совершенно ничего не изменилось. Step/dir всего лишь один из возможных интерфейсов управления приводами и совершенно не важно шд это или серва. Просто пид подойдёт к примеру в тёплый пол, в случае сервы это уже чудеса эквилибристики, двигателем постоянного тока не так просто управлять точно, как может показаться.
Ммм, ясно. Меня напрягает другое. Просто тут получается двойной прогон параметров, т.е. в CNCFirmware приходит команда Идти 300мм скорость 100, это всё преобразуется в команды управления STEP/DIR, причём последовательность расчётов идёт для шаговика, т.е. тут уже расчитываются ускорения на разгон, остановку, максимальную приемлемую скорость и т.д. И уже эти команды получает ServoFirmware (вместо драйвера шаговика) и начинается снова перерасчёт уже рассчитанных команд, но на новый лад. При этом трапеция скорости шаговика накладывается на трапецию скорости серводвигателя, получаются накладные расходы (оверхед). Понятно что как в “принце Флоризеле”: “ну за неимением лучшего…”
Серве ничего такого делать совершенно не нужно. На входе у неё счётчик стэпов, ещё есть счётчик импульсов датчика положения, они постоянно сравниваются и при необходимости рассчитывается необходимое изменение напряжения двигателя, чтобы разница этих счётчиков была как можно меньше. Серва просто бежит за морковкой, как тот осёл. Конечно, есть смысл передавать информацию командами, тогда серва заранее могла бы знать о том, как будет меняться характер движения и точнее отрабатывать эти изменения, то есть если осёл не только видит морковку, но ещё и знает, что через десяток шагов она остановится, он сможет начать заранее притормаживать и не налетит на неё слегка. Это всё грубо говоря. Но fdm не самая точная технология в принципе, поэтому я тут не вижу смысла особо заморачиваться.
Очень правильная статья! Тоже буду собирать себе подобное устройство, благо принтеров списанных есть у меня… пока думаю 2толстых – на ось у, на ось х тонкий (поближе к соплу) + алюминиевую направляющую для поддержки от проворачивания (не хочу переутяжелять балку).
правда при разборе выяснилось, что не в каждом есть калёный вал, но из того, что было достал 3 вала d=11mm L=420mm (Epson L240, формат А3) и 1 вал d=9,6mm L=420mm (Canon вроде, формат А4), если порекомендуете, как их лучше применить – буду признателен
По поводу сервы: делаю алгоритм так, чтобы отставание мотора от задания было всегда на одинаковое (небольшое) время, т.е. чем выше скорость – тем выше разница цели и текущего положения и, если это время будет одинаковым для всех моторов, то механика должна работать синхронно.