Нарезание резьбы энкодер

Обсуждение установки, настройки и использования LinuxCNC. Вопросы по Gкоду.
BORISBRITWA
Новичок
Сообщения: 15
Зарегистрирован: 15 апр 2017, 08:47
Репутация: 0
Настоящее имя: Boris
Контактная информация:

Нарезание резьбы энкодер

Сообщение BORISBRITWA »

Кто как реализовывал подключение энкодера?У меня установлен A58B-F-1024-5V аналог ему BE178а5 вот и интересует вопрос его подключения.
читал http://www.cnc-club.ru/forum/viewtopic.php?f=15&t=8460
http://www.cnc-club.com/forum/viewtopic ... 0&p=241147
Но там нет подробной инструкции что и где для чего прописывать ,с распиновкой энкодера я разберусь.Достаточно ли сигнала только от нуль метки будет или нет?
Пока для управления используется только LPT.
aftaev
Зачётный участник
Зачётный участник
Сообщения: 34042
Зарегистрирован: 04 апр 2010, 19:22
Репутация: 6194
Откуда: Казахстан.
Контактная информация:

Re: Нарезание резьбы энкодер

Сообщение aftaev »

BORISBRITWA писал(а):Достаточно ли сигнала только от нуль метки будет или нет?
Нет.
BORISBRITWA писал(а):Кто как реализовывал подключение энкодера?
Запускаешь мастер настройки Lcnc. Выбираешь подключенные платы, и куда энкодер подключен... Сохраняешь этот конфиг. Открываешь HAL. От туда в свой конфиг переносишь что связано с энкодером.
Дилетанту сложные вещи кажутся очень простыми, и только профессионал понимает насколько сложна самая простая вещь
Кто хочет - ищет возможности, кто не хочет - ищет оправдание.
Найди работу по душе и тебе не придется работать.
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5183
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: Нарезание резьбы энкодер

Сообщение Serg »

BORISBRITWA писал(а):Но там нет подробной инструкции что и где для чего прописывать
В документации на LinuxCNC есть целый раздел про это со всеми подробностями...
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
BORISBRITWA
Новичок
Сообщения: 15
Зарегистрирован: 15 апр 2017, 08:47
Репутация: 0
Настоящее имя: Boris
Контактная информация:

Re: Нарезание резьбы энкодер

Сообщение BORISBRITWA »

Я вернулся) Энкодер подключен к LPT 1024 на оборот.Собран делить на АВР получаем 16 на оборот + 0 метка.Через HAL осциллограф все нормально работает вплоть до 1000 оборотов, возможно и выше не проверял.Сигналы spindle-index ,spindle-phase-a,spindle-velocity(1.8 при 100 оборотах в мин) все работает.Не работает вывод в pyvcp т.е там обороты по 0.Думаю из за того что сигналы spindle-fb-filtered-rps,spindle-fb-filtered-abs-rps,spindle-fb-filtered-abs-rpm все по нулям.

мой .hal

Код: Выделить всё

[code]# Создан stepconf в Mon Jun 12 11:11:52 2017
# Все изменения в этом файле будут перезаписаны
# при следующем запуске stepconf
loadrt trivkins
loadrt [EMCMOT]EMCMOT base_period_nsec=[EMCMOT]BASE_PERIOD servo_period_nsec=[EMCMOT]SERVO_PERIOD num_joints=[TRAJ]AXES
loadrt probe_parport
loadrt hal_parport cfg="0x378 out"
setp parport.0.reset-time 5000
loadrt stepgen step_type=0,0
loadrt abs count=1
loadrt pwmgen output_type=1

addf parport.0.read base-thread
addf stepgen.make-pulses base-thread
addf pwmgen.make-pulses base-thread
addf parport.0.write base-thread
addf parport.0.reset base-thread

addf stepgen.capture-position servo-thread
addf motion-command-handler servo-thread
addf motion-controller servo-thread
addf stepgen.update-freq servo-thread
addf pwmgen.update servo-thread
addf abs.0 servo-thread

