• Объявления

    • softm

      Аварийная Facebook-страница для chipmaker.com.ua   15.01.2018

      Дорогие друзья! Обратите внимание, что в целях (также и аварийного) информирования участников форума chipmaker.com.ua создана фейсбук-страница https://www.facebook.com/pg/chipmakercomua/posts/?ref=page_internal. Присоединяйтесь. Чем больше нас, тем меньше их!
    • Одессит

      Новички и правила "Барахолки"   19.01.2018

      Уважаемы новые пользователи "Барахолки"!
      Т.к. Правила, похоже, из вас никто не читает, то, уведомляю, что ваши лоты размещённые с грубыми нарушениями таковых (отсутствие обязательного "ника" на фото товара, в частности) будут просто удаляться администрацией без предупреждения и попыток что-либо вам пояснить.
Gnevko

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

80 сообщений в этой теме

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

0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Є два способа.

Можна поставити ше одну ходову гайку, дві гайки злегка так законтрагаєти, і таким способом вибрати люфт.

Або перевести люфт в кількість імпульсів, потім при реверсі спочатку ту кількість імпульсів подати, а тільки після того починати переміщення.

0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

#82052 Опубликовано: (изменено)

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

Изменено пользователем Gnevko
0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

#82146 Опубликовано: (изменено)

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

Изменено пользователем Sebra
0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Ну це вже замах на повноцінний чпу, там з люфтами все строго.

Руцями токарі працюють і не з такими люфтами. Навіть в токарних підручниках вчать як з тими люфтами "жити". Щодо упорів, то в подавляючій більшості випадків важливим є лише один упор, другий то скорше для зручності, щоб само вертало супорт на початок операції.

0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Але хочу сказати, що ваш досвід є дуже цікавим та корисним.

0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Спасибо за теплые слова! 

 

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

 

https://github.com/Gnevko/Lathe-Arduino-Assistant

 

0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Добавил описание основных возможностей, реализованных на сегодня: https://github.com/Gnevko/Lathe-Arduino-Assistant/wiki/Описание-возможностей

0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

#82684 Опубликовано: (изменено)

Схема подключения компонент

 

large.5a58d008d8e29_2018-01-1216_09_39.png

Изменено пользователем Gnevko
0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Немного подправил

large.5a58d21892523_2018-01-1216_19_12.png

0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Болт в студию! 

 

large.P1100312.jpglarge.P1100315.jpg

 

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

large.P1100317.jpglarge.P1100316.jpg

 

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

1) проблема может уходить корнями в расчет скорости;

2) перевод скорости в шаги двигателя;

3) алгоритм исполнения шагов.

 

Хм ...

 

0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

#82905 Опубликовано: (изменено)

Думаю таки варто Вам задуматись над використанням "переривання" на датчику обертів.

підпрограма переривання має мати лише одну строку, типу такого:

timeSensor = millis();

а уже в основному циклі робити розрахунок часу між попереднім часом та новим

і оновлювати попередній час:

timeSensorNew = timeSensor;

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

А так, по перериванню швиденько записали час, і процесор одразу повертається до виконання тої задачі яку обробляв до цього, а коли звільнився - обрахував час.

Изменено пользователем Sebra
0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

#82914 Опубликовано: (изменено)

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

 

https://github.com/Gnevko/Lathe-Arduino-Assistant

 

Правда там я за одно и скорость вычисляю, но по идее времени на расчеты там предостаточно ....

Изменено пользователем Gnevko
0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Дроблення кроку використовувалось?

На не цілих кроках двигун зовсім не тримає позиції і ділиться той крок не порівну.

0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Вооружившись измерителем оборотов (пришлось съездить к товарищу за прибором), выяснил следующее:

1) на низких оборотах - показания прибора 168.3 - 168.4 (здесь и далее оборотов в минуту), показания с ардуино - 168.0 - 168.6

2) на "высоких" оборотах - показания прибора 723,1, показания с ардуино - 772.2 - 724.6

3) на сверх низких оборотах - показания прибора 65.4, показания с ардуино 65.4

 

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

0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

#82933 Опубликовано: (изменено)

2 часа назад, Gnevko сказал:

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

 

https://github.com/Gnevko/Lathe-Arduino-Assistant

 

Правда там я за одно и скорость вычисляю, но по идее времени на расчеты там предостаточно ....

 

Ага, бачу:

attachInterrupt(0, callbackSpindle, RISING); //PIN2

Тоді спробуйте виловити це:

3 часа назад, Gnevko сказал:

означает потерю н-го количество шагов

Упріть індікатор в супорт, та прокрутіть оберт в одну сторону, оберт в другу... разів зо 50-100 гвинт подачі

Изменено пользователем Sebra
0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
3 часа назад, Gnevko сказал:

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

large.P1100317.jpglarge.P1100316.jpg

 

 

 

А ви впевнені що покупний гвинт має достатню точність, заміряйте 10-50 витків в обох гвинтах штангеном...

0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

#82945 Опубликовано: (изменено)

3 часа назад, Roma сказал:

Дроблення кроку використовувалось?

На не цілих кроках двигун зовсім не тримає позиції і ділиться той крок не порівну.

 

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

 

