Notatnik techniczny

Huanyang i LinuxCNC

Czytasz jeden z serii wpisów traktujących o chińskim wrzecionie i falowniku Huanyang:

Co chcemy osiągać

Chcemy sterować kierunkiem i obrotami wrzeciona z poziomu LinuxCNC, tak jak na filmie demo:

Założenia

Pisząc ten artykuł zakładam ze czytelnik przeczytał wszystkie poprzednie w tej serii oraz dość sprawnie potrafi poruszać sie w consoli linuxsa. Pomocne może być skonfigurowanie zdalnych sesji X tak jak to opisałem w tym wpisie.

W moim przypadku LinuxCNC jest bez monitora i wszystkie operacje wykonuje na nim zdalnie przy pomocy consoli, zdalnych X, lub zdalnego pulpitu VNC lecz nie jest to wymagane.

Konfiguracja

konfiguracja falownika

Pierwszym krokiem jest konfiguracja falownika aby przyjmował komendy przez port komunikacyjny, ten krok jest identyczny jak we wpisie odnośnie sterownika Mach3.

Parametr Wartość
PD001 2
PD002 2
PD163 1
PD164 2
PD165 3

Następnie łączymy falownik z komputerem przez konwerter USB<->RS485.

linuxCNC usb spindle

Nic nie musimy instalować, driver jest cześcią LinuxCNC. W moim przypadku port komunikacyjny był zmapowany jako /dev/ttyUSB0 ale nie jest to reguła wiec sprawdź jak to jest u ciebie.

Czysta bazowa konfiguracja maszyny CNC

Jako punkt wyjściowy bierzemy domyślną konfiguracje wygenerowaną przez kreator.

linuxCNC wizard

Uruchamiamy kreator i wybieramy tworzenie nowej czystej konfiguracji. Następnie nadajemy nazwę naszym ustawieniom, wybieramy jednostki i parametry silników, na tym etapie nie musimy wszystkiego ustawiać bo zawsze możemy to zmienić edytując plik.

linuxCNC wizard

Odłączamy piny, które domyślnie służyły do sterowania wrzecionem (PIN: 14, 16), jeśli tego nie zrobimy teraz to będziemy musieli usunąć mapowania z pliku konfiguracyjnego ręcznie, bo inaczej aplikacja w chwili uruchomienia zgłosi błąd konfliktu przypisania pinów.

linuxCNC wizard

Dodajemy panel z informacjami o aktualnych obrotach wrzeciona.

linuxCNC wizard

Następnie konfigurujemy kolejne osie, możemy ominąć ten etap i wprowadzić zmiany w pliku konfiguracyjnym. Ostatnim krokiem jest potwierdzenie ustawień, na pulpicie powinniśmy widzieć nowy skrót do naszej konfiguracji. W moim przypadku nazywa się lunch wrzeciono_test.

jeśli uruchomimy aplikacje sterującą na tym etapie, zobaczymy, że możemy virtualnie sterować wrzecionem ale nic sie nie dzieje. Musimy przeprowadzić dalszą konfiguracje.

Manual spindle

Jeśli chcesz zdalnie wywołać konfiguracje przez zdalne X, opisane dokładnie w innym wpisie, użyj:

linuxcnc /home/cnc/linuxcnc/configs/wrzeciono_test/wrzeciono_test.ini

Zmiany w konfiguracji

Mając naszą bazową konfiguracje wprowadzamy w niej pewne zmiany aby dodać sterowanie falownikiem.

Do pliku custom.hal w katalogu naszej konfiguracji, który w moim przypadku jest “/home/cnc/linuxcnc/configs/wrzeciono_test/” dodajemy poniższy kod:

loadusr -Wn vfd hy_vfd -n vfd -t 1 -d /dev/ttyUSB0 -p none -r 19200 -s 1

net spindle-cmd-rpm-abs => vfd.speed-command
net spindle-cw motion.spindle-forward => vfd.spindle-forward
net spindle-ccw motion.spindle-reverse => vfd.spindle-reverse
net on motion.spindle-on => vfd.spindle-on

