Страница 1 из 1

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

Добавлено: 29 апр 2017, 11:17
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.

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

Добавлено: 29 апр 2017, 11:23
aftaev
BORISBRITWA писал(а):Достаточно ли сигнала только от нуль метки будет или нет?
Нет.
BORISBRITWA писал(а):Кто как реализовывал подключение энкодера?
Запускаешь мастер настройки Lcnc. Выбираешь подключенные платы, и куда энкодер подключен... Сохраняешь этот конфиг. Открываешь HAL. От туда в свой конфиг переносишь что связано с энкодером.

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

Добавлено: 29 апр 2017, 11:25
Serg
BORISBRITWA писал(а):Но там нет подробной инструкции что и где для чего прописывать
В документации на LinuxCNC есть целый раздел про это со всеми подробностями...

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

Добавлено: 15 июн 2017, 11:06
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 
Подскажите что нет так?

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

Добавлено: 15 июн 2017, 13:02
merkwurdigliebe
addf scale.0 servo-thread
addf lowpass.0 servo-thread

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

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

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

Добавлено: 22 июн 2017, 19:06
BORISBRITWA
Сделал делитель для энкодера на микроконтроллере 1024/64 =16 им.на оборот, на скорости 100 - 1000 обор.мин через LPT нормально их считывает см.фото.Написал программу(см.фото) для резьбы, точнее пока просто решил проверить попадет ли он со второго захода в шаг и будет ли резьба похожа на заданный шаг. В итоге получилось это (смотрим фото :lol: ) Шаг увеличивается, а затем опять уменьшается?Ноль метку я инвертировал не так как на фото, т.е когда ноль метка сигнал с низкого лог.уровня переходит в высокий и затем обратно в низ. Что можно проверить в таком случае?

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

Добавлено: 28 июн 2017, 13:05
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 


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

Добавлено: 28 июн 2017, 14:57
aegis
а для чего делать делитель? может просто надо взять энкодер на сотню меток? 16 меток котоыре заведешь в лпт это очень мало - рекомендуют от 100

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

Добавлено: 28 июн 2017, 15:02
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 либо погрешность сделать больше я так понял.

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

Добавлено: 06 июл 2017, 13:38
BORISBRITWA
На прикрепленном фото три прохода по G33 сильно не углублялся.