Перемотчик на 3D-принтере
Вот уже третий пост про перемотчик а я всё никак не перестану его дорабатывать. Можно было бы перестать это делать но как оказалось перемотчик нужен не только мне а взять его негде.
На фото выше мой, так называемый, испытательный стенд. У перемотчика два блока питания 12 и 48 вольт. Включаются они в розетку 200в. Три драйвера моторов, две кнопки, датчик оборотов, модуль управления с сенсорным дисплеем. Всё это соединяется кучей проводов и таскать его по столу и со стола на стол надоело, хотелось удобства и цельную конструкцию. Что бы временно соединить сам перемотчик с креплением донорской катушки был использован экструдированный алюминиевый профиль 20х20. Но как мы знаем нет ничего более постоянного чем временное)
Конструкция получилась жесткая и прочная. Можно браться за любую часть не боясь, что-то оторвать.
В этой версии был переработан дизайн. Он стал более строгий и в нём, для удобства оператора, было добавлено много кнопок.
Теперь шаг укладчика относительно оборота приёмной катушки можно настраивать с точностью до сотки. Об этом меня просили пользователи. Оказалось, что перемотка не такой тривиальный процесс как может показаться на первый взгляд и требует тщательной и точной настройки. В нижнем левом углу появилась кнопка "настройки" в виде шестерёнки.
Здесь мы можем перейти в настройки каждого мотора. Остальные кнопочки сделаны исключительно для того, что бы заполнить пустое место на экране. Так сказать на будущее. А дальше случилась ЖОПА. Количество настроек драйвера шагового мотора стремится к бесконечности. Это конешно преувеличение но их действительно много и я пока вынес только основные. Если пользователь менял мотор или ему не нравился его режим работы то ему приходилось писать мне а мне в свою очередь приходилось лезть в прошивку, править её, отправлять человеку, тот её заливал в микроконтролер... И так повторялось несколько раз до тех пор пока мы удалённо не сможем подобрать правильный конфиг. Теперь это можно делать самостоятельно прямо с экрана.
Так вот, вернёмся к ЖОПЕ. В начале проектирования и разработки этого девайса я намеренно решил использовать сенсорный дисплей для того, что бы не городить много механических кнопок потому как даже не знал сколько их может понадобиться. Сейчас примерно 120 кнопок:
54 команды — кнопки + / −
9 — APPLY / CANCEL / DEFAULT для X, Y и Z;
60 — остальные команды интерфейса: START, STOP, HOME, SET 0, TEST Y, изменение технологических параметров, переходы и т. п.;
120 КАРЛ!!!
Мне пришлось перелопатить весь код, поправить логику, изменить запись и чтение EEPROM(энергонезависимая память). Божечки какая радость, что для этого сейчас есть нейросети которые чудесно справляются с такими задачами. Я бы устал вручную переписывать все адреса кнопок.
Дальше фоточки и техническая информация
Шаг по Y и шаг по Z задаются независимо с экрана. То есть можно специально сделать шаг немного меньше или больше реального диаметра материала, если конкретная намотка этого требует. В прошивке для этого сейчас вообще отдельные параметры с шагом изменения 0.01, 0.1 и 1.
Физических концевиков рабочей области у меня нет. Перед началом работы я вручную ставлю укладчик туда, откуда хочу начать намотку, и нажимаю:
SET 0
Текущая позиция Y и Z становится рабочим нулём. После этого задаю ширину катушки. Есть отдельная кнопка:
ТЕСТ Y
Укладчик проезжает заданную ширину, и можно посмотреть, правильно ли всё выставлено и не пытается ли он уехать в стену.
После работы кнопка с домиком возвращает Y и Z в сохранённый ноль.
Сам процесс намотки
Основной мотор X вращает катушку.
Укладчик Y должен двигаться синхронно с ним.
Если просто задать Y постоянную скорость, то при изменении скорости катушки изменится шаг укладки. А нам нужно, чтобы витки лежали примерно одинаково независимо от того, насколько быстро сейчас вращается катушка. Поэтому скорость Y рассчитывается относительно фактической скорости X и заданного шага укладки.
Разворот у края катушки
Если Y просто доезжает до края и мгновенно разворачивается, края получаются заметно хуже середины. Нужно дать катушке сделать дополнительный оборот, пока укладчик стоит у бортика.
Когда Y достигает края, программа запоминает позицию основного двигателя X.
После этого Y стоит на месте, а основная катушка продолжает вращаться.
Когда X проходит заданное количество шагов, выдержка заканчивается, Z поднимается и Y отправляется обратно.
EEPROM
Когда параметров стало много, довольно быстро надоело после каждого включения выставлять всё заново. Поэтому основные технологические настройки сохраняются в EEPROM. Сейчас там живут:
скорость;
ширина катушки;
шаг Y;
шаг Z;
количество оборотов;
ускорение;
плюс отдельные структуры настроек всех трёх драйверов.
Основные параметры сохраняются при запуске перемотки. Настройки драйвера — при отдельном нажатии APPLY.
Физические кнопки
Сенсорный экран прекрасен ровно до того момента, когда ты реально стоишь возле работающего механизма. Поэтому есть и физические кнопки управления.
START и STOP должны работать абсолютно так же, как их экранные аналоги.
Датчик реального вращения катушки
Вот эта штука пока физически ещё не установлена на моей машине, но вход на плате есть, датчик у меня есть и код уже написан. Это отдельный индуктивный датчик оборотов промежуточного ролика.
Почему это вообще нужно? Потому что есть существенная разница между:
«контроллер сказал двигателю вращаться» и: «катушка действительно вращается».
Например:
сломалась передача;
что-то заклинило;
провернуло муфту;
оборвался механический привод;
или просто двигатель по какой-то причине фактически не вращает катушку. Драйвер при этом вполне может считать, что всё хорошо. А отдельный датчик смотрит непосредственно на механику. В прошивке под него уже выделен отдельный вход. Программа измеряет время между срабатываниями датчика, хранит длительность предыдущего оборота и считает количество зарегистрированных оборотов. После начала перемотки есть отдельный стартовый интервал, чтобы защита не срабатывала до появления нормального первого сигнала. После нескольких оборотов начинает работать контроль. Если очередной импульс слишком сильно запаздывает относительно предыдущего периода, программа считает, что катушка перестала нормально вращаться. После этого основной двигатель останавливается и перемотка сбрасывается в аварийное состояние. То есть это уже не просто счётчик оборотов, а независимый контроль фактического движения механики. Датчик пока не установлен, поэтому систему можно отключить с экрана.
Количество оборотов и торможение
Устройство умеет работать не просто «пока не нажал STOP», а на заданное количество оборотов. На экране задаётся количество, после чего датчик должен уменьшать оставшееся значение по мере вращения. Кроме того, в коде есть отдельная логика снижения скорости перед окончанием намотки. Идея простая:
не крутить на полной скорости до последнего оборота, а заранее перейти на меньшую скорость и закончить процесс спокойнее.







