Oś obrotowa na silniku krokowym
Czasem jest potrzeba żeby potraktować krokowca jak wrzeciono. Mamy tak na szlifierce/ostrzałce – jeżeli uruchomimy konfig ostrzałka
to oś A zachowuje się 'normalnie’ – przejeżdża na zadaną pozycję i staje. Ale mamy na tej samej maszynie konfig szlifierka
i wtedy oś A robi za wrzeciono – można włączyć/wyłączyć i ustawić prędkość obrotową.
Pokażę jak to zrobić na przykładzie osi A:
Na początku pliku .hal
jest linia ładująca moduł stepgen
. Powinna wyglądać jakoś tak:
loadrt stepgen step_type=0,0,0,0
Podajemy tu ile i jak sterowanych modułów stepgen potrzebujemy. Parametr step_type
dla każdego z silnków może mieć ustawione wartości od 0 do 15 – najprostsze to: 0 – step/dir, 1 – up/down potem zaczynają się rózne opcje sterowania fazowego – jest się czym bawić.
Dla nas ciekawszy jest drugi parametr – ctr_type
. Domyślnie mamy p
– position control – czyli sterowanie silnikiem na zadaną pozycję. Jeżeli parametr ctrl_type
nie występuje (jak widać wyżej) to znaczy że wszystkie silniki są ustawione na tą samą wartość domyślną (czyli p
).
Nuda.
Ale możemy tu też podać v
– velocity control – czyli sterowanie prędkością silnika. Coś akurat dla nas 😀
No to zmieniamy tę linijkę na:
loadrt stepgen step_type=0,0,0,0 ctrl_type=p,p,p,v
Wtedy trzy pierwsze osie są ustawione 'normalnie’, a w czwartej osi kontrolujemy prędkość.
Przechodzimy do ustawień osi. W pliku .hal
odnajdujemy blok odpowiadający za parametry osi A. Będzie wyglądał jakoś tak:
setp stepgen.3.position-scale [AXIS_3]SCALE setp stepgen.3.steplen 1 setp stepgen.3.stepspace 0 setp stepgen.3.dirhold 32000 setp stepgen.3.dirsetup 32000 setp stepgen.3.maxaccel [AXIS_3]STEPGEN_MAXACCEL net apos-cmd axis.3.motor-pos-cmd => stepgen.3.position-cmd net apos-fb stepgen.3.position-fb => axis.3.motor-pos-fb net astep <= stepgen.3.step net adir <= stepgen.3.dir net aenable axis.3.amp-enable-out => stepgen.3.enable net all-limit => axis.3.neg-lim-sw-in net all-limit => axis.3.pos-lim-sw-in
Ponieważ zmieniliśmy sposób sterowania silnikiem to zniknęły nam piny od pozycji: stepgen.3.position-cmd
(linia 7) i stepgen.3.position-fb
(linia 8)
Wyrzucamy te linie.
Teraz sprawa sterowania tą nasza osią. My sobie wymarzyliśmy że włączenie/wyłączenie będzie pod klawiszem F8 – zamiast chłodziwa. Kontrola prędkości obrotowej będzie w panelu bocznym (PyVCP).
Żeby 'przejąć kontrolę’ nad chłodziwem musimy wykomentować linię przesyłającą stan chłodziwa na port równoległy. Szukamy linii:
net coolant-flood => parport.0.pin-17-out
i wywalamy.
Za to enable
silnika 3 podpinamy pod chłodziwo – czyli zamiast:
net aenable axis.3.amp-enable-out => stepgen.3.enable
dajemy:
net coolant-flood stepgen.3.enable
Czyli fragment pliku .hal
odpowiedzialny za konfigurację osi A powinien teraz wyglądać tak:
setp stepgen.3.position-scale [AXIS_3]SCALE setp stepgen.3.steplen 1 setp stepgen.3.stepspace 0 setp stepgen.3.dirhold 32000 setp stepgen.3.dirsetup 32000 setp stepgen.3.maxaccel [AXIS_3]STEPGEN_MAXACCEL net astep <= stepgen.3.step net adir <= stepgen.3.dir net coolant-flood stepgen.3.enable net all-limit => axis.3.neg-lim-sw-in net all-limit => axis.3.pos-lim-sw-in
No dobrze – włączanie/wyłączanie ustawione. Teraz ustawianie prędkości obrotowej.
Robimy sobie plik pyvcp.xml
("Helvetica",16) "25" "pr-obr" 1 HORIZONTAL 60 40 120
i spinamy PYVCP z HALem w pliku postgui.hal
net PrObr pyvcp.pr-obr-f => stepgen.3.velocity-cmd
To załatwia sprawę – po uruchomieniu Axisa oś A powinna zachowywać się jak wrzeciono.