Podivné ukončení pohybu os

Odpovědět
Mex
Příspěvky: 10288
Registrován: 6. 2. 2014, 10:29

10. 6. 2018, 11:28

Testuju kartu Mesa 7i90 a narazil jsem na takovou podivnost.

Mám takový triviální testovací G-kód:

G21 G90 G17 G40 G49 G64 P0.03
M7
G0Z20.000
G0X0.000Y0.000S24000M3
G1X0Y0F24000
G1X200Y200
G1X0Y0
M2

Tedy jenom jeden průchod po uhlopříčce tam a zpět. Jde jen o generování pulzů, není na to fyzicky připojený žádný stroj. Takže si můžu dovolit velké rychlosti a akcelerace.
Tlačím tu Mesu hodně na limity, tak mám nastaveno 10000 pulzů/mm a max. rychlost 200mm/s, takže to generuje pulzy s frekvencí 2 MHz. Ale blbne to i při nižších rychlostech.

No a na konci LinuxCNC vygeneruje takovou podivnou koncovku. Otočí na pár pulzů směr, jako by přejel koncový bod. To by se ještě dalo chápat. Ale pak ještě několikrát zahrká tam a zpět.
Na připojeném obrázku jsou STEP a DIR pro osy X a Y.
Je tam vidět, že to na konci na 30ms otočí směr a pak s tím ještě 12ms hrká tam a zpět. Takže je to spousta průchodů servocyklem. Že by ta PID fungovala takhle divně?
Při změně směru uprostřed kódu to neudělá, tam se pěkně čistě změní směr.

Nenapadá vás prosím někoho v čem to může být?
Díky.

PS. Ještě dodatek: při použití SW stepgenů, tj. běh přes LPT, to nedělá. Tam to končí bez překmitu (viz 2. obrázek). Takže to podivné ukončení je specialita Mesy.
Takže za to fakt může ta PID v obsluze Mesy. Hráli jste si někdo s jejím laděním? Jaké tam prosím používáte parametry?
Sice je fajn, že latenci dotahují touhle PIDkou, ale skoro bych si myslel, že by to ani při přeregulování nemělo fungovat takhle. Tady přece neřešíme nějaký setrvačný systém, ale jen jitter. Teda pokud správně chápu, co to vlastně dělá.
Pulzy.jpg
Pulzy_SW.jpg
Uživatelský avatar
robokop
Site Admin
Příspěvky: 22371
Registrován: 10. 7. 2006, 12:12
Bydliště: Praha
Kontaktovat uživatele:

11. 6. 2018, 5:25

Taky myslim ze to je pidkou
Asi nastaveni pidky odpovida beznym realnym parametrum kdezto ty mas testovaci extremni
Vsechna prava na chyby vyhrazena (E)
r4cv
Příspěvky: 2681
Registrován: 8. 12. 2009, 8:32
Bydliště: Topoľčany

11. 6. 2018, 5:53

robokop píše:i kdyz mas rizeni step/dir
konfigurator linuxcnc pouziva pid smycky i na step/dir
myslim ze to je nadbytecne a smazal bych to

tj stepgeny nastavit z rychlostniho rezimu do polohoveho
a propojit to naprimo v halu
vynechat pidky
možno to už máš skontrolované, ale predsa. riešil som to na mojej mašine.
http://forum.strojirenstvi.cz/viewtopic ... 0&start=30
Mex
Příspěvky: 10288
Registrován: 6. 2. 2014, 10:29

11. 6. 2018, 5:34

Děkuji oběma za odpověď.

Jsem z toho zmatenej jak polární motýl.
Pokud jsem správně pochopil robokopův výklad na setkání na Vysočině (ještě jednou díky moc za ten výklad - bylo to málo slov, ale hodně informací), tak Mesa kompenzuje nepřesnost délky periody servothreadu pomocí PID.
To na první pohled vypadá na celkem elegantní řešení problému s jitterem (latencí), i když myslím, že PID na to možná není ten úplně ideální regulační model.
PID je vymyšlený a chová se dobře u systémů se setrvačností a/nebo dopravním zpožděním. Ale latence toho threadu přece má víceméně náhodný průběh (chvilku do plusu, chvilku do mínusu), tak mi k tomu ta PID nějak neštymuje.
Navíc nevím, z čeho pak odvodit nebo spočítat regulační konstanty P, I, D a k tomu FeedForwardy.

