Silnik hydrauliczny + enkoder jako tokarkowa oś Z
: 17 mar 2015, 14:29
Dzień dobry.
Mam tak:
- silnik hydrauliczny sterowany dwoma zaworami - góra/dół
- na nim założony enkoder
- wszystko sterowane dwoma optoBobami
Chciałbym z tego mieć oś Z ale nie potrafię tego wysterować.
Żeby było weselej oś ma jeździć w jedną stronę szybciej niż w drugą (praca/powrót).
(tam jeszcze jest 3 krokowce działające osobno jako osie UVW i działające razem jako oś X i podtrzymka sterowana silnikiem elektrycznym jako oś Y ale to dłuższa opowieść
)
Kombinowałem ze stepgenem - dałem tryb up/down, 'kroki' up i down przepuściłem przez timedelta żeby zrobić z kroków sygnał ciągły - niby to działa, ale rozjeżdża się z enkoderem i rzuca mi ferrorem (bo w jedną stronę szybciej w drugą wolniej). No i AXIS jakby bardziej wierzy feedbackowi ze stepgena niż mojemu feedbackowi z enkodera - nie da się jakoś zablokować feedbacka ze stepgena?
Ponieważ ten feedback stepgena był dla Axisa ważniejszy niż mój realny feedback z enkodera to zacząłem kombinować po partyzancku:
Znaczy związałem motor-pos-cmd z motor-pos-fb żeby Axis nie marudził 
Jednocześnie wrzuciłem wartość motor-pos-cmd do comp.0 - porównuję tą wartość z pozycją mojego enkodera i jak mniejsze to odpalam jeden zawór, jak większe to drugi. Dokładności jakiejś wielkiej nie potrzebuję więc comp.0.hyst mam ustawione na 1 i to mi z grubsza działa.
Problem się robi jak chcę zgrać ruch Z z ruchem X - bo wg. axisa oś już jest na pozycji a w rzeczywistości jestem jeszcze daleko i gonię zadaną pozycję.
W takim układzie nie mam też jogowania w szybszą stronę - bo jak jadę 'z palca' to mi enkoder dogania albo przegania pozycję z axisa i wtedy mi klupią zawory lewo-prawo i wszystko konkretnie tłucze
Zacząłem budować w halu kolejne pięterka andów, orów i notów - żeby sprawdzać motion.in-position i equala z comp.0 i częściowo to ogarnąłem ale mam niejasne przeczucie że źle robię.
Jak to powinno być zrobione?
Mnie się wydaje że stepgen ustawiony na up/down, wartość zadana z Axisa na pida, do pida jako feedback dać enkoder, wyjście z pida jako wartość zadana dla stepgena i potem piki up/down wygładzone na ciągłe sygnały i to na zawory, tak?
Czuję, że zamotałem opis ale to dlatego, że siebie już tez zamotałem
No to pomocy
[ Dodano: 2015-03-18, 13:35 ]
Nikt mnie nie lubi, buu ;(
Dziś mnie trochę deprecha odpuściła, pogooglałem jeszcze i chyba już wiem z grubsza.
Wykoncypowałem takie coś:
Czyli:
- wywalam bezsensownego stepgena (bo w sumie po co mi - tylko mi bruździł swoim feedbackiem)
- zadaną pozycję z Axisa wrzucam w PIDa.
- pozycję z enkodera daję jako feedback Axisa i feedback PIDa
I sztuczka za stówę:
zamiast się wozić z timedeltami i cudować z 'prostowaniem' szpilek robię taki myk, że wrzucam wyjście z PIDa w moduł abs - a abs oprócz wyjścia 'normalnego' ma też dwa piny: 'is-positive' i 'is-negative' - czyli idealne sygnały do wysterowania moich zaworów lewo-prawo.
Przecież wartość wyjściowa PIDa mnie nie interesuje - i tak mogę tylko na zaworze dać 'pełna para' albo 'stop' - więc wystarczy informacja w którą stronę mam jechać.
Co myślicie - ma to szanse zadziałać ?
Testuję na symulatorze, a jutro wrzucę to w żelazo i zobaczymy
Mam tak:
- silnik hydrauliczny sterowany dwoma zaworami - góra/dół
- na nim założony enkoder
- wszystko sterowane dwoma optoBobami
Chciałbym z tego mieć oś Z ale nie potrafię tego wysterować.

Żeby było weselej oś ma jeździć w jedną stronę szybciej niż w drugą (praca/powrót).
(tam jeszcze jest 3 krokowce działające osobno jako osie UVW i działające razem jako oś X i podtrzymka sterowana silnikiem elektrycznym jako oś Y ale to dłuższa opowieść

Kombinowałem ze stepgenem - dałem tryb up/down, 'kroki' up i down przepuściłem przez timedelta żeby zrobić z kroków sygnał ciągły - niby to działa, ale rozjeżdża się z enkoderem i rzuca mi ferrorem (bo w jedną stronę szybciej w drugą wolniej). No i AXIS jakby bardziej wierzy feedbackowi ze stepgena niż mojemu feedbackowi z enkodera - nie da się jakoś zablokować feedbacka ze stepgena?
Ponieważ ten feedback stepgena był dla Axisa ważniejszy niż mój realny feedback z enkodera to zacząłem kombinować po partyzancku:
Kod: Zaznacz cały
net zpos-cmd axis.2.motor-pos-cmd => comp.0.in1 axis.2.motor-pos-fb

Jednocześnie wrzuciłem wartość motor-pos-cmd do comp.0 - porównuję tą wartość z pozycją mojego enkodera i jak mniejsze to odpalam jeden zawór, jak większe to drugi. Dokładności jakiejś wielkiej nie potrzebuję więc comp.0.hyst mam ustawione na 1 i to mi z grubsza działa.
Problem się robi jak chcę zgrać ruch Z z ruchem X - bo wg. axisa oś już jest na pozycji a w rzeczywistości jestem jeszcze daleko i gonię zadaną pozycję.
W takim układzie nie mam też jogowania w szybszą stronę - bo jak jadę 'z palca' to mi enkoder dogania albo przegania pozycję z axisa i wtedy mi klupią zawory lewo-prawo i wszystko konkretnie tłucze

Zacząłem budować w halu kolejne pięterka andów, orów i notów - żeby sprawdzać motion.in-position i equala z comp.0 i częściowo to ogarnąłem ale mam niejasne przeczucie że źle robię.
Jak to powinno być zrobione?
Mnie się wydaje że stepgen ustawiony na up/down, wartość zadana z Axisa na pida, do pida jako feedback dać enkoder, wyjście z pida jako wartość zadana dla stepgena i potem piki up/down wygładzone na ciągłe sygnały i to na zawory, tak?
Czuję, że zamotałem opis ale to dlatego, że siebie już tez zamotałem

No to pomocy

[ Dodano: 2015-03-18, 13:35 ]
Nikt mnie nie lubi, buu ;(
Dziś mnie trochę deprecha odpuściła, pogooglałem jeszcze i chyba już wiem z grubsza.
Wykoncypowałem takie coś:
Kod: Zaznacz cały
net zpos-cmd axis.2.motor-pos-cmd => pid.0.command
net zpos-fb encoder.0.position => pid.0.feedback axis.2.motor-pos-fb
net jazda pid.0.output => abs.0.in
net zup <= abs.0.is-positive
net zdown <= abs.0.is-negative
- wywalam bezsensownego stepgena (bo w sumie po co mi - tylko mi bruździł swoim feedbackiem)
- zadaną pozycję z Axisa wrzucam w PIDa.
- pozycję z enkodera daję jako feedback Axisa i feedback PIDa
I sztuczka za stówę:
zamiast się wozić z timedeltami i cudować z 'prostowaniem' szpilek robię taki myk, że wrzucam wyjście z PIDa w moduł abs - a abs oprócz wyjścia 'normalnego' ma też dwa piny: 'is-positive' i 'is-negative' - czyli idealne sygnały do wysterowania moich zaworów lewo-prawo.
Przecież wartość wyjściowa PIDa mnie nie interesuje - i tak mogę tylko na zaworze dać 'pełna para' albo 'stop' - więc wystarczy informacja w którą stronę mam jechać.
Co myślicie - ma to szanse zadziałać ?
Testuję na symulatorze, a jutro wrzucę to w żelazo i zobaczymy
