Step/Dir serva, enkodéry a PID smyčka

Odpovědět
dwander
Příspěvky: 124
Registrován: 11. 5. 2010, 7:28
Bydliště: Vsetínsko
Kontaktovat uživatele:

31. 5. 2020, 2:40

Ahojte, mám tu serva od omronu, která baští step/dir (nebo CW/CCW). Driver má vlastní PID smyčku a do LinuxCNC vrací ABZ signál z enkodéru.

Chtěl bych pro kontrolu pozice tento signál využít, navíc taky pro homovaní os bych rád využil index (Z z enkodéru).

Dokončil jsem svoji oddělovací desku pro mesu a při prvních zkouškách jsem zjistil že se bije PID smyčka LCNC a driveru, takže motor vibruje a a navíc při rozjezdu dostanu pos-follow error.

zatím jsem jenom přehodil axis.0.motor-pos-fb na ten z enkodéru místo ze stepgenu, jinak je konfig víceméně generovaný PnConf.

Nasměroval by mě prosím někdo, jak zbavit konfliktu PID smyček? Jestli to chápu správně, LCNC se snaží regulovat servo podle zpětné vazby a bije se s PID smyčkou driveru.

Můj HAL: https://pastebin.com/wyb2rcNX (nakonfigurována je jen osa X, ostatní neřešte)
Uživatelský avatar
robokop
Site Admin
Příspěvky: 22399
Registrován: 10. 7. 2006, 12:12
Bydliště: Praha
Kontaktovat uživatele:

31. 5. 2020, 2:48

Zrusit pid v linuxcnc pouze vracet pozici feedback a tu pidku dat pryc
Lcnc pak bude hlidat odchylky ale bez korekce ta je na driveru
Vsechna prava na chyby vyhrazena (E)
dwander
Příspěvky: 124
Registrován: 11. 5. 2010, 7:28
Bydliště: Vsetínsko
Kontaktovat uživatele:

31. 5. 2020, 2:58

@robokop to jsem si myslel, jen nevim jak na to, poradil bys mi prosim konkretneji?
r4cv
Příspěvky: 2694
Registrován: 8. 12. 2009, 8:32
Bydliště: Topoľčany

31. 5. 2020, 3:17

v podstate stačí upraviť:
net x-index-enable <=> pid.x.index-enable
net x-enable => pid.x.enable
net x-pos-cmd => pid.x.command
net x-vel-cmd => pid.x.command-deriv
net x-pos-fb => pid.x.feedback
net x-output => pid.x.output

net x-pos-cmd <= axis.0.motor-pos-cmd

takto:
net x-index-enable <=> pid.x.index-enable
net x-enable => pid.x.enable
net x-pos-cmd => pid.x.command
net x-vel-cmd => pid.x.command-deriv
net x-pos-fb => pid.x.feedback
####net x-output => pid.x.output

net x-output <= axis.0.motor-pos-cmd

týmto presmeruješ výstup z command priamo do stepgenu
Uživatelský avatar
robokop
Site Admin
Příspěvky: 22399
Registrován: 10. 7. 2006, 12:12
Bydliště: Praha
Kontaktovat uživatele:

31. 5. 2020, 3:51

X-pos-fb bych si nalinkoval z toho encoderu aby se kontrolovality chyby pozice a ukazovalo to realnou polohu serva ne tu virtualni podle vystupnich step/dir signalu
Vsechna prava na chyby vyhrazena (E)
dwander
Příspěvky: 124
Registrován: 11. 5. 2010, 7:28
Bydliště: Vsetínsko
Kontaktovat uživatele:

31. 5. 2020, 6:20

Zkusil jsem to jak poradil r4cv. Ted se tochova lepe, netrepe se to.

Problem je ted v tom, ze si servo jezdi jak chce. Po zapnuti v pohode, ale jak dam posuv +/- tak se servo rozjede a po chvili follow error. pri dalsim zapnuti se servo rovnou rozjede bez povelu a o neco rychleji, nez pred tim a tak dale az do restartu LCNC.

Ze by spatne nastavene scale faktory u step a encoder?
r4cv
Příspěvky: 2694
Registrován: 8. 12. 2009, 8:32
Bydliště: Topoľčany

1. 6. 2020, 5:55

skús nastaviť (dočasne) v INI súbore, v sekcii AXIS
MIN_FERROR napr. 1000. potom by ti to nemalo padať do chyby. Keď to naladíš, tak hodnotu vrátiš späť.
Uživatelský avatar
Juro
Příspěvky: 1612
Registrován: 19. 3. 2007, 12:14
Bydliště: Kamanová (Topoľčany)

4. 6. 2020, 4:41

Preco pouzivas setp hm2_7i93.0.stepgen.02.step_type 1 a nie 0 ????

Najskor si nalad pid slucku sero/driver
net x-pos-fb axis.0.motor-pos-fb <= hm2_7i93.0.stepgen.02.position-fb

Ak naladis toto do max. tvojich pozadovanych rychlosti, tak az potom lad slucku LCNC.
net x-pos-fb axis.0.motor-pos-fb <= hm2_7i93.0.encoder.02.position
rocnik 1976 -stolár, trosicka uz aj strojar.
dwander
Příspěvky: 124
Registrován: 11. 5. 2010, 7:28
Bydliště: Vsetínsko
Kontaktovat uživatele:

5. 6. 2020, 6:49

Step type 1 používám kvůli vychzimu nastavení driveru na cw/ccw pulsy, kdy dovoluje o něco vyšší rychlost než step/dir.
Uživatelský avatar
Juro
Příspěvky: 1612
Registrován: 19. 3. 2007, 12:14
Bydliště: Kamanová (Topoľčany)

5. 6. 2020, 6:58

Takze bez systemovej slucky ti to bezi podla tvojich predstav?
Upravoval si aj tieto hodnoty:?
setp hm2_7i93.0.stepgen.02.dirsetup [AXIS_0]DIRSETUP
setp hm2_7i93.0.stepgen.02.dirhold [AXIS_0]DIRHOLD
setp hm2_7i93.0.stepgen.02.steplen [AXIS_0]STEPLEN
setp hm2_7i93.0.stepgen.02.stepspace [AXIS_0]STEPSPACE
rocnik 1976 -stolár, trosicka uz aj strojar.
dwander
Příspěvky: 124
Registrován: 11. 5. 2010, 7:28
Bydliště: Vsetínsko
Kontaktovat uživatele:

23. 6. 2020, 3:19

Juro, časy jsem zatím neupravoval, k tomu se dostanu až budu řešit max rychlost.

Dneska jsem měl konečně možnost to trochu vyzkoušet a chování je následovné:

Zapnu ENABLE - nic se neděje.
Dám JOG +, servo se rozjede (správným směrem), ale samo nezastaví, dokud nenastane FERROR.

Pokud před tím, než nastane error, vypnu enable a znova nahodím, servo se rozjede opačným směrem a většinou rychleji. Opět pojede samo, dokud nebude error, nebo neshodím enable.

Pokud zapínám a vypínám v rychlém sledu enable, servo se střídavě rozjíždí +/-, pokaždé o něco pomaleji. Jakoby osciluje kolem žádané pozice, ale nedokáže na ní zastavit.

Pokud přepínám enable dost dlouho, servo zůstane TÉMĚŘ stát, ale pořád velmi pomalu ujíždí.

Rychlost rozjezdu po zapnutí enable, je přímo úměrná aktuální odchylce ok žádané polohy.

Přikládám znova konfig v aktuální podobě:

HAL: https://pastebin.com/G27zTfav
INI: https://pastebin.com/Dm2PNrsQ

Opět jen osa X.
Myslím že z toho začínám šedivět... :oops:
Uživatelský avatar
Juro
Příspěvky: 1612
Registrován: 19. 3. 2007, 12:14
Bydliště: Kamanová (Topoľčany)

23. 6. 2020, 7:44

Nastav v hale setp pid.x.maxerror .0005 na 0.05
a v ini:

FERROR =1
MIN_FERROR = 5
P = 3
FF1 = 1
ENCODER_SCALE = ? pozor aj na zaporne hodnoty

Preco mas prehodene encodery z osi x na z a opacne? Je to OK?
Ak ano tak prirad spatnu vazbu z encoderov.
Najlepsie spravis ak si opravis celu cast osi X podla osi Y lebo je tam chaos.
rocnik 1976 -stolár, trosicka uz aj strojar.
dwander
Příspěvky: 124
Registrován: 11. 5. 2010, 7:28
Bydliště: Vsetínsko
Kontaktovat uživatele:

24. 6. 2020, 5:55

Zkusil jsem se vrátit na začátek a změnil jsem signály, jak jsi mi radil poprvé. Tady je chování:

https://photos.app.goo.gl/LEZxm5CfEeqvtzwE8

a HAL

https://pastebin.com/aNHqHqqB

5mm, by měla být jedna otáčka, což pokud vrátím hal do úplně původního stavu taky je.

To chování mi nedává moc smysl, jakoby někde chyběla zpětná vazba.

Který stepgen a enkoder pro kterou osu neres, to mam podle desky a je to OK.
Uživatelský avatar
Juro
Příspěvky: 1612
Registrován: 19. 3. 2007, 12:14
Bydliště: Kamanová (Topoľčany)

24. 6. 2020, 7:39

toto si povol
#net x-pos-fb => axis.0.motor-pos-fb
#net x-output => pid.x.output

toto mas ok
net x-pos-fb <= hm2_7i93.0.stepgen.02.position-fb
#net x-pos-fb => axis.0.motor-pos-fb

toto prepis na0.05
setp pid.x.maxerror .0005

nevidim nastavenie .ini. ktore si tak ci tak musis doladit

a este skus masaker, toto prepisat na nulu (ale iba docasne)
setp hm2_7i93.0.encoder.02.filter 1
rocnik 1976 -stolár, trosicka uz aj strojar.
dwander
Příspěvky: 124
Registrován: 11. 5. 2010, 7:28
Bydliště: Vsetínsko
Kontaktovat uživatele:

24. 6. 2020, 8:09

Juro píše: 24. 6. 2020, 7:39 toto si povol
#net x-output => pid.x.output
Proc mam znova povolit soft PID, kdyz driver serva ma svoje vlastni PID?

nastaveni maxerror = servo lita v klidu tam a zpet o pul otacky (pri pouziti FB z enkoderu)
Odpovědět

Zpět na „LinuxCNC - drive pod nazvem EMC2“