Gnevko

Электронная гитара для Paulimot 190-V (Arduino)

201 повідомлення у цій темі

20 минут назад, Gnevko сказал:

Здесь в первую очередь наверное нужна жесткая связь между ходовым винтом и суппортом (без люфтов), что на станках такого класса, да и классами повыше практически не встречается (без дополнительных танцев с бубнами и заменой винта). Собственно поэтому на реверсе очень не советуют нарезать резьбы.

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

Если имеется неравномерный износ винта, тогда проблемы возможны.

А нарезать с реверсом приходится все дюймовые резьбы и часть метрических, на шаг которых не делится нацело шаг ходового винта.

 

 

Змінено користувачем DimonDSS
0

Поділитися повідомленням


Посилання на повідомлення
Поділитися на інших сайтах
43 минуты назад, Iv@n сказал:

@DimonDSS Дякую за відповідь. Проект булоб цікаво подивитись. 

максимум що у вас вийде це електронна коробка подач, але аж ні-як не нарізання різьби. Потрібна жорстка привязка позиції шпинделя до ходового гвинта.

P.S. Наприклад є завдання: поправити різьбу на якомусь валу (чітко попастиву вже існуючу різьбу). Як у вас це буде реалізовано??

От якраз моя схема реалізує це бо практично замінює шестерні, 

А зі схемою визначення швидкості по одному імпульсу за оберт тут дійсно є питання, 

0

Поділитися повідомленням


Посилання на повідомлення
Поділитися на інших сайтах
1 час назад, DimonDSS сказал:

А нарезать с реверсом приходится все дюймовые резьбы и часть метрических, на шаг которых не делится нацело шаг ходового винта.

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

 

1 час назад, DimonDSS сказал:

А зі схемою визначення швидкості по одному імпульсу за оберт тут дійсно є питання

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

0

Поділитися повідомленням


Посилання на повідомлення
Поділитися на інших сайтах

покритикую:

головний недолік -

"енкодер" з одним імпульсом на оберт шпінделя недостатньо точний для різьби та надлишкови для автоподач.

Я вважаю доцільно зробити два режими - для різьби квадрантний  енкодер на 100...200 імпульсів з нульовою міткою, а для автоподач лише нульова мітка.

тоді різьбу можна різати на низьких обертах, а на автоподачі МК не захлинеться від високої частоти.

0

Поділитися повідомленням


Посилання на повідомлення
Поділитися на інших сайтах
30 минут назад, Gnevko сказал:

то любое движение суппорта будет начинаться в одно и тоже положение шпинделя, что позволит "нарезать с реверсом", даже возможно не останавливая шпиндель.

Для этого нужно точно определить момент когда шпиндель начал вращаться в обратную сторону! Чтоб начать обратно вращать винт, отводя резец в начало обработки.

В ЧПУ (МАЧ3) то все просто, там не нужен отвод резца реверсом шпинделя, поскольку привод суппорта не имеет люфта (ШВП) и чпу всегда считывает позицию суппорта. То есть каждый проход мы просто выводим резец в одну и ту же начальную позицию и начало движения резца синхронизируем по импульсу со шпинделя.  Остается только возможная погрешность за счет колебания скорости шпинделя под нагрузкой. 

Хотя можно пробовать организовать подобную схему, 

0

Поділитися повідомленням


Посилання на повідомлення
Поділитися на інших сайтах

1) Делаем проход.

2) Выключаем подачу

3) Выводим резец

4) Не останавливая шпинделя, включаем реверс для суппорта

5) Суппорт отъезжает чуть левее начала заготовки и выставляем новую глубину прохода.

6) Включаем снова подачу

7) Шаговик ждет определение скорости (то есть один оборот шпинделя), что бы выяснить его скорость

8) По метке начинает движение, 

8.1) если скорость вращения спинделя малая, то шагаем как есть.

8.2) если скорость высокая, а суппорт все же инерцию имеет (или шаговик слабоват), то расчитываем ускорение, что бы через один-два оборота выйти на нужную скорость с учетом метки.

 

