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

[sourcecode language=”sh” title=”” ]
|——-+————-+————-|
| 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 |
|——-+————-+————-|
[/sourcecode]

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:

[sourcecode language=”sh” title=”” ]
hm2_5i25.0.7i77.0.0.input-00
hm2_5i25.0.7i77.0.0.input-01
hm2_5i25.0.7i77.0.0.input-02
[/sourcecode]

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:

[sourcecode language=”hal” title=”” ]
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
[/sourcecode]

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.