Доброго времени суток, я прикручивал датчик оборотов шпинделя к ЕМС2, мучался примерно месяца 3 пока не вышла новая версия EMC с обновленной документацией где был пример, без него догадаться нереально.
и так в файле ххххх.hal дописываем в конце следующие:
loadrt encoder num_chan=1
addf encoder.update-counters base-thread
addf encoder.capture-position servo-thread
setp encoder.0.position-scale 1000
setp encoder.0.counter-mode 1
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
net spindle-phase-a encoder.0.phase-A
net spindle-phase-b encoder.0.phase-B
net spindle-index encoder.0.phase-Z
net spindle-phase-a <= parport.0.pin-10-in-not
net spindle-index <= parport.0.pin-11-in-not
и чего же тут написано, догадаться не сложно ))
setp encoder.0.position-scale 1000 количество импульсов/оборот вала вашего энкодера
setp encoder.0.counter-mode 1 режим при котором сигнал "фазы B" с энкодера игнорируется, если 0 то учитывается, в моем случае не было необходимости определять направление вращение шпинделя, оно было известно, а занимать лишний пин LPT не хотелось
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 \
net spindle-phase-a encoder.0.phase-A ---- привязка входов hal к програмным
net spindle-phase-b encoder.0.phase-B /
net spindle-index encoder.0.phase-Z /
net spindle-phase-a <= parport.0.pin-10-in-not - 10 пин - вход "фазы А" (в данном случае инверсный)
net spindle-index <= parport.0.pin-11-in-not - 11 пин - вход "фазы Z" "0" метки датчика (в данном случае инверсный)
если что не получится, пишите в аську помогу чем смогу )))))