Sterowanie falownikiem z LinuxCNC
Celem jest kontrolowanie kierunku i prędkości obrotowej wrzeciona z poziomu LinuxCNC, analogicznie do zademonstrowanego na filmie. Zakładam, że odbiorca posiada biegłość w obsłudze terminala Linuksa. Ułatwieniem może być konfiguracja zdalnych sesji X, zgodnie z instrukcjami zawartymi w moim poprzednim wpisie . W moim przypadku LinuxCNC działa bez monitora, a wszelkie działania realizuję zdalnie, korzystając z konsoli i zdalnych sesji X.
Konfiguracja
Konieczna jest konfiguracja falownika, aby akceptował polecenia przez port komunikacyjny; ten krok został opisany tutaj tutaj . Następnie Łączymy falownik z komputerem przez konwerter USB<->RS485. Nie ma potrzeby niczego instalować, ponieważ sterownik jest integralną częścią LinuxCNC. W moim systemie port komunikacyjny został przypisany jako /dev/ttyUSB0, ale nie jest to standard, więc powinieneś sprawdzić, jak jest w Twoim przypadku.
| Parametr | Wartość | Opis |
|---|---|---|
| PD001 | 2 | Sterowanie przez interfejs komunikacyjny |
| PD002 | 2 | Źródło nastawy obrotów - port komunikacyjny |
| PD163 | 1 | nadanie identyfikatora urządzenia |
| PD164 | 2 | 19200 b/s |
| PD165 | 3 | 8N1 RTU |

Konfiguracja maszyny CNC
Konfigurację rozpoczynamy od domyślnego profilu utworzonego przez kreatora LinuxCNC. Uruchamiamy kreatora i wybieramy opcję utworzenia nowej, pustej konfiguracji. Następnie nadajemy nazwę konfiguracji, wybieramy jednostki (mm lub cale) oraz wstępne parametry silników. Na tym etapie nie musimy wszystkiego definiować precyzyjnie – większość ustawień można później dopracować, edytując ręcznie pliki konfiguracyjne. Kolejnym krokiem jest odłączenie pinów domyślnie przeznaczonych do sterowania wrzecionem (najczęściej PIN 14 i 16). Jeśli tego teraz nie zrobimy, konieczne będzie późniejsze ręczne usunięcie przypisań z pliku konfiguracyjnego – w przeciwnym wypadku LinuxCNC przy uruchamianiu zgłosi konflikt mapowania pinów. Następnie dodajemy panel wyświetlający aktualną prędkość obrotową wrzeciona i przechodzimy do konfiguracji osi. Ten etap można częściowo pominąć, jeśli planujemy później wprowadzać dokładne parametry bezpośrednio w plikach konfiguracyjnych. Na koniec zatwierdzamy ustawienia. Na pulpicie pojawi się skrót do nowo utworzonej konfiguracji (w moim przypadku lunch wrzeciono_test). Po uruchomieniu LinuxCNC z tej konfiguracji zobaczymy, że możliwe jest już wirtualne sterowanie wrzecionem, jednak na tym etapie nie będzie ono jeszcze wykonywało żadnych fizycznych ruchów.
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
Po ustaleniu naszej podstawowej konfiguracji dokonujemy w niej modyfikacji. Do pliku custom.hal, znajdującego się w katalogu konfiguracji (w moim przykładzie jest to "/home/cnc/linuxcnc/configs/wrzeciono_test/"), dodajemy poniższy fragment kodu:
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 właściwymi parametrami transmisji i portem, a następnie łączymy wirtualne piny obsługujące wrzeciono. Jeżeli port komunikacyjny w Twoim systemie ma inny adres, zmień go na odpowiedni; u mnie jest to /dev/ttyUSB0. Następnie edytujemy plik. Koniec pliku powinien wyglądać tak:
# **** 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 co najmniej dwa wirtualne źródeła 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
Jeśli nadal masz problemy z konfiguracją maszyny CNC, podłączeniem falownika, napisaniem skryptu rozważ skorzystanie z moich komercyjnych usług.




