Сервопривод в качестве привода шпинделя

Mach, популярные и не очень CAD, CAM. Обсуждение и разработка программ для управления станками.
Дмитрий 123
Новичок
Сообщения: 20
Зарегистрирован: 08 окт 2024, 20:08
Репутация: 4
Настоящее имя: Дмитрий
Контактная информация:

Сервопривод в качестве привода шпинделя

Сообщение Дмитрий 123 »

Здравствуйте парни!
Возникла необходимость отслеживать положение шпинделя
Хочу добавить окошко в Mach3 со значением положения шпинделя в градусах
Допустим проворачиваю рукой шпиндель, а в этом окошке на "стойке" меняются цифры от 0 до 360" соответственно
Серва такая - 60AST-A1C0 на 600W
Подскажите пожалуйста как это можно сделать, умоляю :)
Или хотя-бы пошлите в правильном направлении :)
Аватара пользователя
ridirt
Мастер
Сообщения: 721
Зарегистрирован: 24 июл 2013, 23:52
Репутация: 277
Настоящее имя: Живописцев Андрей Викторович
Откуда: Спб
Контактная информация:

Re: Сервопривод в качестве привода шпинделя

Сообщение ridirt »

через протокол модбас походу придется заводить сигнал с энкодера как то
Аватара пользователя
iMaks-RS
Мастер
Сообщения: 1807
Зарегистрирован: 10 июл 2017, 09:25
Репутация: 205
Настоящее имя: Maks
Откуда: От туда.
Контактная информация:

Re: Сервопривод в качестве привода шпинделя

Сообщение iMaks-RS »

Дмитрий 123 писал(а): Возникла необходимость отслеживать положение шпинделя.
С Mach3 не работал, не скажу. Но это должно быть проще, чем задание положение через M19.
По идеи - для этого достаточно установить энкодер хотя-бы на 360 линий - больше врятли переварит lpt-порт
Выбранная Вами серва - сгодится для шпинделя, но получить с неё данные положения не получится.. тк. энкодер 17 бит и с сервопака(драйвера) нет предусмотрен сквозной выход сигнала с экнодера.
AlanDerby
Опытный
Сообщения: 112
Зарегистрирован: 05 авг 2021, 13:37
Репутация: 20
Контактная информация:

Re: Сервопривод в качестве привода шпинделя

Сообщение AlanDerby »

Да, черед ModBus однозначно. Я бы начал в таком порядке:
1. Обнуление текущего положения
2. Отключение SON, чтобы можно было вращать шпиндель рукой
3. Считывание данных о повороте из сервоконтроллера по ModBus с конвертацией в желаемый формат и вывод на экран.
Для всего этого понадобится документация для серву. Есть она у вас?
Производим принтеры: virshke.com
Запускаем производство станочной оснастки: virshketech.com
Дмитрий 123
Новичок
Сообщения: 20
Зарегистрирован: 08 окт 2024, 20:08
Репутация: 4
Настоящее имя: Дмитрий
Контактная информация:

Re: Сервопривод в качестве привода шпинделя

Сообщение Дмитрий 123 »

Ох красавчики! Я уж думал не ответит никто! :))))
Дмитрий 123
Новичок
Сообщения: 20
Зарегистрирован: 08 окт 2024, 20:08
Репутация: 4
Настоящее имя: Дмитрий
Контактная информация:

Re: Сервопривод в качестве привода шпинделя

Сообщение Дмитрий 123 »