Prosím mohli byste mi poslat vaše nastavení té PID pro stepgeny? A případně nějaký hint jak jste k nim došli?

Děkuji pěkně.
Uživatelský avatar
robokop
Site Admin
Příspěvky: 22371
Registrován: 10. 7. 2006, 12:12
Bydliště: Praha
Kontaktovat uživatele:

11. 6. 2018, 6:20

Bezne to s tou pidkou takhle generuje pncconf
Nejsem si jistej ale myslim ze z podstaty toho jak funguje mesa to jinak nez rychlostne s pidkou ridit nelze
Softwarove stepgeny jdou ridit i polohove

Jinak bych zkusil resit tu pidku na sucho s pomoci halscope a te utilitky na online nastavovani pidky
Vsechna prava na chyby vyhrazena (E)
Mex
Příspěvky: 10288
Registrován: 6. 2. 2014, 10:29

11. 6. 2018, 7:08

S dovolením popíšu, jak si myslím, že to funguje.
Jestli je to blbě, tak mě prosím někdo opravte.

- vyšší vrstvy LinuxCNC (plánovač drah) spočítá rychlost a zrychlení pro současnou trajektorii
- ze stegpenu si přečtu aktuální polohu osy na začátku intervalu
- v servocyklu se to přepočte na přírůstek za daný interval (defaultně za 1ms u 1kHz servocyklu), tj. spočte se absolutní souřadnice, na které by měla osa být na konci následující milisekundy
- tento přírůstek se předá stepgenu, ať už SW nebo HW (v tomto případě driveru Mesy)
- stepgen spočte kolik kroků musí udělat, aby se dostal za daný interval na danou pozici, resp. jaký je koncový stav v počtu kroků, kam musí dojet

Až sem je to asi stejné pro SW i HW stepgeny.
U SW stepgenu se z počtu kroků a délky intervalu spočte frekvence pulzů, které se musí generovat, ta požadovaná frekvence se zadá modulu SW stepgenu, a ten v base-threadu generuje pulzy.
U HW stepgenu se to taky zřejmě takhle přepočte na frekvenci. Ale tady se SW nadstavba Mesy snaží být chytřejší. Vezme stávající frekvenci, kterou generovala pulzy dosud, k tomu vezme novou frekvenci, dá to do PID regulátoru, a z toho jí vyleze nějaká trochu odlišná (optimalizovaná) frekvence, kterou pak ty čítače na hradlovém poli Mesy generují.

No a otázkou je proč tam ta PID vlastně je. Předpokládám, že aktuální polohu, kde jsem na začátku intervalu, si přečte už servo-thread. Tato poloha totiž nemusí sedět s předpokládanou, protože mě třeba může omezit maximální nastavené zrychlení, takže stepgen těch kroků udělá míň. Nebo se může projevit latence, tedy nepřesnost polohy začátku toho 1ms intervalu.
Takže tady PID zatím k ničemu nepotřebuju.

Jediné, kde si snad umím představit nezbytnost nějakého dotahování frekvence pomocí PID je okamžik, kdy by se mi zpožďoval servo-thread. U SW stepgenu by se prostě vygeneroval jen požadovaný počet kroků, a v případném čase navíc na konci periody by se prostě kroky negenerovaly.
Kdežto u Mesy se (možná) předem naprogramuje čítač, a ten generuje pulzy hlava-nehlava, takže při delší periodě jich to třeba udělá pár navíc. Ale podle mě i tohle by se dalo řešit jinak (a snad i líp), než tlačením to do nějaké PIDky.