net spindle-cmd <= motion.spindle-speed-out => pwmgen.0.value 
net spindle-on <= motion.spindle-on => pwmgen.0.enable
net spindle-pwm <= pwmgen.0.pwm
setp pwmgen.0.pwm-freq 100.0
setp pwmgen.0.scale 2314.28571429
setp pwmgen.0.offset 0.000617283950617
setp pwmgen.0.dither-pwm true

setp parport.0.pin-01-out-invert 1
net spindle-pwm => parport.0.pin-01-out
net xstep => parport.0.pin-02-out
setp parport.0.pin-02-out-reset 1
net xdir => parport.0.pin-03-out
net zstep => parport.0.pin-06-out
setp parport.0.pin-06-out-reset 1
setp parport.0.pin-07-out-invert 1
net zdir => parport.0.pin-07-out

net home-x <= parport.0.pin-12-in
net home-z <= parport.0.pin-15-in


setp stepgen.0.position-scale [AXIS_0]SCALE
setp stepgen.0.steplen 1
setp stepgen.0.stepspace 0
setp stepgen.0.dirhold 49746
setp stepgen.0.dirsetup 49746
setp stepgen.0.maxaccel [AXIS_0]STEPGEN_MAXACCEL
net xpos-cmd axis.0.motor-pos-cmd => stepgen.0.position-cmd
net xpos-fb stepgen.0.position-fb => axis.0.motor-pos-fb
net xstep <= stepgen.0.step
net xdir <= stepgen.0.dir
net xenable axis.0.amp-enable-out => stepgen.0.enable
net home-x => axis.0.home-sw-in

setp stepgen.1.position-scale [AXIS_2]SCALE
setp stepgen.1.steplen 1
setp stepgen.1.stepspace 0
setp stepgen.1.dirhold 49746
setp stepgen.1.dirsetup 49746
setp stepgen.1.maxaccel [AXIS_2]STEPGEN_MAXACCEL
net zpos-cmd axis.2.motor-pos-cmd => stepgen.1.position-cmd
net zpos-fb stepgen.1.position-fb => axis.2.motor-pos-fb
net zstep <= stepgen.1.step
net zdir <= stepgen.1.dir
net zenable axis.2.amp-enable-out => stepgen.1.enable
net home-z => axis.2.home-sw-in

net estop-out <= iocontrol.0.user-enable-out
net estop-out => iocontrol.0.emc-enable-in

loadusr -W hal_manualtoolchange
net tool-change iocontrol.0.tool-change => hal_manualtoolchange.change
net tool-changed iocontrol.0.tool-changed <= hal_manualtoolchange.changed
net tool-number iocontrol.0.tool-prep-number => hal_manualtoolchange.number
net tool-prepare-loopback iocontrol.0.tool-prepare => iocontrol.0.tool-prepared

############# Spindle Encoder #############
# add scale and lowpass, these will be used in custom_postgui.hal
loadrt scale count=1
loadrt lowpass count=1
 
# add the encoder to HAL and attach it to threads.
loadrt encoder num_chan=1
addf encoder.update-counters base-thread
addf encoder.capture-position servo-thread
 
# set the HAL encoder to 16 pulses per revolution.
setp encoder.0.position-scale 16
 
# set the HAL encoder to non-quadrature simple counting using A only.
setp encoder.0.counter-mode true
#setp encoder.0.counter-mode 1 - alternative line
 
# connect the HAL encoder outputs to LinuxCNC.
net spindle-position encoder.0.position => motion.spindle-revs
net spindle-velocity encoder.0.velocity => motion.spindle-speed-in
net spindle-index-enable encoder.0.index-enable <=> motion.spindle-index-enable
 
# connect the HAL encoder inputs to the real encoder.
net spindle-phase-a encoder.0.phase-A <= parport.0.pin-10-in
net spindle-phase-b encoder.0.phase-B
net spindle-index encoder.0.phase-Z <= parport.0.pin-11-in-not
############# End Spindle Encoder #############
[/code]