1) Первый этап - вычисление скорости вращения шпинделя: 

 - при срабатывании прерывания измеряем текущее время в микросекундах;

 - вычитаем полученный результат из предыдущего, получая тем самым разницу между срабатываниями прерываний

 - вычисляем скорость вращения шпинделя в секунду: 1000000 * 100 / spindleDeltaPhase. Умножение на 100 необходимо, что бы избавиться от чисел с   плавающей точкой. Результат, для примера, 146 (то есть 1.46 оборотов шпинделя в секунду) или 87.6 оборотов в минуту.

- далее идет вычисление миллиметров, которые должен сделать суппорт за одну секунду: _spindleRevolutionsPerSecond * zAutoFeedSyncSpeed, то есть наши 146 (не забываем про умножение ранее на 100) умножаем на заданную скорость, так же умноженную на 100: 146 * 8 (или 1.46 * 0.08) и получаем, 1168, с учетом умножений на 100 двух множителей - реальное значение 0.1168 мм на оборот.

 

2) Второй этап - вычисление промежутков между шагами двигателя

 

- Вначале мы делим расстояние, которое необходимо пройти суппорту в секунду на расстояние которое проходит суппорт за один шаг:

  speed / 0.000625 тем самым получая количество шагов в секунду времени.

- Затем делим секунду на это количество шагов:

1000000 / (speed / 0.000625), но помня о том, что переменная speed у нас увеличена в 10000 раз, и желая здесь так же избавиться от плавающей точки в итоги получаем формулу:

 _deltaTimeForNextStep = 1000000 / (speed * 100 / 625).

 

На нашем примере это должно было бы быть 1000000 / (1168 * 100 / 625) = 5351, а ардуино говорит там, что 5376, что на 25 микросекунды больше чем нужно ... хм ... если резать резьбу на 30мм, то это займет 48000 шагов двигателя, если на каждом шаге терять по 25 микросекунд, то общие потери составят 1,2 секунды ... вот тебе и раз. Теперь бы понять, с какого испугу теряются здесь по  25 микросекунд!

 

3) Третий этап - собственно алгоритм выполнения шагов выполняется таймером, который тикает каждые 20 микросекунды.

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

- если при очередном срабатывании таймера прошло больше времени, чем было вычислено на втором этапе - делаем еще один шаг.

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

 

Задача - найти куда теряются 25 микросекунды на шаг!

Изменено пользователем Gnevko
0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
52 минуты назад, Sebra сказал:

 

Ага, бачу:

attachInterrupt(0, callbackSpindle, RISING); //PIN2

Тоді спробуйте виловити це:

Упріть індікатор в супорт, та прокрутіть оберт в одну сторону, оберт в другу... разів зо 50-100 гвинт подачі

 

делал, точность до сотки ... но кажется я нашел проблему (см комментарий выше), только не понятно пока как её решить.

0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

#82955 Опубликовано: (изменено)

Проблема с потерей микросекунд пролечилась заменой формулы

 

_deltaTimeForNextStep = 1000000 / ((speed * 100) / 625);

 

на

 

_deltaTimeForNextStep = 1000000.0 / ((speed * 100.0) / 625.0);

 

Сейчас посмотрим, как это повлияло на конечный результат :)

Изменено пользователем Gnevko
0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
3 минуты назад, Gnevko сказал:

Задача - найти куда теряются 25 микросекунды на шаг!

Якшо крок ходового гвинта 2 мм, і кут двигуна 1.8 градуса, то 

200 кроків то 2 мм.

1 крок то 0.01 міліметра.

Виходять дуже гарні і прості цифри.

Якшо різьба М10, крок різьби 1.5 мм, значить за час від мітки до мітки має бути 150 кроків.

Спочатку зробити на повному кроці.

Якшо на повному кроці вийде добре, то можна пробувати дробити крок на два, потім на 4, потім на 8. Але змісту у тому нема. Бо точність 0.01 мм для таких станків дуже добре якби вийшла.

Ловити точність менше 0.01 мм, буде дуже тяжко, і скоріш за все шо не можливо.

Якшо не вийде на повному кроці, значить проблема не в дробленні кроку.

 

1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Спасибо, дельный совет! 

 

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

0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Перед тем как уменьшать кол-во микрошагов, решил проверить формулы расчета от и до, сравнивая промежуточные результаты с Exel, на преобразованиях типов нашлись еще 300 микросекунды на один шаг. После возврата на тип переменных float, разнице между результатами в Exel и Ардуино составила всего лишь 2 микросекунды, вместо 350 ранее.

 

Результат не идеален, но намного лучше чем был раньше.

 

large.P1100319.jpg

0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Піві року тому збирав станочок на NEMA 42. 
Код був банально протим, але увесь час втрачалось від 1-5 кроків...
а на мікрокроках взагалі була печаль. В холосту на тесті все працювало, як подавав заготовку - ні.
Возився години 4, поки знайшов причину - втрати в проводці від драйвера до двигуна, та силова до драйвера. Китайська проводка була замінена на 1.5mm^2. Більше кроки не губились.
Іноді враховуєш найменші дрібниці, а робиш таку .... помилку.

0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!


Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.


Войти сейчас