Enkoder w LinuxCNC

Jak najprościej podłączyć enkoder do LinuxCNC.
1 Elektryczność
Enkoder będzie miał 3 wyjścia sygnałowe – A, B i Index oznaczany czasem też jako R lub Z. Może mieć 6 wyjść – wtedy każdy z sygnałów będzie miał swój zanegowany odpowiednik, np.: A*, B*, R*.
Do tego będzie miał przewody zasilające – na 5V albo 5-30V albo na cokolwiek.
Z zasilaniem sprawa prosta – trzeba gdzieś skołować potrzebne napięcie i zasilić zabawkę.
A przewodami sygnałowymi to zależy 😀
1.1 LPT – OptoBOB, SSK-MB2, itp.
Najczęściej będziemy mieli obłożenie pinów zbliżone do tego:
Piny CNC po LPT
| pin | funkcja LPT | funkcja CNC |
|---|---|---|
| 1 | wyjście | |
| 2 | wyjście | Step X |
| 3 | wyjście | Dir X |
| 4 | wyjście | Step Y |
| 5 | wyjście | Dir Y |
| 6 | wyjście | Step Z |
| 7 | wyjście | Dir Z |
| 8 | wyjście | |
| 9 | wyjście | |
| 10 | wejście | |
| 11 | wejście | |
| 12 | wejście | |
| 13 | wejście | |
| 14 | wyjście | |
| 15 | wejście | |
| 16 | wyjście | wrzeciono |
| 17 | wyjście | chłodziwo |
| 18-25 | masa |
Do dyspozycji mamy więc tylko piny 10, 11, 12, 13, lub 15. Niedużo. Wybieramy 3 i podpinamy sygnały
enkodera. Załóżmy, że wybraliśmy 11, 12, 13.
1.2 Mesa
Tutaj to hulaj dusza – wejść mamy zylion – podpinamy się gdzie tam pasuje. Zakładam, że mamy Mesę 5i25 z kartą 7i77 (bo to mam w łapkach – zasada będzie zawsze ta sama – drobiazgi typu nazw pinów to już sobie każdy sam znajdzie :D) podpinamy się pod pierwsze 3 wejścia cyfrowe, czyli w moim przypadku:
hm2_5i25.0.7i77.0.0.input-00
hm2_5i25.0.7i77.0.0.input-01
hm2_5i25.0.7i77.0.0.input-02
Podpinamy i przechodzimy do rozdziału drugiego.
2. Konfiguracja
2.1 Wizard
Tu nie bardzo jest się nad czym rozwodzić – ustawiamy wejścia enkodera Indeks wrzeciona, Faza A wrzeciona, Faza B wrzeciona na nasze numery pinów. U mnie to wygada jakoś tak:

2.2 “Z łapy”
Też prosto – do pliku .hal dodajemy:
loadrt encoder num_chan=1
addf encoder.update-counters base-thread
# enkoder – 80 otworków
setp encoder.0.position-scale 80.000000
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-index parport.0.pin-11-in => encoder.0.phase-Z
net spindle-phase-a parport.0.pin-12-in => encoder.0.phase-A
net spindle-phase-b parport.0.pin-13-in => encoder.0.phase-B
Większych zagadek tu nie ma – ładujemy moduł encoder i podpinamy go
to base-thread żeby się uaktualniał na bieżąco. W encoder.0.position-scale wpisujemy liczbę
impulsów na pełny obrót – jeżeli mamy enkoder spięty 1:1 z wrzecionem (u
nas dwa kółeczka 100 zębów) to przepisujemy wartość z enkodera, jeżeli
mamy jakieś przełożenie to trzeba przeliczyć.
No i to w sumie tyle konfigurowania. Powinno działać.
3. A bo mnie nie działa!
Czyli jak sobie radzić jeżeli nie ruszyło z kopyta.
Najpierw sprawdziłbym połączenia elektryczne. Na moich OptoBobach są diodki na wejściach – jeżeli wszystko jest dobrze połączone to ładnie migają. Jak nie migają to wiadomo gdzie szukać. A jak nie ma diodek to trzeba posprawdzac miernikiem czy dostajemy impulsy.
Jeżeli impulsy dochodzą, a LinuxCNC nie widzi to kolejnym krokiem będzie odpalenie Oscyloskopu HAL. Ustawiamy jako kanały sygnały spindle-index, spindle-pahase-a i spindle-phase-b, ustawiamy odświeżanie i powinno być widać ładne prostokąty. Jeżeli nie widać to może być coś skopane w HALu – wtedy jako kanały oscyloskopu ustawiamy parport.0.pin-11-in, parport.0.pin-12-in i parport.0.pin-13-in i możemy sprawdzić czy wogóle dostajemy sygnały przez port.
I już. Długo ten post czekał na dokończenie 🙂 Popróbujcie i krzyczcie w komentarzach jeżeli jeszcze coś nie jest jasne.