Нарезание резьбы энкодер
-
BORISBRITWA
- Новичок
- Сообщения: 15
- Зарегистрирован: 15 апр 2017, 08:47
- Репутация: 0
- Настоящее имя: Boris
- Контактная информация:
Нарезание резьбы энкодер
Кто как реализовывал подключение энкодера?У меня установлен 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.
читал 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: Нарезание резьбы энкодер
Нет.BORISBRITWA писал(а):Достаточно ли сигнала только от нуль метки будет или нет?
Запускаешь мастер настройки Lcnc. Выбираешь подключенные платы, и куда энкодер подключен... Сохраняешь этот конфиг. Открываешь HAL. От туда в свой конфиг переносишь что связано с энкодером.BORISBRITWA писал(а):Кто как реализовывал подключение энкодера?
Дилетанту сложные вещи кажутся очень простыми, и только профессионал понимает насколько сложна самая простая вещь
Кто хочет - ищет возможности, кто не хочет - ищет оправдание.
Найди работу по душе и тебе не придется работать.
Кто хочет - ищет возможности, кто не хочет - ищет оправдание.
Найди работу по душе и тебе не придется работать.
- Serg
- Мастер
- Сообщения: 21923
- Зарегистрирован: 17 апр 2012, 14:58
- Репутация: 5183
- Заслуга: c781c134843e0c1a3de9
- Настоящее имя: Сергей
- Откуда: Москва
- Контактная информация:
Re: Нарезание резьбы энкодер
В документации на LinuxCNC есть целый раздел про это со всеми подробностями...BORISBRITWA писал(а):Но там нет подробной инструкции что и где для чего прописывать
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
-
BORISBRITWA
- Новичок
- Сообщения: 15
- Зарегистрирован: 15 апр 2017, 08:47
- Репутация: 0
- Настоящее имя: Boris
- Контактная информация:
Re: Нарезание резьбы энкодер
Я вернулся) Энкодер подключен к 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]
postgui.hal:
Подскажите что нет так?
мой .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 #############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: Нарезание резьбы энкодер
addf scale.0 servo-thread
addf lowpass.0 servo-thread
addf lowpass.0 servo-thread
-
BORISBRITWA
- Новичок
- Сообщения: 15
- Зарегистрирован: 15 апр 2017, 08:47
- Репутация: 0
- Настоящее имя: Boris
- Контактная информация:
Re: Нарезание резьбы энкодер
Спасибо все работает.Вопрос как еще сделать чтобы светодиод соответсвующе работал(зеленый когда скорость уже набралась,красный когда нет).И еще, я так понимаю скорость у меня сейчас отображается в оборот\мин. пришлось импульсы энкодера поставить 4(setp encoder.0.position-scale 4) ,тогда все корректно показывает на разных оборотах.Хотя в реальности у меня 16 на оборот.merkwurdigliebe писал(а):addf scale.0 servo-thread
addf lowpass.0 servo-thread
-
BORISBRITWA
- Новичок
- Сообщения: 15
- Зарегистрирован: 15 апр 2017, 08:47
- Репутация: 0
- Настоящее имя: Boris
- Контактная информация:
Re: Нарезание резьбы энкодер
Сделал делитель для энкодера на микроконтроллере 1024/64 =16 им.на оборот, на скорости 100 - 1000 обор.мин через LPT нормально их считывает см.фото.Написал программу(см.фото) для резьбы, точнее пока просто решил проверить попадет ли он со второго захода в шаг и будет ли резьба похожа на заданный шаг. В итоге получилось это (смотрим фото
) Шаг увеличивается, а затем опять уменьшается?Ноль метку я инвертировал не так как на фото, т.е когда ноль метка сигнал с низкого лог.уровня переходит в высокий и затем обратно в низ. Что можно проверить в таком случае?
-
BORISBRITWA
- Новичок
- Сообщения: 15
- Зарегистрирован: 15 апр 2017, 08:47
- Репутация: 0
- Настоящее имя: Boris
- Контактная информация:
Re: Нарезание резьбы энкодер
Светодиод подключил
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 тоже корректно показывает?
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: Нарезание резьбы энкодер
а для чего делать делитель? может просто надо взять энкодер на сотню меток? 16 меток котоыре заведешь в лпт это очень мало - рекомендуют от 100
нікому нічого не нав'язую.
-
BORISBRITWA
- Новичок
- Сообщения: 15
- Зарегистрирован: 15 апр 2017, 08:47
- Репутация: 0
- Настоящее имя: Boris
- Контактная информация:
Re: Нарезание резьбы энкодер
Все норм стало пока одтбой)
в 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 либо погрешность сделать больше я так понял.
в 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: Нарезание резьбы энкодер
На прикрепленном фото три прохода по G33 сильно не углублялся.