Офигенная работа проделана!
Конечно, это не девчуля выложила тити, ей бы сразу куча народу сказали, что она красавица, а тут вот 4 часа прошло и тишина.
У нас тут кучи нет, но не могу не отметить, что автор молодец и сделал круто.
Отдельно отмечу, что это уже выглядит работоспособным, то есть не макетка и сопли, и даже не прототип, раз люди уже этим пользуются 🔥
Хоть я в ближайшее время и не смогу воспользоваться, буквально пара вопросов от любопытства и идей для развития. Может, банальности, но всё же:
1. Предусмотрены ли там концевики движения укладчика? Скорее всего, да, просто из видео было не очевидно, а они очень сильно напрашиваются.
2. Есть ли датчик окончания филамента и зажимно-натяжное устройство (как в швейной машинке -- полпружиненная тарелочка)? По видео как будто нет, а оно тоже напрашивается -- можно было бы мотать до окончания филамента на катушке, и когда он слезет с катушки -- остановиться, и намотанная катушка не стала бы разматываться. Туда же можно было бы приспособить спайщик филамента (можно даже не заморачиваясь впереть покупной), и тогда сматывать несколько огрызочных остаточных катушек в одну полную, например, если материал одинаковый. К спайщику ещё можно было бы прикрутить маленькие гильотинные ножницы для подрезки. Если прикрутить где-нибудь на выходе из трубочки участок с двусторонней поджимкой, лампочкой и камерой (или хз, как это точно делается), можно ещё делать попутную проверку толщины прутка, и если гуляет -- ставить на паузу и слать пользователю уведомление в телегу (ну и соответственно порог для паузы/уведомления тоже настраивать)
3. Вкусовщина, но не просятся ли кнопки + и - в механику? Типа, как в автомобильной приборке: селектор (можно обычным энкодером, благо на принтере можно напечатать щелчковый механизм) выбирает текущий параметр (на экране подсвечивается), а аппаратные + и - при единичном нажатии меняют на 0.01, если подержать -- то на 0.1, а если держать долго, то скорость начинает увеличиваться и наконец меняет на 1. Хотят тут конечно надо заморачиваться, но просто как вариант разгрузки UI.
Вообще, я по белому завидую людям, которые доводят дела до конца, и вдвойне -- тем, кто встраивает графическое управление. У меня лежит для одного проекта экран, но всё-таки я думал сделать упор на API-сервер на устройстве и управление с приложения. Так легче разгуляться, и можно в ряде случаев упростить смену логики.
Хотя с нейронками да, стало обалденно легче и у меня тоже чешутся руки попробовать доделать недоделки с их помощью!