Pěkně prosím jestli mám v těch úvahách nějakou chybu, buďte té dobroty a opravte mě.
Děkuji předem.
Naposledy upravil(a) Mex dne 11. 6. 2018, 8:12, celkem upraveno 2 x.
r4cv
Příspěvky: 2681
Registrován: 8. 12. 2009, 8:32
Bydliště: Topoľčany

11. 6. 2018, 8:06

tak toto je asi o 3 úrovne nad mojimi vedomosťami. ale dobre sa to číta.
Uživatelský avatar
robokop
Site Admin
Příspěvky: 22371
Registrován: 10. 7. 2006, 12:12
Bydliště: Praha
Kontaktovat uživatele:

12. 6. 2018, 5:50

Vpodstate to funguje tak ze planovac ma pro kazdou osu primennou v ktere je pozice v ktere chce aby kazda ta osa v dany okamzik byla. Prubezne to updatuje. Obsahuje to pozici v aktualnim case vcetne akceleraci. Taky ma promennou kde ocekava skutecnou pozici stroje pro kontrolu odchylek zdali nejsou prilis velike. Tyto dve hodnoty se posilaji a prijimaji z pohonu.

http://linuxcnc.org/docs/html/man/man9/motion.9.html" onclick="window.open(this.href);return false;

axis.N.motor−pos−cmd OUT FLOAT The commanded position for this joint.
axis.N.motor−pos−fb IN FLOAT The actual position for this joint.


http://linuxcnc.org/docs/html/man/man9/ ... ml#stepgen" onclick="window.open(this.href);return false;

jak jsem psal vyse neni uplne pravda ze mesa stepgen umi jen rychlostni generovani kroku
podle dokumentace umi i pozicni
ale myslim ze to rychlostni bude pro ten stepgen prirozenejsi (je to programovatelna delicka)
Vsechna prava na chyby vyhrazena (E)
testone
Sponzor fora
Příspěvky: 7176
Registrován: 3. 12. 2010, 5:56
Bydliště: Slaný

12. 6. 2018, 5:56

robokop píše:......... Taky ma promennou kde ocekava skutecnou pozici stroje pro kontrolu odchylek zdali nejsou prilis velike. Tyto dve hodnoty se posilaji a prijimaji z pohonu.

http://linuxcnc.org/docs/html/man/man9/motion.9.html" onclick="window.open(this.href);return false;
jinými slovy - to je zpětná vazba z pravítek na osách
Chápu to dobře?
Obvykle se dějí věci obvyklé. Méně často se dějí věci neobvyklé a zcela vyjímečně se dějí věci vyjímečné...
Masturn 40 CNC, Hermle UWF1200H CNC a pár klasik
http://www.radialengine.cz" onclick="window.open(this.href);return false;
http://www.autopejsek.cz" onclick="window.open(this.href);return false;
Uživatelský avatar
OompaLoompa
Příspěvky: 459
Registrován: 28. 6. 2017, 1:45
Bydliště: Západný Slovakistan

12. 6. 2018, 2:30

Tak tých 30ms "reverzu" by som skôr videl ako aktívne brzdenie za účelom decelerácie. No a tých 12ms na konci bude skôr pokus o kompenzáciu rezonancie/vibrácií v bode zastavenia. :roll:

Že by sa v tomto konkrétnom prípade (30ms, 12ms) jednalo priamo o akúsi kompenzáciu latencie servo-cyklu (<1ms) sa ani náhodou neobávam :D i keď aj to je samozrejme realizovateľná záležitosť.
Uživatelský avatar
robokop
Site Admin
Příspěvky: 22371
Registrován: 10. 7. 2006, 12:12
Bydliště: Praha
Kontaktovat uživatele:

12. 6. 2018, 2:35

Testone:
Ne tak docela
Ty se zavadeji do pid regulatoru a odbocuji se semka kde se to myslim pak vyuziva mimo jine i k zobrazeni v GUI
Ale ten motion planer vpodstate asi jen kontroluje chybu zda neni vetsi nez povolena
Sam o sobe se o regulaci nestara
Vsechna prava na chyby vyhrazena (E)
Odpovědět

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