iMaks-RS писал(а): 09 окт 2024, 08:08
Дмитрий 123 писал(а): Возникла необходимость отслеживать положение шпинделя.
С Mach3 не работал, не скажу. Но это должно быть проще, чем задание положение через M19.
По идеи - для этого достаточно установить энкодер хотя-бы на 360 линий - больше врятли переварит lpt-порт
Выбранная Вами серва - сгодится для шпинделя, но получить с неё данные положения не получится.. тк. энкодер 17 бит и с сервопака(драйвера) нет предусмотрен сквозной выход сигнала с экнодера.
Вот этого и боялся :(
В моих фантазиях было использовать имеющийся в серве энкодер... :(
На моей плате матч3 юсб разъём
Дмитрий 123
Новичок
Сообщения: 20
Зарегистрирован: 08 окт 2024, 20:08
Репутация: 4
Настоящее имя: Дмитрий
Контактная информация:

Re: Сервопривод в качестве привода шпинделя

Сообщение Дмитрий 123 »

AlanDerby писал(а): 09 окт 2024, 13:01 Да, черед ModBus однозначно. Я бы начал в таком порядке:
1. Обнуление текущего положения
2. Отключение SON, чтобы можно было вращать шпиндель рукой
3. Считывание данных о повороте из сервоконтроллера по ModBus с конвертацией в желаемый формат и вывод на экран.
Для всего этого понадобится документация для серву. Есть она у вас?
До момента конвертации и вывода на экран всё понятно, а дальше как в тумане :)
Документация есть, китаец сегодня прислал на русском (урезанная) и на английском (полная)
Всё прикрепил сюда
Сейчас конвертер закажу для подключения по ModBus

Пожалуйста, наставьте на путь истинный :cry:
Вложения
TH伺服_Modbus通讯功能说明V3_1_14_英文版(1).pdf
(172.32 КБ) 126 скачиваний
T3D伺服说明书_完整版V2.3_英文版_图.pdf
(32.9 МБ) 612 скачиваний
T3D_servo_RU.pdf
(13.82 МБ) 221 скачивание
AlanDerby
Опытный
Сообщения: 112
Зарегистрирован: 05 авг 2021, 13:37
Репутация: 20
Контактная информация:

Re: Сервопривод в качестве привода шпинделя

Сообщение AlanDerby »

Нужно найти ячейку памяти в сервоконтроллере, в которую записываются значения угла поворота и их считывать по ModBus.
Я понял, что у вас за контроллер, у меня похожий есть. Наверняка там такая ячейка есть, нужно только ее найти. Вечером постараюсь посмотреть документацию.
Производим принтеры: virshke.com
Запускаем производство станочной оснастки: virshketech.com
AlanDerby
Опытный
Сообщения: 112
Зарегистрирован: 05 авг 2021, 13:37
Репутация: 20
Контактная информация:

Re: Сервопривод в качестве привода шпинделя

Сообщение AlanDerby »

Посмотрел документацию.
Вам нужен адрес:

0x 0014: Motor encoder single coil absolute position (pulse) low 16 bits;

В десятичной системе это соответствует адресу "20"
Считывать по коду 04. Т.е. в Mach3 это будет "Input Reg".

Проверил на своем двигателе. У меня данные с этого адреса поступают от 1 до 10000 на один оборот, после чего обнуляются и начинают сначала. Таким образом, чтоб получить значение в привычных градусах, нужно полученное значение умножить на 0,036. Если у вас какое-то передаточное число на шпинделе, соответственно поделите полученное значение на него.

Не знаю, зачем вам все это нужно, но, как видите, сделать это не сложно. Успехов! ;)
Производим принтеры: virshke.com
Запускаем производство станочной оснастки: virshketech.com
Дмитрий 123
Новичок
Сообщения: 20
Зарегистрирован: 08 окт 2024, 20:08
Репутация: 4
Настоящее имя: Дмитрий
Контактная информация:

Re: Сервопривод в качестве привода шпинделя

Сообщение Дмитрий 123 »

AlanDerby писал(а): 10 окт 2024, 18:27 Посмотрел документацию.
Вам нужен адрес:

0x 0014: Motor encoder single coil absolute position (pulse) low 16 bits;

В десятичной системе это соответствует адресу "20"
Считывать по коду 04. Т.е. в Mach3 это будет "Input Reg".

