Linuxcnc, enkoder.

Dyskusje dotyczące działania obsługi programu LinuxCNC

Autor tematu
tomareks
Czytelnik forum poziom 3 (min. 30)
Czytelnik forum poziom 3 (min. 30)
Posty w temacie: 18
Posty: 39
Rejestracja: 25 lut 2024, 15:26

Linuxcnc, enkoder.

#1

Post napisał: tomareks » 01 mar 2024, 17:16

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




kszumek
Specjalista poziom 2 (min. 300)
Specjalista poziom 2 (min. 300)
Posty w temacie: 3
Posty: 388
Rejestracja: 04 kwie 2006, 18:08
Lokalizacja: Białystok

Re: Linuxcnc, enkoder.

#2

Post napisał: kszumek » 01 mar 2024, 17:46

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


Autor tematu
tomareks
Czytelnik forum poziom 3 (min. 30)
Czytelnik forum poziom 3 (min. 30)
Posty w temacie: 18
Posty: 39
Rejestracja: 25 lut 2024, 15:26

Re: Linuxcnc, enkoder.

#3

Post napisał: tomareks » 01 mar 2024, 18:20

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


wm56
Specjalista poziom 1 (min. 100)
Specjalista poziom 1 (min. 100)
Posty w temacie: 1
Posty: 123
Rejestracja: 07 gru 2006, 23:04
Lokalizacja: Skawina

Re: Linuxcnc, enkoder.

#4

Post napisał: wm56 » 01 mar 2024, 18:48

Hej.

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


Autor tematu
tomareks
Czytelnik forum poziom 3 (min. 30)
Czytelnik forum poziom 3 (min. 30)
Posty w temacie: 18
Posty: 39
Rejestracja: 25 lut 2024, 15:26

Re: Linuxcnc, enkoder.

#5

Post napisał: tomareks » 01 mar 2024, 19:02

Dziękuję, napisałem, się przypomniałem.


kszumek
Specjalista poziom 2 (min. 300)
Specjalista poziom 2 (min. 300)
Posty w temacie: 3
Posty: 388
Rejestracja: 04 kwie 2006, 18:08
Lokalizacja: Białystok

Re: Linuxcnc, enkoder.

#6

Post napisał: kszumek » 01 mar 2024, 20:20

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


drzasiek90
ELITA FORUM (min. 1000)
ELITA FORUM (min. 1000)
Posty w temacie: 1
Posty: 1769
Rejestracja: 25 kwie 2016, 11:58
Lokalizacja: Jodlowa
Kontakt:

Re: Linuxcnc, enkoder.

#7

Post napisał: drzasiek90 » 01 mar 2024, 21:19

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.


Autor tematu
tomareks
Czytelnik forum poziom 3 (min. 30)
Czytelnik forum poziom 3 (min. 30)
Posty w temacie: 18
Posty: 39
Rejestracja: 25 lut 2024, 15:26

Re: Linuxcnc, enkoder.

#8

Post napisał: tomareks » 02 mar 2024, 14:59

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


atom1477
Lider FORUM (min. 2000)
Lider FORUM (min. 2000)
Posty w temacie: 7
Posty: 2797
Rejestracja: 21 kwie 2011, 10:58
Lokalizacja: ::

Re: Linuxcnc, enkoder.

#9

Post napisał: atom1477 » 02 mar 2024, 15:54

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).


Autor tematu
tomareks
Czytelnik forum poziom 3 (min. 30)
Czytelnik forum poziom 3 (min. 30)
Posty w temacie: 18
Posty: 39
Rejestracja: 25 lut 2024, 15:26

Re: Linuxcnc, enkoder.

#10

Post napisał: tomareks » 04 mar 2024, 17:54

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

ODPOWIEDZ Poprzedni tematNastępny temat

Wróć do „LinuxCNC (dawniej EMC2)”