Дополнение:

1) Пункт 8.2 спорный и требует еще проработки, но позволяет не останавливать шпиндель

2) понятие "Скорость шаговика" вас не должно вводить в заблуждение, шаговик все равно делает шаги и весьма точно, только в расчете не на импульс экодера, а в единицу времени. По сути (с допущениями) - это одно и тоже.

Змінено користувачем Gnevko
0

Поділитися повідомленням


Посилання на повідомлення
Поділитися на інших сайтах

Панове!

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

 

large.IMG_1951.jpg

 

1) Физические свойства. Крутится условно легко, присутствует фиксация на каждом делении. А вот сила этой фиксации достаточно высока. Если пытаться провернуть энкодер на одно деление, держась только за маленькую рукоятку, то у вас скорее всего ничего не получится - по инерции вы его провернете на 4-5 делений. Если же поворачивать энкодер за большое колесо, то никаких проблем с позиционированием не наблюдается. На счет того, механика внутри или оптика - то мне это так и не удалось выяснить. Если кто знает, как такую штуку разобрать (а потом еще и собрать обратно), то поделитесь информацией. 

 

2) Шкала. Обратите внимание в какую сторону идет увеличение разметки на шкале. Если крутить энкодер против часовой стрелки, то значения будут уменьшаться, в то время как на маховике суппорта они возрастают. Это весьма не приятно и прийдется немного привыкнуть. Так что если вы будете покупать такую штуку - обратите на это особое внимание! В остальном шкала очень хорошо читается и нареканий не вызывает.

 

3) Подключение к Ардуино. Как и у всех энкодеров "кругового" типа, у этого имеются следующие контакты: Vcc, 0V, А и B. Если с Vcc, 0V более или менее понятно: Vcc - +5V, Vcc - Gnd, то о выводах A и B можно почитать, например, вот тут - http://mypractic.ru/urok-55-rabota-s-inkrementalnym-enkoderom-v-arduino-biblioteka-encod_er-h.html. Для считывания абсолютного положения энкодера на просторах инета была найдена весьма не плохая библиотека: 

 

https://github.com/PaulStoffregen/Encoder

 

Работает на прерываниях, проста и понятна в использовании и в общем то разрабатывалась для использования на платформе Teensy, но слава богу и на Меге работает так же без проблем. Так или иначе я так и не смог добиться от нее хотя бы одного пропуска счетчика, с какой бы скоростью я энкодер не вращал (при испытаниях была использована только рука :) ). Пример использования:

 

#define ENCODER_OPTIMIZE_INTERRUPTS
#include <Encoder.h>

#define Z_HANDWHEEL_A 19
#define Z_HANDWHEEL_B 18
  
Encoder zHandwheel(Z_HANDWHEEL_B, Z_HANDWHEEL_A);

void setup() {
}

void loop() {
    
  long zHandWheelCounter = zHandwheel.read();
  if (zHandWheelOldCounter != zHandWheelCounter)
  {  
    // делаем что то полезное
    zHandWheelOldCounter = zHandWheelCounter;
  }
}

Здесь стоит упомянуть, что при повороте энкодера на одну позицию, библиотека увеличивает (или уменьшает, в зависимости от направления вращения) счетчик на 4 пункта, причем делает это "плавно": есть если повернуть энкодер на пол позиции, то вы получите 2 пункта и так далее.

 

4) Управление шаговым двигателем. Итак, предположим, что одна позиция энкодера соответствует изменению позиции суппорта на 0.1 мм, а полный оборот, соответственно, на 1 см.

В этом случае на 0,1 мм подвижки суппорта получим увеличение счетчика энкодера на 4 пункта, или 0.025 мм на 1 пункт. 

При разрешении шагового двигателя в 3200 микрошага на один оборот и шага резьбы винта подачи суппорта в 2 мм, получаем, что один микрошаг шагового двигателя соответствует 2мм / 3200 = 0.000625 мм. Таким образом, на один пункт энкодера нужно сделать 0.025 / 0.000625 = 40 микрошагов или 160 микрошагов на одно целое деление энкодера.

 