Проверил на своем двигателе. У меня данные с этого адреса поступают от 1 до 10000 на один оборот, после чего обнуляются и начинают сначала. Таким образом, чтоб получить значение в привычных градусах, нужно полученное значение умножить на 0,036. Если у вас какое-то передаточное число на шпинделе, соответственно поделите полученное значение на него.

Не знаю, зачем вам все это нужно, но, как видите, сделать это не сложно. Успехов! ;)
Спасибо большое, что прониклись моей проблемой! :)
Я ожидал, что мне сейчас расскажут какой я тупой и т.д., а тут такая поддержка :)
У меня тоже энкодер выдает 10000 импульсов на оборот, передаточных механизмов нет всё напрямую

В Mach3 создал окно, но по коду 4 он мне предлагает B DRO, но это ж не то?

Читаю ваше сообщение уже в 30й раз и вот прям всей душой чувствую, что объяснили очень доходчиво :) Но до меня не дошло где мне необходимо умножить на 0.036...? :((((( при добавлении окошка в Mach3 нет такой возможности :(
AlanDerby
Опытный
Сообщения: 112
Зарегистрирован: 05 авг 2021, 13:37
Репутация: 20
Контактная информация:

Re: Сервопривод в качестве привода шпинделя

Сообщение AlanDerby »

Такс... понятно :)
Я создаю окна и т.п. через редактор шкурок "MachScreen".
1. Создаете окно DRO.
2. Присваиваете ему индивидуальный код, например 1001
3. Сохраняете скрин.
4. Загружаете его в Mach3
5. Ставим галочки в Port and Points
6 Перезагружаем Mach (я не перезагружал, т.к. у меня они уже стоят)
7. В Setup serial ModBus control задаете параметры связи и канал, через который будет идти связь с сервоконтроллером
8. Создаете Brains, который будет брать значения из указанного канала, конвертировать в градусы и передавать в ваше окно DRO с номером 1001.
На этом все.
Ну а чтобы совсем наглядно, сделал вам видео:
https://dzen.ru/video/watch/6708c84703818b69730e0c2b
Производим принтеры: virshke.com
Запускаем производство станочной оснастки: virshketech.com
Дмитрий 123
Новичок
Сообщения: 20
Зарегистрирован: 08 окт 2024, 20:08
Репутация: 4
Настоящее имя: Дмитрий
Контактная информация:

Re: Сервопривод в качестве привода шпинделя

Сообщение Дмитрий 123 »

AlanDerby писал(а): 11 окт 2024, 09:45 Такс... понятно :)
Я создаю окна и т.п. через редактор шкурок "MachScreen".
1. Создаете окно DRO.
2. Присваиваете ему индивидуальный код, например 1001
3. Сохраняете скрин.
4. Загружаете его в Mach3
5. Ставим галочки в Port and Points
6 Перезагружаем Mach (я не перезагружал, т.к. у меня они уже стоят)
7. В Setup serial ModBus control задаете параметры связи и канал, через который будет идти связь с сервоконтроллером
8. Создаете Brains, который будет брать значения из указанного канала, конвертировать в градусы и передавать в ваше окно DRO с номером 1001.
На этом все.
Ну а чтобы совсем наглядно, сделал вам видео:
https://dzen.ru/video/watch/6708c84703818b69730e0c2b
Как вы тонко всё подметили :)
СПАСИБО огромное!
Вот видео и описание к нему это просто кккомбо! :))))
Пошёл нажимать кнопки :)

P.S. напишите номер в личку я Вам закину на вкусную шоколадочку :) 🤝
AlanDerby
Опытный
Сообщения: 112
Зарегистрирован: 05 авг 2021, 13:37
Репутация: 20
Контактная информация:

Re: Сервопривод в качестве привода шпинделя

Сообщение AlanDerby »

Дмитрий 123 писал(а): P.S. напишите номер в личку я Вам закину на вкусную шоколадочку
Спасибо, не нужно. Должен быть круговорот добра в природе. :) Кто-то мне помог, кому-то я, кому-то вы поможете. Удачи в начинаниях! ;)
Производим принтеры: virshke.com
Запускаем производство станочной оснастки: virshketech.com
Дмитрий 123
Новичок
Сообщения: 20
Зарегистрирован: 08 окт 2024, 20:08
Репутация: 4
Настоящее имя: Дмитрий
Контактная информация:

Re: Сервопривод в качестве привода шпинделя

Сообщение Дмитрий 123 »

AlanDerby писал(а): 11 окт 2024, 18:31
Дмитрий 123 писал(а): P.S. напишите номер в личку я Вам закину на вкусную шоколадочку
Спасибо, не нужно. Должен быть круговорот добра в природе. :) Кто-то мне помог, кому-то я, кому-то вы поможете. Удачи в начинаниях! ;)
Полностью солидарен!
От души Вам за помощь и поддержку!!! ;)
Дмитрий 123
Новичок
Сообщения: 20
Зарегистрирован: 08 окт 2024, 20:08
Репутация: 4
Настоящее имя: Дмитрий
Контактная информация:

Re: Сервопривод в качестве привода шпинделя

Сообщение Дмитрий 123 »

AlanDerby писал(а): 10 окт 2024, 18:27 Посмотрел документацию.
Вам нужен адрес:

0x 0014: Motor encoder single coil absolute position (pulse) low 16 bits;

В десятичной системе это соответствует адресу "20"
Считывать по коду 04. Т.е. в Mach3 это будет "Input Reg".

Проверил на своем двигателе. У меня данные с этого адреса поступают от 1 до 10000 на один оборот, после чего обнуляются и начинают сначала. Таким образом, чтоб получить значение в привычных градусах, нужно полученное значение умножить на 0,036. Если у вас какое-то передаточное число на шпинделе, соответственно поделите полученное значение на него.

Не знаю, зачем вам все это нужно, но, как видите, сделать это не сложно. Успехов! ;)
Здравствуйте!
Провозился наверное около недели (уже потерял счёт :))
Но Ваши советы очень помогли и у меня получилось реализовать 99%
Но застопорился на том, что у меня оказывается нет такого как у Вас где от 1 до 10000 на оборот и сначала...
В этом параметре у меня от 0 и примерно до 100000, потом опять 0 (цифры на экране не вмещаются) и до примерно 31070, опять ноль и потом уже счет идёт сначала
Причём на экране драйвера цифры такие как выше, а по модбасу выводит от 0 до 65535 за пол оборота, потом опять 0 и до 65535
Нашел несколько других функций, но на всех как под копирку от 0 до 65535 за пол оборота...... т.е. получается, что я могу вывести значения за оборот только от 0 до 180 градусов 2 раза (0-180, 0-180), 360 градусов никак не получается вывести :cry:

Где я свернул не туда???? Помогите пожалуйста!!! :(((((((

p.s. стоит стандартно 2500 импульсов на оборот, множителей нет, пробовал и 250 импульсов ставить ничего не меняется, получаю всё те же 0 - 65535 за пол оборота
AlanDerby
Опытный
Сообщения: 112
Зарегистрирован: 05 авг 2021, 13:37
Репутация: 20
Контактная информация:

Re: Сервопривод в качестве привода шпинделя

Сообщение AlanDerby »

Хм... Давайте попробуем разобраться методом дедукции. :)
65535, это 2 в 16 степени. Т.е. видимо сероконтроллер воспринимает ваш энкодер, как абсолютный 16-бит. По этому, получив максимальные 65535 импульсов он сбрасывает значение на 0. При этом, раз 65535 импульсов это всего 180 градусов, то 360 это будет 131070, а это уже 2 в 17 степени, т.е. у вас не инкрементарный, как у меня, а абсолютный энкодер 17 бит. Отсюда и такая разница в показаниях - у меня 10000, а у вас должно быть 131070.

Отчего у вас сервоконтроллер выдает неверные значения? Не знаю, но есть одна идея. Когда настраиваете сервоконтроллер, то нужно указать ему, к какой модели двигателя он подключен. Смотрите раздел 4.1.2. Если у вас энкодер абсолютный, то модель двигателя должна была определиться автоматически, но производитель рекомендует перед запуском все же проверить вручную правильность установки. Возможно причина вашей проблемы в этом.
Если моя догадка верна, то после установки верной модели двигателя на выходе вы будете получать значение от 0 до 131070. Как перевести их в градусы разберетесь или подсказать?
Производим принтеры: virshke.com
Запускаем производство станочной оснастки: virshketech.com
Дмитрий 123
Новичок
Сообщения: 20
Зарегистрирован: 08 окт 2024, 20:08
Репутация: 4
Настоящее имя: Дмитрий
Контактная информация:

Re: Сервопривод в качестве привода шпинделя

Сообщение Дмитрий 123 »

AlanDerby писал(а): 02 ноя 2024, 19:12 Хм... Давайте попробуем разобраться методом дедукции. :)
65535, это 2 в 16 степени. Т.е. видимо сероконтроллер воспринимает ваш энкодер, как абсолютный 16-бит. По этому, получив максимальные 65535 импульсов он сбрасывает значение на 0. При этом, раз 65535 импульсов это всего 180 градусов, то 360 это будет 131070, а это уже 2 в 17 степени, т.е. у вас не инкрементарный, как у меня, а абсолютный энкодер 17 бит. Отсюда и такая разница в показаниях - у меня 10000, а у вас должно быть 131070.

Отчего у вас сервоконтроллер выдает неверные значения? Не знаю, но есть одна идея. Когда настраиваете сервоконтроллер, то нужно указать ему, к какой модели двигателя он подключен. Смотрите раздел 4.1.2. Если у вас энкодер абсолютный, то модель двигателя должна была определиться автоматически, но производитель рекомендует перед запуском все же проверить вручную правильность установки. Возможно причина вашей проблемы в этом.
Если моя догадка верна, то после установки верной модели двигателя на выходе вы будете получать значение от 0 до 131070. Как перевести их в градусы разберетесь или подсказать?
Проверил правильно ли задан двигатель в параметрах контроллера и к сожалению он задан верно :)

Я возможно в прошлом сообщении сумбурно всё расписал... сейчас когда я прочитал Ваши размышления попробую немного прояснить ситуацию..

Получается, что на дисплее сервоконтроллера значения отображаются верные, это абсолютное значение от 0 до 131070

А вот при подключении по модбас с выводом параметра 20 который как раз и должен выводить абсолютные значения т.е. как я понимаю он должен дублировать точно такие же цифры которые отображаются на дисплее сервоконтроллера (0 - 131070), НО он выводит максимум от 0 - 65535 2 раза за оборот (т.е. в сумме как бы 131070, но ...)
Вы пишите что 131070 это 17 бит и это верно, а в инструкции написано, что параметр 20 это Motor encoder single coil absolute position (pulse) low 16bit
Вот тогда и получается, что он выводит всё правильно в 16 битах, но не так как хотелось бы :)))

А можно ли как-то заставить контроллер выдавать этот параметр в 17 битах?
Или может можно как-то повлиять на количество импульсов которые выдаёт энкодер за оборот? Допустим разделить их на 2 и тогда он будет выдавать 65535 не за пол оборота, а за полный... или это бред? :)

Спасибо за Ваше милосердие :))))
Дмитрий 123
Новичок
Сообщения: 20
Зарегистрирован: 08 окт 2024, 20:08
Репутация: 4
Настоящее имя: Дмитрий
Контактная информация:

Re: Сервопривод в качестве привода шпинделя

Сообщение Дмитрий 123 »

AlanDerby писал(а): 02 ноя 2024, 19:12 Хм... Давайте попробуем разобраться методом дедукции. :)
65535, это 2 в 16 степени. Т.е. видимо сероконтроллер воспринимает ваш энкодер, как абсолютный 16-бит. По этому, получив максимальные 65535 импульсов он сбрасывает значение на 0. При этом, раз 65535 импульсов это всего 180 градусов, то 360 это будет 131070, а это уже 2 в 17 степени, т.е. у вас не инкрементарный, как у меня, а абсолютный энкодер 17 бит. Отсюда и такая разница в показаниях - у меня 10000, а у вас должно быть 131070.

