Linuxcnc, enkoder.
-
Autor tematu - Czytelnik forum poziom 3 (min. 30)
- Posty w temacie: 18
- Posty: 38
- Rejestracja: 25 lut 2024, 15:26
Linuxcnc, enkoder.
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
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
-
- Specjalista poziom 2 (min. 300)
- Posty w temacie: 3
- Posty: 495
- Rejestracja: 04 kwie 2006, 18:08
- Lokalizacja: Białystok
Re: Linuxcnc, enkoder.
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
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
-
Autor tematu - Czytelnik forum poziom 3 (min. 30)
- Posty w temacie: 18
- Posty: 38
- Rejestracja: 25 lut 2024, 15:26
Re: Linuxcnc, enkoder.
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

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


-
- Specjalista poziom 2 (min. 300)
- Posty w temacie: 3
- Posty: 495
- Rejestracja: 04 kwie 2006, 18:08
- Lokalizacja: Białystok
Re: Linuxcnc, enkoder.
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
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
-
- Lider FORUM (min. 2000)
- Posty w temacie: 1
- Posty: 2327
- Rejestracja: 25 kwie 2016, 11:58
- Lokalizacja: Jodlowa
- Kontakt:
Re: Linuxcnc, enkoder.
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.
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.
-
Autor tematu - Czytelnik forum poziom 3 (min. 30)
- Posty w temacie: 18
- Posty: 38
- Rejestracja: 25 lut 2024, 15:26
Re: Linuxcnc, enkoder.
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

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ą?

-
- Lider FORUM (min. 2000)
- Posty w temacie: 7
- Posty: 3766
- Rejestracja: 21 kwie 2011, 10:58
- Lokalizacja: ::
Re: Linuxcnc, enkoder.
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).
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).
-
Autor tematu - Czytelnik forum poziom 3 (min. 30)
- Posty w temacie: 18
- Posty: 38
- Rejestracja: 25 lut 2024, 15:26
Re: Linuxcnc, enkoder.
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.
# 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
Ponowię pytanie z pierwszego postu, czy ten omron będzie działał z lpt i linuxcnc? Pomijając rozdzielczość oczywiście.
a te lepsze to?atom1477 pisze:Nie bez powodu w lepszych kartach
# 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