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 :D

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 =&gt; 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 =&gt; 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

<pyvcp>
  <labelframe text="Prędkość obrotowa">
    <scale>
      <font>("Helvetica",16)</font>
      <width>"25"</width>
      <halpin>"pr-obr"</halpin>
      <resolution>1</resolution>
      <orient>HORIZONTAL</orient>
      <initval>60</initval>
      <min_>40</min_>
      <max_>120</max_>
    </scale>
  </labelframe>
</pyvcp>

i spinamy PYVCP z HALem w pliku postgui.hal

net PrObr pyvcp.pr-obr-f =&gt; stepgen.3.velocity-cmd

To załatwia sprawę - po uruchomieniu Axisa oś A powinna zachowywać się jak wrzeciono.