Strona 1 z 5

Linuxcnc, enkoder.

: 01 mar 2024, 17:16
autor: tomareks
Witam.
Nie bierzcie mnie za leniwca, który czeka aż mu na tacy podadzą. Tematów o enkoderach na tym forum i nie tylko mam sporo przeczytanych, wiele tematów to starsze gdzie dominowały enkodery diy, nowsze tematy często zbaczają z kursu i nie znalazłem jednoznacznej odpowiedzi.
Bym zapomniał o najważniejszym, płyta LPT
Z tego co wyczytałem:
Enkoder inkrementalny, max 100 cpr, czyli 25 ppr (Chińczycy oznaczają p/r)
NPN
Napięcie 5V+
2 fazy + Index.
Czy to jest poprawne?
Mam jakiegoś chińczyka z tymi parametrami tylko że 100 ppr i nie udało mi się go uruchomić, oczywiście co do konfiguracji, wpisów w halu pewny nie jestem, ehh moje pierwsze kroki. Podłączyłem napięcie do enkodera, ABZ do pinów 10,11,12, i nic, zero odczytów.
Znalazłem takiego omrona E6B2-CWZ6C 20 p/r, będzie odpowiedni?

https://www.aliexpress.com/item/1005004 ... 00336085_1

Re: Linuxcnc, enkoder.

: 01 mar 2024, 17:46
autor: kszumek
Witam
trudno mówić o maks cpr jeśli nie podasz obrotów do jakich chcesz mierzyć
ja ci napisze tak enkoder 800 Cpr u mnie mierzy do gdzieś 900 obr/min
dasz 100 cpr zmierzy do 7200 obr
teraz tak jeśli ci nic nie mierzy to jest gdzieś coś nie tak miedzy enkoderem a portem LPT
i teraz napisz czy port na płycie głównej czy na karcie pci lub pciexpres
czy jest jakaś karta miedzy portem LPT a enkoderem jeśli tak to jaka (jakiaś opto litp )
daj konfig hal zobaczymy

Re: Linuxcnc, enkoder.

: 01 mar 2024, 18:20
autor: tomareks
Dzięki za podjęcie tematu. Port na płycie głównej, enkoder podłączony do zwykłej płytki lpt, próbowałem także z płytką bardzo popularną (na allegro) i także nic. Także podejrzewam konfiguracje, bo niby coś ten enkoder pokazać powinien, ale tak jak już pisałem, naprawdę pierwsze kroki w linuxcnc.
Do domu zjadę dopiero w niedzielę także plik hal. dostarczę. Obroty jakie chcę mierzyć to max 2400, ale w tej chwili to raczej staram się z linuxem polubić i testuję.
Koledzy a może ma ktoś jakiś działający konfig, tylko enkoder pod lpt, osie itd nie ważne, tak żebym mógł spojrzeć jak to ma wyglądać?
To ta popularna ;-)
Obrazek

Re: Linuxcnc, enkoder.

: 01 mar 2024, 18:48
autor: wm56
Hej.

Mogę Ci pomóc. Mam przetestowane wpisy w .hal które działają bez problemu na kilku przerobionych maszynach
Przypomnij się na PW.

Re: Linuxcnc, enkoder.

: 01 mar 2024, 19:02
autor: tomareks
Dziękuję, napisałem, się przypomniałem.

Re: Linuxcnc, enkoder.

: 01 mar 2024, 20:20
autor: kszumek
witam
dodatkowe wpisy w hal

loadrt encoder num_chan=1
addf encoder.update-counters base-thread
addf encoder.capture-position servo-thread
setp encoder.0.position-scale 800

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-position encoder.0.position => spindle.0.revs
net spindle-velocity-feedback-rps encoder.0.velocity => spindle.0.speed-in
net spindle-index-enable encoder.0.index-enable <=> spindle.0.index-enable

net spindle-phase-a <= parport.0.pin-11-in-not
net spindle-phase-b <= parport.0.pin-10-in-not
net spindle-index <= parport.0.pin-12-in-not

i teraz przyczyną prawdopodobnie jest ta płytka opto
przy 5V enkoderze
ona jest tak zrobiona że sciąga na wejsciu potencjał do masy z zasilania 12-24V
trzeba by było podłączyć bezpośrednio enkoder do wejść lpt
albo dać płytkę która dopasuje sygnały enkodera 5V do tych wejść np też na jakimś opto