Ładujemy sterownik, z odpowiednimi parametrami transmisji oraz portem. Następnie łączymy wirtualne piny odpowiedzialne za wrzeciono. Jeśli w twoim przypadku adres portu komunikacyjnego jest inny to go zmiań na właściwy dla ciebie, u mnie to jest /dev/ttyUSB0.

Teraz edytujemy plik custom_postgui.hal. Końcówka powinna wygadać następująco:

# **** force spindle at speed indicator true because we have no feedback ****

net spindle-at-speed => pyvcp.spindle-at-speed-led
net spindle-at-speed => vfd.spindle-at-speed

setp vfd.enable 1

Pliku wrzeciono_test.hal nie musimy edytować, zamieszczam tu jego zawartość aby pomóc przy rozwiązywaniu ewentualnych problemów przy konfliktach i błędach konfiguracji. Mogą się takie pojawić jeśli podłączymy dwa lub więcej wirtualnych źródeł do tego samego wirtualnego pinu.

# Generated by stepconf 1.1 at Fri Jun  7 16:18:24 2019
# If you make changes to this file, they will be
# overwritten when you run stepconf again
loadrt trivkins
loadrt [EMCMOT]EMCMOT base_period_nsec=[EMCMOT]BASE_PERIOD servo_period_nsec=[EMCMOT]SERVO_PERIOD num_joints=[TRAJ]AXES
loadrt hal_parport cfg="0 out"
setp parport.0.reset-time 5000
loadrt stepgen step_type=0,0,0

addf parport.0.read base-thread
addf stepgen.make-pulses base-thread
addf parport.0.write base-thread
addf parport.0.reset base-thread

addf stepgen.capture-position servo-thread
addf motion-command-handler servo-thread
addf motion-controller servo-thread
addf stepgen.update-freq servo-thread
net spindle-cmd-rpm     <= motion.spindle-speed-out
net spindle-cmd-rpm-abs <= motion.spindle-speed-out-abs
net spindle-cmd-rps     <= motion.spindle-speed-out-rps
net spindle-cmd-rps-abs <= motion.spindle-speed-out-rps-abs
net spindle-at-speed    => motion.spindle-at-speed

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 xenable         => parport.0.pin-17-out

setp stepgen.0.position-scale [AXIS_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 [AXIS_0]STEPGEN_MAXACCEL
net xpos-cmd axis.0.motor-pos-cmd => stepgen.0.position-cmd
net xpos-fb stepgen.0.position-fb => axis.0.motor-pos-fb
net xstep <= stepgen.0.step
net xdir <= stepgen.0.dir
net xenable axis.0.amp-enable-out => stepgen.0.enable

setp stepgen.1.position-scale [AXIS_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 [AXIS_1]STEPGEN_MAXACCEL
net ypos-cmd axis.1.motor-pos-cmd => stepgen.1.position-cmd
net ypos-fb stepgen.1.position-fb => axis.1.motor-pos-fb
net ystep <= stepgen.1.step
net ydir <= stepgen.1.dir
net yenable axis.1.amp-enable-out => stepgen.1.enable

setp stepgen.2.position-scale [AXIS_2]SCALE
setp stepgen.2.steplen 1
setp stepgen.2.stepspace 0
setp stepgen.2.dirhold 35000
setp stepgen.2.dirsetup 35000
setp stepgen.2.maxaccel [AXIS_2]STEPGEN_MAXACCEL
net zpos-cmd axis.2.motor-pos-cmd => stepgen.2.position-cmd
net zpos-fb stepgen.2.position-fb => axis.2.motor-pos-fb
net zstep <= stepgen.2.step
net zdir <= stepgen.2.dir
net zenable axis.2.amp-enable-out => stepgen.2.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

Usługi

To już ostatni wpis w serii poświęconej chińskiemu falownikowi Huanyang, jeśli masz problemy z konfiguracją maszyny CNC, podłączeniem falownika, napisaniem skryptu rozważ skorzystanie z moich komercyjnych usług.

Dodatkowe informacje

Pamiętaj o repozytorium GitHub. Jeśli chcesz w wygodny sposób sterować maszyną opartą o linuxCNC zdalnie korzystając z sesji X-Windows przeczytaj ten wpis.

Linki