Отчего у вас сервоконтроллер выдает неверные значения? Не знаю, но есть одна идея. Когда настраиваете сервоконтроллер, то нужно указать ему, к какой модели двигателя он подключен. Смотрите раздел 4.1.2. Если у вас энкодер абсолютный, то модель двигателя должна была определиться автоматически, но производитель рекомендует перед запуском все же проверить вручную правильность установки. Возможно причина вашей проблемы в этом.
Если моя догадка верна, то после установки верной модели двигателя на выходе вы будете получать значение от 0 до 131070. Как перевести их в градусы разберетесь или подсказать?
Нашел вот такой параметр как на скрине, он выводит на дисплей сервоконтроллера инфу в 16 битах, за оборот на экране контроллера цифры меняются от 0 - 65535, похоже на то, что нужно :)
Но я не нашел в инструкции куда записывается эта инфа :( Или не каждое желаемое значение можно считать по модбас?
Вложения
1.png (1263 просмотра) <a class='original' href='./download/file.php?id=212727&mode=view' target=_blank>Загрузить оригинал (43.28 КБ)</a>
AlanDerby
Опытный
Сообщения: 112
Зарегистрирован: 05 авг 2021, 13:37
Репутация: 20
Контактная информация:

Re: Сервопривод в качестве привода шпинделя

Сообщение AlanDerby »

Дмитрий 123 писал(а): ...или это бред?
Абсолютно точно подметили :)
17 бит энкодера это, грубо говоря, сколько импульсов он может выдать, анализируя вращение диска на 2500 линий. А "Motor encoder single coil absolute position (pulse) low 16bit" это, опять же грубо, размерность чисел, которыми передаются данные. Т.е. эти понятия ни как друг с другом не связаны. Тем не менее, размерность натолкнула меня на мысль. Мы, судя по документации, передаем данные в размерности 16 бит, а для 16 бит максимальный размер числа - 65535. Он просто не может передать число больше, вот и обнуляется.
Попробуйте считывать данные не с 20 адреса, а с 31 и 4127. По ним есть такая информация: low 16bits of absolute position of the motor (32-bit absolute position of multi-turn + single-turn data splicing). По правде говоря, не очень понимаю, что эта тарабарщина значит, но вдруг поможет?

Также в сервах встречал возможность переключить абсолютный энкодер в энкриментарный режим. Но в вашей документации я этого не нашел. Возможно невнимательно смотрел.
Производим принтеры: virshke.com
Запускаем производство станочной оснастки: virshketech.com
AlanDerby
Опытный
Сообщения: 112
Зарегистрирован: 05 авг 2021, 13:37
Репутация: 20
Контактная информация:

Re: Сервопривод в качестве привода шпинделя

Сообщение AlanDerby »

Дмитрий 123 писал(а): Нашел вот такой параметр как на скрине, он выводит на дисплей сервоконтроллера инфу в 16 битах, за оборот на экране контроллера цифры меняются от 0 - 65535, похоже на то, что нужно
Но я не нашел в инструкции куда записывается эта инфа Или не каждое желаемое значение можно считать по модбас?

Можно считать только те данные, адреса которых известны. На картинке, кстати, написано, что отображаются данные масштабированные до 16 бит. Т.е. изначально, как я и предположил, они в бОльшей размерности. Именно по этому предложил попробовать считать данные из других адресов. Там указано 32-bit absolute position. Возможно это то, что нужно. Вот еще, для пробы адреса: 22, 31, 32, 4116, 4117, 4118, 4127, 4128. Это как раз адреса информации, отображаемой на экране.
Производим принтеры: virshke.com
Запускаем производство станочной оснастки: virshketech.com
Ответить

Вернуться в «Windows / Mach»