Re: Linuxcnc, enkoder.

: 01 mar 2024, 21:19
autor: drzasiek90
tomareks pisze:
01 mar 2024, 17:16
Z tego co wyczytałem:
Enkoder inkrementalny, max 100 cpr, czyli 25 ppr (Chińczycy oznaczają p/r)
Nie ma takiej zasady.
Uruchomisz 100cpr, 200cpr, 800cpr. To tylko kwestia maksymalnych obrotów jakie będziesz mógł prawidłowo mierzyć.
Częstotliwość próbkowania (czyli BASE_PERIOD) musi być wyższa niż częstotliwość zmiany stanu kwadraturowego, aby linuxcnc prawidłowo mógł odczytać każdy stan.
Tu masz wyjaśnione:
enkoder-w-linuxcnc-toczenie-gwintu-para ... 87-40.html
Post numer 45.
tomareks pisze:
01 mar 2024, 18:20
To ta popularna ;-)
Obrazek
Ta płytka ma tylko jedną zaletę - jest popularna i tania. Też z niej często korzystam - z wcześniej wymienionych powodów.
Ale trzeba być świadomym jej ograniczeń i wad i umiejętnie je ominąć.
Wejścia z optoizolacją, która tak naprawdę nie jest użyteczną optoizolacją.
Aby była użyteczna optoizolacja, musi być udostępnione zarówno anoda jak i katoda diody z transoptora.
Tutaj anody podłączone są na sztywno do napięcia zasilania na tej płytce, a katody przez rezystor musisz zewrzeć do masy na tej płytce. Więc transoptor robi ci tutaj tylko jako bufor, który w przypadku enkodera jest zupełnie niepotrzebny.
Nie ma powodu, aby enkoder podłączać przez optoizolację - która zrobiona tak jak tutaj, na tanich transoptorach wprowadza dodatkowe "niepotrzebne" opóźnienia sygnału. Dlatego w tej płytce najlepsze co można zrobić, to pominąć te transoptory.

Re: Linuxcnc, enkoder.

: 02 mar 2024, 14:59
autor: tomareks
drzasiek90 pisze:Tu masz wyjaśnione: enkoder-w-linuxcnc-toczenie-gwintu-para ... 87-40.html


drzasiek90 ten temat minimum dwa razy przeczytałem, widzisz dla nowicjusza nie wszystko jest w nim od razu zrozumiałe, do tego dochodzi kilka zwrotów akcji :wink: mini zamieszanie PPR-CPR itp. Już pisałem, obroty jakie chcę mierzyć to 2400.
Chyba zrobię jak kszumek napisał i podłącze się bezpośrednio w port Lpt., tylko muszę pomyśleć jak to najłatwiej zrobić. Mam jeszcze drugą płytkę, może się bardziej nadaje? Jaką płytkę Lpt kupić, co koledzy używają?
Obrazek

Re: Linuxcnc, enkoder.

: 02 mar 2024, 15:54
autor: atom1477
Na tej płytce (na poprzedniej zresztą też) masz transoptory najprawdopodobniej PC817C, a to nie są zbyt szybkie transoptory.
Ich częstotliwość odcięcia równa 80 kHz, to częstotliwość analogowa.
Dla przebiegu cyfrowego przy założeniu że trzeba zachować ładny kształt tego przebiegu, będzie to max z 10 kHz. No i zależy to od tego jak chińczyk zaprojektował odbiór sygnału, bo jak byle jak (w sensie: dał duże pull-upy) to może to być jeszcze mniej.
To kolejne niepotrzebne ograniczenie prędkości dla portu LPT / enkodera.
Nie bez powodu w lepszych kartach, albo np. na wejściach sterowników silników krokowych, stosuje się inne transoptory (zwykle 6N136 / 6N137, albo jakieś podobne).

Re: Linuxcnc, enkoder.