zHandWheelCounter = zHandwheel.read();
if (zHandWheelOldCounter != zHandWheelCounter)
{
   float distance = zHandWheelCounter * 0.25; // так как на одно деление энкодера приходится увеличение позиции на 4
   float realDistance = distance * zHandwheelFactor; //где zHandwheelFactor == 0.1
   long fStepsToGo = realDistance / mmPerZStep; // где mmPerZStep == 0.000625
   gZStepper.moveTo(fStepsToGo); // смело шагаем
 }
 zHandWheelOldCounter = zHandWheelCounter;

 

И  вот тут начинается самое интересное: с какой скоростью делать эти 160 шагов? и как эту скорость вычислять?

 

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

 

Так же встает вопрос об ускорении и торможении.

 

ЗЫ: библиотеку AccelStepper пришлось отправить в топку, но это уже другая история... 

0

Поділитися повідомленням


Посилання на повідомлення
Поділитися на інших сайтах

Быстро сказка сказывается ... 

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

large.P1100075.jpg 

 

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

 

Крепеж мотора напечатан на 3Д принтере (пластик ABS). Конечно же было бы не плохо сделать из алюминия, но фрезерного станка увы нет. С другой стороны деталь получилась достаточно прочной (заполнение 60%, сопло 0.8 мм, 3 периметра): 

large.P1100078.jpg

 

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

large.5a240a70256dd_2017-12-0315_24_16.jpg

 

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

 

https://youtu.be/Mqz_GxGjZvo

0

Поділитися повідомленням


Посилання на повідомлення
Поділитися на інших сайтах
, Gnevko написав:

я так и не смог добиться от нее хотя бы одного пропуска счетчика

Мабуть це вказує на те, що енкодер оптичний. А не можна глянути осцилографом, чи є на виході "дребезг" контактів?

0

Поділитися повідомленням


Посилання на повідомлення
Поділитися на інших сайтах

Глянуть конечно было бы интересно, но ввиду отсутствия осциллографа - увы не получится. С другой стороны - работает надежно, а что еще от железяки нужно !?

0

Поділитися повідомленням


Посилання на повідомлення
Поділитися на інших сайтах

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

 

ЗЫ: странно как то, но почему нельзя редактировать собственные сообщения? Это ужасно не удобно.

0

Поділитися повідомленням


Посилання на повідомлення
Поділитися на інших сайтах

Джойстик и энкодеры для измерения скорости вращения шпинделя так и не доехали из Поднебесной. Энкодеры пришлось заказать на  ebay, приедут на следующей неделе. С джойстиком пока не такой напряг, так как есть джойстик от Wii. 

 

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

 

large.P1100232.jpglarge.P1100234.jpg

 

Для экрана пришлось докупить плату с I2C, так как огромное количество проводов, которое пришлось бы иначе тянуть через корпус, меня сильно опечалило. В остальном же управление экраном осуществляется при помощи библиотеки (LiquidCrystal_I2C - https://github.com/fdebrabander/Arduino-LiquidCrystal-I2C-library) и особых сложностей не вызвало. Энкодер на передней панели пока что переключает только множитель для ручного маховика (0.01, 0.02, 0.05 и 0.1 мм на деление). По экрану, вернее информации, которая на нем отображается, наверное стоит сделать отдельный пост. Сам же ручной маховик, в виду особенности его разметки, решил разместить повернутым на 90 градусов, такое положение не так сильно сбивает с толку. 

 

large.P1100235.jpglarge.P1100237.jpg

 

Электронную начинку разместил на боковой стенке тумбы. Здесь, я думаю, и так все понятно. Из новых компонентов - блок питания для шаговика - на 36 вольт 360 ватт и блок питания для ардуино - 5 вольт 15 ватт.

 

large.P1100233.jpg

 

Ну и куда ж без первой стружки :)