postgui.hal:

Код: Выделить всё

setp scale.0.gain 16
setp lowpass.0.gain 0.010000
net spindle-velocity => lowpass.0.in
net spindle-fb-filtered-rps lowpass.0.out => abs.0.in
net spindle-fb-filtered-abs-rps abs.0.out => scale.0.in
net spindle-fb-filtered-abs-rpm scale.0.out => pyvcp.spindle-speed

# **** set up spindle at speed indicator ****
net spindle-at-speed => pyvcp.spindle-at-speed-led 
Подскажите что нет так?
Аватара пользователя
merkwurdigliebe
Мастер
Сообщения: 609
Зарегистрирован: 17 дек 2013, 22:14
Репутация: 580
Откуда: București
Контактная информация:

Re: Нарезание резьбы энкодер

Сообщение merkwurdigliebe »

addf scale.0 servo-thread
addf lowpass.0 servo-thread
BORISBRITWA
Новичок
Сообщения: 15
Зарегистрирован: 15 апр 2017, 08:47
Репутация: 0
Настоящее имя: Boris
Контактная информация:

Re: Нарезание резьбы энкодер

Сообщение BORISBRITWA »

merkwurdigliebe писал(а):addf scale.0 servo-thread
addf lowpass.0 servo-thread
Спасибо все работает.Вопрос как еще сделать чтобы светодиод соответсвующе работал(зеленый когда скорость уже набралась,красный когда нет).И еще, я так понимаю скорость у меня сейчас отображается в оборот\мин. пришлось импульсы энкодера поставить 4(setp encoder.0.position-scale 4) ,тогда все корректно показывает на разных оборотах.Хотя в реальности у меня 16 на оборот.
BORISBRITWA
Новичок
Сообщения: 15
Зарегистрирован: 15 апр 2017, 08:47
Репутация: 0
Настоящее имя: Boris
Контактная информация:

Re: Нарезание резьбы энкодер

Сообщение BORISBRITWA »

Сделал делитель для энкодера на микроконтроллере 1024/64 =16 им.на оборот, на скорости 100 - 1000 обор.мин через LPT нормально их считывает см.фото.Написал программу(см.фото) для резьбы, точнее пока просто решил проверить попадет ли он со второго захода в шаг и будет ли резьба похожа на заданный шаг. В итоге получилось это (смотрим фото :lol: ) Шаг увеличивается, а затем опять уменьшается?Ноль метку я инвертировал не так как на фото, т.е когда ноль метка сигнал с низкого лог.уровня переходит в высокий и затем обратно в низ. Что можно проверить в таком случае?
Вложения
20170622_102252.jpg (4318 просмотров) <a class='original' href='./download/file.php?id=114545&mode=view' target=_blank>Загрузить оригинал (3.11 МБ)</a>
20170614_094139.jpg (4318 просмотров) <a class='original' href='./download/file.php?id=114546&mode=view' target=_blank>Загрузить оригинал (3.72 МБ)</a>
20170622_102334.jpg (4318 просмотров) <a class='original' href='./download/file.php?id=114547&mode=view' target=_blank>Загрузить оригинал (1.99 МБ)</a>
BORISBRITWA
Новичок
Сообщения: 15
Зарегистрирован: 15 апр 2017, 08:47
Репутация: 0
Настоящее имя: Boris
Контактная информация:

Re: Нарезание резьбы энкодер

Сообщение BORISBRITWA »

Светодиод подключил
loadrt near

addf near.0 servo-thread

net spindle-cmd near.0.in1

net spindle-velocity near.0.in2

net spindle-at-speed motion.spindle-at-speed <= near.0.out

setp near.0.scale 1.01

net spindle-at-speed => pyvcp.spindle-at-speed-led




Кто нибудь может дать ответ почему приходится делать следующее, чтобы получить корректный обороты:

в custom_postgui.hal setp scale.0.gain 64, хотя энкодер настраивается setp encoder.0.position-scale 16.0 и используется одна фаза setp encoder.0.counter-mode true ? Либо наоборот если сделать setp encoder.0.position-scale 4.0 , setp scale.0.gain 16 тоже корректно показывает?

Код: Выделить всё

# Создан stepconf в Mon Jun 26 13:53:15 2017
# Все изменения в этом файле будут перезаписаны
# при следующем запуске stepconf
loadrt trivkins
loadrt [EMCMOT]EMCMOT base_period_nsec=[EMCMOT]BASE_PERIOD servo_period_nsec=[EMCMOT]SERVO_PERIOD num_joints=[TRAJ]AXES
loadrt probe_parport
loadrt hal_parport cfg="0x378 out  "
setp parport.0.reset-time 5000
loadrt stepgen step_type=0,0
loadrt abs count=1
loadrt pwmgen output_type=1

addf parport.0.read base-thread
addf stepgen.make-pulses base-thread
addf pwmgen.make-pulses base-thread
addf parport.0.write base-thread
addf parport.0.reset base-thread

addf stepgen.capture-position servo-thread
addf motion-command-handler servo-thread
addf motion-controller servo-thread
addf stepgen.update-freq servo-thread
addf pwmgen.update servo-thread
addf abs.0 servo-thread

net spindle-cmd <= motion.spindle-speed-out => pwmgen.0.value
net spindle-on <= motion.spindle-on => pwmgen.0.enable
net spindle-pwm <= pwmgen.0.pwm
setp pwmgen.0.pwm-freq 100.0
setp pwmgen.0.scale 2314.28571429
setp pwmgen.0.offset 0.000617283950617
setp pwmgen.0.dither-pwm true

setp parport.0.pin-01-out-invert 1
net spindle-pwm => parport.0.pin-01-out
net xstep => parport.0.pin-02-out
setp parport.0.pin-02-out-reset 1
net xdir => parport.0.pin-03-out
net zstep => parport.0.pin-06-out
setp parport.0.pin-06-out-reset 1
setp parport.0.pin-07-out-invert 1
net zdir => parport.0.pin-07-out


net home-x <= parport.0.pin-12-in
net home-z <= parport.0.pin-15-in


setp stepgen.0.position-scale [AXIS_0]SCALE
setp stepgen.0.steplen 1
setp stepgen.0.stepspace 0
setp stepgen.0.dirhold 39746
setp stepgen.0.dirsetup 39746
setp stepgen.0.maxaccel [AXIS_0]STEPGEN_MAXACCEL
net xpos-cmd axis.0.motor-pos-cmd => stepgen.0.position-cmd
net xpos-fb stepgen.0.position-fb => axis.0.motor-pos-fb
net xstep <= stepgen.0.step
net xdir <= stepgen.0.dir
net xenable axis.0.amp-enable-out => stepgen.0.enable
net home-x => axis.0.home-sw-in

setp stepgen.1.position-scale [AXIS_2]SCALE
setp stepgen.1.steplen 1
setp stepgen.1.stepspace 0
setp stepgen.1.dirhold 39746
setp stepgen.1.dirsetup 39746
setp stepgen.1.maxaccel [AXIS_2]STEPGEN_MAXACCEL
net zpos-cmd axis.2.motor-pos-cmd => stepgen.1.position-cmd
net zpos-fb stepgen.1.position-fb => axis.2.motor-pos-fb
net zstep <= stepgen.1.step
net zdir <= stepgen.1.dir
net zenable axis.2.amp-enable-out => stepgen.1.enable
net home-z => axis.2.home-sw-in

net estop-out <= iocontrol.0.user-enable-out
net estop-out => iocontrol.0.emc-enable-in