: 04 mar 2024, 17:54
autor: tomareks
Panowie dorzucam mojego hala, dziś stworzony, podpiąłem się bezpośrednio pod port lpt i dalej nic, jakieś minimalne wskazania, także enkoder w śmieci, już widzę jak mi się chce jakiś filmik kręcić i chińczykowi wysyłać, że to cudo nie działa...
Ponowię pytanie z pierwszego postu, czy ten omron będzie działał z lpt i linuxcnc? Pomijając rozdzielczość oczywiście.
atom1477 pisze:Nie bez powodu w lepszych kartach
a te lepsze to?

# Generated by stepconf 1.1 at Mon Mar 4 13:03:03 2024
# If you make changes to this file, they will be
# overwritten when you run stepconf again
loadrt [KINS]KINEMATICS
loadrt [EMCMOT]EMCMOT base_period_nsec=[EMCMOT]BASE_PERIOD servo_period_nsec=[EMCMOT]SERVO_PERIOD num_joints=[KINS]JOINTS
loadrt hal_parport cfg="0 out"
setp parport.0.reset-time 5000
loadrt stepgen step_type=0,0
loadrt encoder num_chan=1
loadrt abs count=1
loadrt scale count=1
loadrt lowpass count=1
loadrt pwmgen output_type=1

addf parport.0.read base-thread
addf stepgen.make-pulses base-thread
addf encoder.update-counters 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 encoder.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
addf scale.0 servo-thread
addf lowpass.0 servo-thread

net spindle-cmd-rpm => pwmgen.0.value
net spindle-on <= spindle.0.on => pwmgen.0.enable
net spindle-pwm <= pwmgen.0.pwm
setp pwmgen.0.pwm-freq 100.0
setp pwmgen.0.scale 1166.6666666666665
setp pwmgen.0.offset 0.11428571428571428
setp pwmgen.0.dither-pwm true
net spindle-cmd-rpm <= spindle.0.speed-out
net spindle-cmd-rpm-abs <= spindle.0.speed-out-abs
net spindle-cmd-rps <= spindle.0.speed-out-rps
net spindle-cmd-rps-abs <= spindle.0.speed-out-rps-abs
net spindle-at-speed => spindle.0.at-speed
net spindle-cw <= spindle.0.forward

setp encoder.0.position-scale 400.000000
net spindle-position encoder.0.position => spindle.0.revs
net spindle-velocity-feedback-rps encoder.0.velocity => spindle.0.speed-in
net spindle-index-enable encoder.0.index-enable <=> spindle.0.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 estop-out => 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 ystep => parport.0.pin-04-out
setp parport.0.pin-04-out-reset 1
net ydir => parport.0.pin-05-out
net zstep => parport.0.pin-06-out
setp parport.0.pin-06-out-reset 1
net zdir => parport.0.pin-07-out
net astep => parport.0.pin-08-out
setp parport.0.pin-08-out-reset 1
net adir => parport.0.pin-09-out
net spindle-cw => parport.0.pin-14-out
net spindle-pwm => parport.0.pin-16-out
net xenable => parport.0.pin-17-out
net spindle-phase-a <= parport.0.pin-10-in
net spindle-index <= parport.0.pin-11-in
net spindle-phase-b <= parport.0.pin-12-in

setp stepgen.0.position-scale [JOINT_0]SCALE
setp stepgen.0.steplen 1
setp stepgen.0.stepspace 0
setp stepgen.0.dirhold 35000
setp stepgen.0.dirsetup 35000
setp stepgen.0.maxaccel [JOINT_0]STEPGEN_MAXACCEL
net xpos-cmd joint.0.motor-pos-cmd => stepgen.0.position-cmd
net xpos-fb stepgen.0.position-fb => joint.0.motor-pos-fb
net xstep <= stepgen.0.step
net xdir <= stepgen.0.dir
net xenable joint.0.amp-enable-out => stepgen.0.enable

setp stepgen.1.position-scale [JOINT_1]SCALE
setp stepgen.1.steplen 1
setp stepgen.1.stepspace 0
setp stepgen.1.dirhold 35000
setp stepgen.1.dirsetup 35000
setp stepgen.1.maxaccel [JOINT_1]STEPGEN_MAXACCEL
net zpos-cmd joint.1.motor-pos-cmd => stepgen.1.position-cmd
net zpos-fb stepgen.1.position-fb => joint.1.motor-pos-fb
net zstep <= stepgen.1.step
net zdir <= stepgen.1.dir
net zenable joint.1.amp-enable-out => stepgen.1.enable

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