0

Поділитися повідомленням


Посилання на повідомлення
Поділитися на інших сайтах

А чого електронна гітара, а не підключення до компютера?

 

0

Поділитися повідомленням


Посилання на повідомлення
Поділитися на інших сайтах

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

 

А вот для одноразовых поделок - электронная гитара самое оно: 

1) быстрое переключение скоростей,

2) расширение функционала, так как на моем станке нет обратной автоподачи, 

3) автоподача при остановленном шпинделе,

4) отображение пройденного пути и несколько других плюшек, которые правда нужно еще реализовать.

0

Поділитися повідомленням


Посилання на повідомлення
Поділитися на інших сайтах

То просто поздовжня автоподача?

Без другого мотора, якого і не планується на поперечну автоподачу?

А різьба буде: ручне підведення різця, включення різьбової автоподачі, потім ручне розмиканням гайки, ручне відведенням різця, потім замикання гайки, включення автоподачі в іншу сторону, потім зупинка автоподачі і знову ручне підведення різця?

Тоді зрозуміло шо компютер тут і не потрібен.

А звідки інформація шо одного імпульса вистарчить для нарізання різьби?

То таке припущення, яке ше треба перевірити на практиці, чи десь такий варіант вже реально працює?

0

Поділитися повідомленням


Посилання на повідомлення
Поділитися на інших сайтах

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

 

По поводу резьбы, то поскольку подвижка суппорта осуществляется только "электронным" способом, то это должно выглядеть примерно как описано вот в этом посте:  http://chipmaker.com.ua/index.php?/topic/4072-электронная-гитара-для-paulimot-190-v-arduino/&page=2#comment-64995

 

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

 

Информация про то, что одного импульса достаточно была взята из просторов инета (ссылку я приводил), а так же из того, что Mash3 работает именно по такому принципу. Очень надеюсь, что на следующей неделе приедут энкодеры и можно будет наконец то начать основную часть проекта.

Змінено користувачем Gnevko
0

Поділитися повідомленням


Посилання на повідомлення
Поділитися на інших сайтах

Можна дурне питання ? А чоме не повторили електрогітару з ру. чіпа ? там є електронні упори , подачі і тд.. 

0

Поділитися повідомленням


Посилання на повідомлення
Поділитися на інших сайтах

Можно такой же глупый встречный вопрос? Вам было бы интереснее прожить свою жизнь или чью то другую? 

 

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

 

С наступившим 2018 годом! 

 

 

2

Поділитися повідомленням


Посилання на повідомлення
Поділитися на інших сайтах
8 часов назад, Gnevko сказал:

Мне интереснее создавать самому, чем повторять уже созданное

Тепер я зрозумів суть роботи.

Дуже цікаво шо вийде з різьбою на такому енкодері.

0

Поділитися повідомленням


Посилання на повідомлення
Поділитися на інших сайтах

Сбылось! Приехали энкодеры!

large.P1100294.jpg

 

И очень уж мне хочется снова использовать библиотеку для считывания абсолютного положения энкодера: 

 

https://github.com/PaulStoffregen/Encoder

 

Однако этой библиотеке нужно два сигнала, что бы она могла определять направление вращения (в нашем случае) шпинделя:

large.5a4e43bed7441_2018-01-0416_08_38.png

 

Зазоры в можно в нашем случае распределить "кучно", а можно попытаться поймать Бога за бороду. Так как при прохождении одной "позиции" энкодера мы получим увеличение счетчика на 4 единицы, то разместив зазоры равномерно по кругу мы получим 4 точки, которые можно будет использовать для вычисления скорости и направления вращения шпинделя! Сказано - сделано:

large.P1100293.jpg

 

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

large.P1100295.jpg 

 

Монтаж на станок:

large.P1100297.jpglarge.P1100301.jpg

 

И общий вид:

large.P1100302.jpg

 

