Dwugłowa Mesa czyli 5i25/6i25 + 7i67 w roli tokarki.
Pierwsze przykazanie Mesownika:
Nie będziesz używał niestabilnego!
Tyczy się to zarówno stabilnego LinuxCNC puszczonego na Ubuntu 12.04 jak i wszystkich MachineKitów. Uwierzcie – jeżeli trzeba zrobić robotę to stawiamy LinuxCNC 10.04, upgrejdujemy do 2.6.5 i cieszymy się, że dodatkowych parę setek włosów pozostało na głowie.
No, czyli mamy Ubuntu 10.04, na nim LinuxCNC 2.6.5.
Mesa. Skoro to czytasz to pewnie masz. Jeżeli nie masz to u nas najwygodniej kupić od Michała z ToroMatic, albo z Czech z http://www.duzi.cz – ja mam pół na pół: jedna Mesa stąd – druga stamtąd 😀
Mam 6i25 jako kartę-matkę. To jest to samo co 5i25. 6i25 jest na PCI-E, a 5i25 na PCI – bebechy są te same. Jako kartę-córkę zastosuję 7i76 (5 osi step/dir, enkoder wrzeciona i 48 pinów we/wy). Trochę za bogato, bo wystarczyłaby spokojnie 7i78 ale nie mam.
Instalujemy kartę-matkę w kompie. Aaa, jeszcze jedno. Karty-dzieci potrzebują 5V i większość(wszystkie?) Mesowe karty-matki mają możliwość przekazania 'dziecku’ napięcia 5V z komputera. Znajdujemy więc na 5i25/6i25 dwie zworki: W1 i W2 – domyślnie są w pozycji 'DOWN’. Przestawiamy obie na 'UP’.
Dobra, sterowniki:
Ściągamy 5i25.zip z http://www.mesanet.com/software/parallel/5i25.zip
Rozpakowujemy:
unzip 5i25.zip
Flashujemy:
cd ~/Pobrane/5i25/utils/linux chmod a+x mesaflash sudo ./mesaflash –device 5i25 –write ../../configs/hostmot2/5i25_7i76x2.bit sudo ./mesaflash –device 5i25 –verify ../../configs/hostmot2/5i25_7i76x2.bit
Powinniśmy dostać: “Board configuration verified successfully”
reboot
Testujemy czy zabawki działają:
$halrun # loadrt hostmot2 # loadrt hm2_pci # show pin hm2_5i25.0
Powinniśmy dostać dłuuugą listę pinów:
Component Pins: Owner Type Dir Value Name 5 bit OUT FALSE hm2_5i25.0.7i76.0.0.input-00 5 bit OUT FALSE hm2_5i25.0.7i76.0.0.input-00-not 5 bit OUT FALSE hm2_5i25.0.7i76.0.0.input-01 5 bit OUT FALSE hm2_5i25.0.7i76.0.0.input-01-not 5 bit OUT FALSE hm2_5i25.0.7i76.0.0.input-02 5 bit OUT FALSE hm2_5i25.0.7i76.0.0.input-02-not ...
No to mamy sterowniki ogarnięte. Teraz kabelki na 7i76.
Złącze TB1.
Podajemy zewnętrzne zasilanie. Potrzeba 12V DC – u siebie maszynę przerabiałem ze sterowania opartego na OptoBoBie więc po prostu sobie pociągnąłem kabelki od zasilacza 🙂
|pin|funkcja| |---+-------| | 1 | 12V | | 8 | GND |
Złącze TB2.
Piny do podłączenia 4 silników krokowych. U mnie zwykła tokarka więc podłączyłem tylko dwa silniki:
| pin | funkcja | |-----+---------| | 3 | STEP0 | | 5 | DIR0 | | 9 | STEP1 | | 11 | DIR1 |
Złącze TB3.
Piny do przypięcia 5 silnika krokowego, enkodera i RS-422. U mnie tylko enkoder.
| pin | funkcja | | 7 | ENCA+ | | 10 | ENCB+ | | 13 | IDX+ |
Ponieważ mój enkoder ma tylko trzy wyjścia ustawiam zworki W3, W4, W5 w lewo – czyli typ sygnału 'pojedynczy’. W przypadku gdy enkoder ma 6 wyjść czyli daje sygnały różnicowe podpinamy wszystkie 6 do złącza TB3 i zworki W3, W4 i W5 przestawiamy w prawo.
Złącze TB4.
Złącze wrzeciona – u mnie falownik LG – więc ustawiłem sterowanie częstotliwością za pomocą napięcia 0-10V i podpiąłem tak:
| pin | nazwa | falownik | |-----+------------+----------| | 4 | SPINDLE- | CM | | 7 | SPINDLEOUT | V1 | | 6 | SPINDLE+ | VR 12V |
Złącze TB6.
Wejścia 0-15 i wyjścia 0-7. U mnie tylko start/stop wrzeciona i chłodziwo.
| pin | funkcja | |-----+---------| | 17 | OUTPUT0 | | 18 | OUTPUT1 |
Uff.
Zamontowane na miejscu wygląda jakoś tak:
Konfig.
Nie bardzo chyba jest się nad czym rozwodzić (jest?) – wyklikałem na PNCconfie, poprawiłem jakieś drobiazgi i biega. HALa załączam na dole w razie jakby ktoś chciał popatrzeć.
Załączniki:
Mój HAL:
loadrt trivkins loadrt [EMCMOT]EMCMOT servo_period_nsec=[EMCMOT]SERVO_PERIOD num_joints=[TRAJ]AXES loadrt probe_parport loadrt hostmot2 loadrt hm2_pci config=" num_encoders=1 num_pwmgens=0 num_3pwmgens=0 num_stepgens=5 sserial_port_0=00xxx " setp hm2_5i25.0.watchdog.timeout_ns 10000000 loadrt pid names=pid.s addf hm2_5i25.0.read servo-thread addf motion-command-handler servo-thread addf motion-controller servo-thread addf pid.s.do-pid-calcs servo-thread addf hm2_5i25.0.write servo-thread addf hm2_5i25.0.pet_watchdog servo-thread # external output signals # --- SPINDLE-CW --- net spindle-cw hm2_5i25.0.7i76.0.0.output-01 # --- COOLANT-MIST --- net coolant-flood hm2_5i25.0.7i76.0.0.output-00 # external input signals #******************* # AXIS X #******************* # Step Gen signals/setup setp hm2_5i25.0.stepgen.00.dirsetup [AXIS_0]DIRSETUP setp hm2_5i25.0.stepgen.00.dirhold [AXIS_0]DIRHOLD setp hm2_5i25.0.stepgen.00.steplen [AXIS_0]STEPLEN setp hm2_5i25.0.stepgen.00.stepspace [AXIS_0]STEPSPACE setp hm2_5i25.0.stepgen.00.position-scale [AXIS_0]STEP_SCALE setp hm2_5i25.0.stepgen.00.step_type 0 setp hm2_5i25.0.stepgen.00.control-type 0 setp hm2_5i25.0.stepgen.00.maxaccel [AXIS_0]STEPGEN_MAXACCEL setp hm2_5i25.0.stepgen.00.maxvel [AXIS_0]STEPGEN_MAXVEL net x-pos-fb axis.0.motor-pos-fb <= hm2_5i25.0.stepgen.00.position-fb net x-pos-cmd axis.0.motor-pos-cmd => hm2_5i25.0.stepgen.00.position-cmd net x-enable axis.0.amp-enable-out => hm2_5i25.0.stepgen.00.enable # ---setup home / limit switch signals--- net x-home-sw => axis.0.home-sw-in net x-neg-limit => axis.0.neg-lim-sw-in net x-pos-limit => axis.0.pos-lim-sw-in #******************* # AXIS Z #******************* # Step Gen signals/setup setp hm2_5i25.0.stepgen.01.dirsetup [AXIS_2]DIRSETUP setp hm2_5i25.0.stepgen.01.dirhold [AXIS_2]DIRHOLD setp hm2_5i25.0.stepgen.01.steplen [AXIS_2]STEPLEN setp hm2_5i25.0.stepgen.01.stepspace [AXIS_2]STEPSPACE setp hm2_5i25.0.stepgen.01.position-scale [AXIS_2]STEP_SCALE setp hm2_5i25.0.stepgen.01.step_type 0 setp hm2_5i25.0.stepgen.01.control-type 0 setp hm2_5i25.0.stepgen.01.maxaccel [AXIS_2]STEPGEN_MAXACCEL setp hm2_5i25.0.stepgen.01.maxvel [AXIS_2]STEPGEN_MAXVEL net z-pos-fb axis.2.motor-pos-fb <= hm2_5i25.0.stepgen.01.position-fb net z-pos-cmd axis.2.motor-pos-cmd => hm2_5i25.0.stepgen.01.position-cmd net z-enable axis.2.amp-enable-out => hm2_5i25.0.stepgen.01.enable # ---setup home / limit switch signals--- net z-home-sw => axis.2.home-sw-in net z-neg-limit => axis.2.neg-lim-sw-in net z-pos-limit => axis.2.pos-lim-sw-in #******************* # SPINDLE S #******************* # ---digital potentionmeter output signals/setup--- setp hm2_5i25.0.7i76.0.0.spinout-minlim [SPINDLE_9]OUTPUT_MIN_LIMIT setp hm2_5i25.0.7i76.0.0.spinout-maxlim [SPINDLE_9]OUTPUT_MAX_LIMIT setp hm2_5i25.0.7i76.0.0.spinout-scalemax [SPINDLE_9]OUTPUT_SCALE net spindle-vel-cmd-rpm-abs => hm2_5i25.0.7i76.0.0.spinout net machine-is-enabled => hm2_5i25.0.7i76.0.0.spinena net spindle-ccw => hm2_5i25.0.7i76.0.0.spindir # ---Encoder feedback signals/setup--- setp hm2_5i25.0.encoder.00.counter-mode 0 setp hm2_5i25.0.encoder.00.filter 1 setp hm2_5i25.0.encoder.00.index-invert 0 setp hm2_5i25.0.encoder.00.index-mask 0 setp hm2_5i25.0.encoder.00.index-mask-invert 0 setp hm2_5i25.0.encoder.00.scale [SPINDLE_9]ENCODER_SCALE net spindle-revs <= hm2_5i25.0.encoder.00.position net spindle-vel-fb <= hm2_5i25.0.encoder.00.velocity net spindle-index-enable <=> hm2_5i25.0.encoder.00.index-enable # ---setup spindle control signals--- net spindle-vel-cmd-rps <= motion.spindle-speed-out-rps net spindle-vel-cmd-rps-abs <= motion.spindle-speed-out-rps-abs net spindle-vel-cmd <= motion.spindle-speed-out net spindle-vel-cmd-rpm-abs <= motion.spindle-speed-out-abs net spindle-on <= motion.spindle-on net spindle-cw <= motion.spindle-forward net spindle-ccw <= motion.spindle-reverse net spindle-brake <= motion.spindle-brake net spindle-revs => motion.spindle-revs net spindle-at-speed => motion.spindle-at-speed net spindle-vel-fb => motion.spindle-speed-in net spindle-index-enable <=> motion.spindle-index-enable # ---Setup spindle at speed signals--- sets spindle-at-speed true #****************************** # connect miscellaneous signals #****************************** # ---HALUI signals--- net joint-select-a halui.joint.0.select net x-is-homed halui.joint.0.is-homed net jog-x-pos halui.jog.0.plus net jog-x-neg halui.jog.0.minus net jog-x-analog halui.jog.0.analog net joint-select-c halui.joint.2.select net z-is-homed halui.joint.2.is-homed net jog-z-pos halui.jog.2.plus net jog-z-neg halui.jog.2.minus net jog-z-analog halui.jog.2.analog net jog-selected-pos halui.jog.selected.plus net jog-selected-neg halui.jog.selected.minus net spindle-manual-cw halui.spindle.forward net spindle-manual-ccw halui.spindle.reverse net spindle-manual-stop halui.spindle.stop net machine-is-on halui.machine.is-on net jog-speed halui.jog-speed net MDI-mode halui.mode.is-mdi # ---coolant signals--- net coolant-mist <= iocontrol.0.coolant-mist net coolant-flood <= iocontrol.0.coolant-flood # ---probe signal--- net probe-in => motion.probe-input # ---motion control signals--- net in-position <= motion.in-position net machine-is-enabled <= motion.motion-enabled # ---digital in / out signals--- # ---estop signals--- net estop-out <= iocontrol.0.user-enable-out net estop-out => iocontrol.0.emc-enable-in # ---manual tool change signals--- loadusr -W hal_manualtoolchange net tool-change-request iocontrol.0.tool-change => hal_manualtoolchange.change net tool-change-confirmed 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
Moglbys mi pomoc z configiem mesy 5i25 i karty optobob
Hejka
Piszasz: „sudo ./mesaflash –device 5i25 –write ../../configs/hostmot2/5i25_7i85x2.bit”
Czy 5i25_7i85x2 to właściwy wsad?
Pozdrawiam
Nie – mój błąd oczywiście – 5i25_7i76x2.bit powinno być.
Poprawiłem – dzięki za wyłapanie.
Cześć,
Dostałem zadanie dokończenia budowy tokarki CNC, usiłuje się przebić przez tony manuali i podręczników HOW TO ale nie mogę znależć informacji co jest nie tak że nie mogę sterować prędkością obrotową wrzeciona na wstecznym.
Wrzeciono sterowane przez falownik a falownik sygnałem 0-10V.
Masz może jakąś sugestię gdzie szukać źródła problemu?
kierunki zbindowane poprawnie
net spindle-forward hm2_5i25.0.7i77.0.0.output-04 motion.spindle-forward
net spindle-reverse hm2_5i25.0.7i77.0.0.output-05 motion.spindle-reverse
CW kręci i mogę sterować obrotami
CCW kręci ale obrotów nie przyjmuje
Sprawdź w okienku „Konfiguracja HAL” jaki dostajesz sygnał PWM przy 'lewych’ obrotach – pewnie dostajesz wartość ujemną i przed wysłaniem na falownik trzeba to przepuścić w HALu przez komponent abs.