loadusr -W hal_manualtoolchange
net tool-change iocontrol.0.tool-change => hal_manualtoolchange.change
net tool-changed iocontrol.0.tool-changed <= hal_manualtoolchange.changed
net tool-number iocontrol.0.tool-prep-number => hal_manualtoolchange.number
net tool-prepare-loopback iocontrol.0.tool-prepare => iocontrol.0.tool-prepared


############# Spindle Encoder #############
# add scale and lowpass, these will be used in custom_postgui.hal
loadrt scale count=1
loadrt lowpass count=1
addf scale.0 servo-thread
addf lowpass.0 servo-thread 
# add the encoder to HAL and attach it to threads.
loadrt encoder num_chan=1
addf encoder.update-counters base-thread
addf encoder.capture-position servo-thread
 
# set the HAL encoder to 16 pulses per revolution.
setp encoder.0.position-scale 16.0
 
# set the HAL encoder to non-quadrature simple counting using A only.
setp encoder.0.counter-mode true
#setp encoder.0.counter-mode 1 - alternative line
 
# connect the HAL encoder outputs to LinuxCNC.
net spindle-position encoder.0.position => motion.spindle-revs
net spindle-velocity encoder.0.velocity => motion.spindle-speed-in
net spindle-index-enable encoder.0.index-enable <=> motion.spindle-index-enable
 
# connect the HAL encoder inputs to the real encoder.
net spindle-phase-a encoder.0.phase-A <= parport.0.pin-10-in
net spindle-phase-b encoder.0.phase-B
net spindle-index encoder.0.phase-Z <= parport.0.pin-11-in-not
############# End Spindle Encoder #############

Код: Выделить всё

setp scale.0.gain 64
setp lowpass.0.gain 0.010000
net spindle-velocity => lowpass.0.in
net spindle-fb-filtered-rps lowpass.0.out => abs.0.in
net spindle-fb-filtered-abs-rps abs.0.out => scale.0.in
net spindle-fb-filtered-abs-rpm scale.0.out => pyvcp.spindle-speed

# **** set up spindle at speed indicator ****
loadrt near

addf near.0 servo-thread

net spindle-cmd near.0.in1

net spindle-velocity near.0.in2

net spindle-at-speed motion.spindle-at-speed <= near.0.out

setp near.0.scale 1.01

net spindle-at-speed => pyvcp.spindle-at-speed-led 

Аватара пользователя
aegis
Мастер
Сообщения: 3171
Зарегистрирован: 22 мар 2012, 06:59
Репутация: 1810
Настоящее имя: Михайло
Откуда: Україна, Конотоп=>Запоріжжя=>Харьків

Re: Нарезание резьбы энкодер

Сообщение aegis »

а для чего делать делитель? может просто надо взять энкодер на сотню меток? 16 меток котоыре заведешь в лпт это очень мало - рекомендуют от 100
нікому нічого не нав'язую.
BORISBRITWA
Новичок
Сообщения: 15
Зарегистрирован: 15 апр 2017, 08:47
Репутация: 0
Настоящее имя: Boris
Контактная информация:

Re: Нарезание резьбы энкодер

Сообщение BORISBRITWA »

Все норм стало пока одтбой)
в custom_postgui.hal setp scale.0.gain 60, энкодер setp encoder.0.position-scale 16.0
После настройки светодиода pyvcp.spindle-at-speed-led перестал "идти" на резьбу обороты заданы 200 в реальности по тахометру 208.xx и показывает скорость тоже 208 .Либо корректнее настроить PWM либо погрешность сделать больше я так понял.
BORISBRITWA
Новичок
Сообщения: 15
Зарегистрирован: 15 апр 2017, 08:47
Репутация: 0
Настоящее имя: Boris
Контактная информация:

Re: Нарезание резьбы энкодер

Сообщение BORISBRITWA »

На прикрепленном фото три прохода по G33 сильно не углублялся.
Вложения
20170706_131431.jpg (4186 просмотров) <a class='original' href='./download/file.php?id=115500&mode=view' target=_blank>Загрузить оригинал (3.57 МБ)</a>
Ответить

Вернуться в «LinuxCNC»