Вы конечно же можете спросить, а как же теперь быть с меткой для начала движения суппорта при нарезке резьбы!? Ведь идея то была именно в том, что бы при одном сигнале на оборот (скажем при переходе с 1 на 0) начинать движение суппорта? На самом деле метка никуда и не делась - так как за полный оборот шпинделя мы всегда получаем 4 сигнала и соответственно увеличение счетчика на 4, то при делении значения счетчика на 4 с остатком ноль мы имеем "сигнал" о том, что был совершен полный оборот, и соответственно можно начинать движение суппорта. (Можно обойтись и без деления, а просто отсчитывать 4 сигнала). 

 

Итак установка ключевого узла закончена и можно переходить к программной реализации. Дали буде!

1

Поділитися повідомленням


Посилання на повідомлення
Поділитися на інших сайтах

Первые тесты на повторяемость, синхронность и точность. Как видно на видео, левый упор выставлен на 6 мм, правый - -1. Движение осуществляется синхронно со скоростью вращения шпинделя (шаг 1.5 мм/оборот). 

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

Результат более чем приличный.

 

Для наглядности демонстрации синхронности начала движения суппорта к патрону приклеен кусочек цветного скотча, движение всегда начинается при одном и том же положении патрона (на последних кадрах я постарался поймать пару таких моментов).

 

Легко так же увидеть и люфт в системе - приблизительно 0.275мм. 

 

 

 

2

Поділитися повідомленням


Посилання на повідомлення
Поділитися на інших сайтах

Прошу прощения за опечатку - шаг подачи 1мм.

0

Поділитися повідомленням


Посилання на повідомлення
Поділитися на інших сайтах

 

Небольшой тест на повторяемость при нарезке резьбы шагом 1.5 мм. (Прошу прощения за качество фокусировки камеры).

 

Змінено користувачем Gnevko
1

Поділитися повідомленням


Посилання на повідомлення
Поділитися на інших сайтах

Работа над ошибками.

 

1) Ловля Бога за бороду оказалась совершенно излишним занятием, после серии экспериментов выяснилось, что второй энкодер для определения скорости вращения шпинделя совершенно излишен и не влияет на качество синхронизации. Последнее видео было снято уже с одним энкодером и соотвественно с одним срабатыванием прерывания на оборот шпинделя (RISING прерывание вызывается только при смене значения на порту с LOW на HIGH). От использования библиобеки в данных целях так же отказался - оказалось это совершенно ненужным.

 

2) "Дребезг" оптического энкодера. Это стало для меня сюрпризом, особонно тот факт, что срабатывания происходили даже при снятых ремнях (то есть при включенном моторе, но не вращающемся шпинделе), только от того, что выключался мотор! Пришлось использовать конденсатор, подключенный к сигналу энкодера и "земле". Это помогло с дребезгом, но при включенном моторе (постоянного тока) все равно происходили ложные срабатывания энкодера. Проличилось это парой витков сигнального провода от энкодера вокруг ферритового кольца. Все это позволило отказаться от программной ловли ложных срабатываний и еще больще разгрузить Мегу.

 

3) Отказ от переменных типа float в пользу long и  int. Это значительно повысило скорость вычислений, но конечно же снизило "прозрачность" кода, так как некоторые переменные пришлось умножать на 100 или даже 10000. Вобщем - документация и комментарии - это наше всё.

 

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

Змінено користувачем Gnevko
0

Поділитися повідомленням


Посилання на повідомлення
Поділитися на інших сайтах
2 часа назад, Gnevko сказал:

что делать с люфтом?

Шо за люфт? То люфт ходового гвинта?

0

Поділитися повідомленням


Посилання на повідомлення
Поділитися на інших сайтах

Створіть акаунт або увійдіть для коментування

Ви маєте бути користувачем, щоб залишити коментар

Створити акаунт

Зареєструйтеся для отримання акаунта. Це просто!


Зареєструвати акаунт

Увійти

Вже зареєстровані? Увійдіть тут.


Увійти зараз

  • Зараз на сторінці   0 користувачів

    Немає користувачів, які переглядають цю сторінку