Stránka 1 z 2

Řízení otáček SS motoru pomocí ATMEL

Napsal: 19 bře 2009, 18:46
od remmir
Již několik týdnů řeším tento problém: mám stejnosměrný motor s čidlem otáček. Čidlo dá 360 pulzů za otáčku. Motor je různě zatěžován. Potřeboval bych řídit jeho rychlost, tak aby se udržovala určitá rychlost nezávisle na zatížení. Řízení provádím pomocí pwm signálu, který leze z atmelu. Otáčky měřím tak, že po 20 pulzech spočítám kolik by jich bylo potřeba do celé sekundy. Jenže problém je, že to buď reguluje příliš pomalu nebo moc zbrkle a otáčky velice rychle kolísají. Vím, že je to problém s dynamičností motoru a s malinko zpožděným odečítáním rychlosti. Otázka je, jak tento problém vyřešit. Jak pokud možno co nejrychleji regulovat otáčky?

Napsal: 19 bře 2009, 19:29
od Atlan
A co tak merat cas mezzdi jednotlivymi impulzami ?

Napsal: 19 bře 2009, 19:41
od remmir
No to v podstatě dělám, jen jich beru víc kvůli nepřesnostem. Ono pokud bych počítal mezi jednotlivými impulsy, tak bych musel dát vysokou frekvenci tý celý procedury a ve výsledku by to bylo +-100 pulsů. Odzkoušeno. Ještě by to šlo tak s 8 pulsy. Ale to ten můj problém nevyřeší, jen ho zmenší. Neexistuje nějaké jiné řešení?

Napsal: 19 bře 2009, 21:04
od Crifodo
Buď vymysli řešení, kde bude řídicí člen reagovat na každý impuls a elektronika bude schopná regulovat motor tak, aby se nepřetáčel, nebo naopak ty impulsy integruj a reguluj motor přes pwm jako by tam bylo ss tachodynamo.
Celý problém je v nezvládnutí PID regulace s ohledem na mechanické vlastnosti motoru - setrvačnost, akcelerace, zesílení, tlumení.

Napsal: 20 bře 2009, 00:50
od mtajovsky
Atmel by měl zvládnout i pořádné digitální řízení, ale to chce cosi vědět o Z transformaci a syntéze vhodného algoritmu. V popsané situaci vidím jako hlavní problém to měření rychlosti - popsaný způsob zavádí velké dopravní zpoždění a to vždycky smrdí nestabilitou. Takže pro pomalé otáčení měřit periodu mezi impulsy, pro velké otáčky měřit jejich frekvenci. Nebo řešení podle Carifodo.

A jak je to s akčním členem regulátoru? Je schopen ten motor aktivně brzdit? Dát mu záporné napětí? Jinak vzniká nelinearita, což může být dalším zdrojem nestability.

Pokud to bude tvrdošíjně kmitat, zmenšete zesílení proporcionální složky v regulátoru a přesnost dotáhněte integrátorem. To znamená kumulovat regulační odchylku v čase a výslednou hodnotu přidávat přes nějakou konstantu na výstup.

Jinak - tohle je samostatný studijní obor :wink:

Napsal: 20 bře 2009, 09:22
od ViPali
Riešiš klasickú PID reguláciu.
Motor napájaš z DC zdroja (12V) - P
Počítaš čas medzi pulzami - I
Riadiš to PWM - D

Ak chceš, aby to malo výkom musíš zväčšiť napájacie napäti - zväčšiť P - napr na 24V.
Tým ti uletia otáčky, ktoré zmenšíš šírkou PWM impulzu. Ak chceš zväčšiť dynamiku zväčšíš šírku PWM impulzov - zväčšíš D.
Aby to bolo stabilné predĺžiš interval merania -I.
Ak dáš krátke I, bude ti to kmitať. Ak po štarte nabehneš priamo na plný výkon, neustabilizuješ to a uletí ti to z regulácie.
Urob program na štart, kde budeš postupne nabiehať s otáčkami - neviem koľko zvládne ATMEL, resp aký maš náročný (rýchly) program.
V PID regulácii je v podstate jedno či riadiš analogom alebo digitálne, pretože zložka D je nespojitá, takže dobrý program to zvládne.

Napsal: 20 bře 2009, 10:20
od Stan3
Napsat program, kde bude se bude počet impulzů A za danou dobu(1ms nebo 10ms) porovnávat s přednastavenou hodnotou B. Při A>B motor bude bržděn, A=B bez napětí, při A<B motor připojen na napájení. Napájení motoru je upravováno každou 1ms(10ms), což by mělo zaručit rychlou reakci na změnu zátěže. Výkonové buzení motoru bych použil H můstek,kde je možnost změnou polarity napájení aktivní brždění motoru.

Napsal: 20 bře 2009, 11:55
od Crifodo
Pouštět do pohonu kvantum x energie a v následujícím momentu mu x-y energie zase anulovat je ovšem z pohledu účinnosti nebo oteplení poněkud stupidní. Ten Atmel by měl umět chytřejší věci než fackovat komutaci zleva doprava.

Napsal: 20 bře 2009, 13:55
od mihal

Napsal: 20 bře 2009, 14:17
od Návštěvník
mihal píše:Nazri do studne poznania a cerpaj :wink:
http://www.freescale.com/webapp/sps/sit ... XGzm8L8528

Tak to jsi trochu vedle.

Napsal: 20 bře 2009, 17:29
od remmir
Tak teď měřím po 1 pulsu. Ale hezky se to rozkmitalo. Kmitá to tak +-70 PWM z celkového pwm 0-511. To je docela dost. Částečně pomohlo změnit toleranci rychlosti z +-5 na +-10, ale víš už jít nemohu. Co dál? Jinak pokud nastavím pwm napevno na nezatížený motor, tak měřená rychlost občas uskočí o +-30, ale možná to odpovídá skutečnost, těžko říct. Jak se to dá ustálit? Pokoušel jsem se to dělat tak, že pokud je výsledná rychlost jiná než v toleranci +-10, tak ti přičte/odečte k PWM 1, pokud je rychlost +-100 přičte/odečte další 1 a ke všemu to mám vztažené na čas. Na +-10 je malá časový úsek, na +-100 větší.

Napsal: 20 bře 2009, 17:57
od Pavel.K
Nestacil by plovouci prumer? (treba i exponencialni)

Napsal: 20 bře 2009, 18:06
od mtajovsky
Protože Chujanita nevšíma, zopakuji to: kmitání je způsobeno příliš velkým zesílením ve smyčce a nějakým dalším setrvačným článkem nebo dopravním zpožděním. To může vznikat i způsobem implementace alogoritmu v procesoru. Samotný ss motor s cizím buzením je setrvačný článek 1. řádu, pokud zanedbáme elektromagnetickou časovou konstantu, a jako takový je absolutně stabilní při jakémkoliv zesílení.

Pokud zesílení zmenšíte tak, aby kmitání ustalo, může se příliš zvětšit vzniklá ustálená chyba. To pak vyřešíte integrační složkou regulátoru. Můžete bastlit a zkoušet, ale správně byste měl identifikovat a změřit dynamické vlastnosti regulované soustavy, to znamená pro tento případ D/A převod, výkonový člen, motor a čidlo včetně vyhodnocení. A pak některou z metod pro zjištěná zesílení a časové konstanty navrhout regulátor.

Tu integrační složku můžete realizovat jednoduše. Někde přece musíte mít regulační odchylku. No, tak tuto ochylku budete neustále přičítat do nějakého akumulátoru. Rychlost přičítání určuje integrační časovou konstantu. A následně určitý díl/násobek toho součtu přidáváte k akční veličině, ovládající výkonový člen, který u vás představuje pp. D/A převod a nějaký výkovoý můstek pro motor. Pro výpočet je třeba vše převést na normalizované hodnoty, myslím zesílení jednotlivých prvků a z toho a z potřebné časové konstanty integrátoru vypočítat rychlost přičítání. Nemohu to zde podrobně vysvětlovat, tohle jsou 2 semestry na technice.

Co je to "změnit toleranci rychlosti" ? Chcete říct, že zavádíte nelinearitu typu tření v převodech, to znamená nějaké pásmo necitlivosti? Taková nelinearita sama o sobě může přinášet kmity, s tím opatrně.

Napsal: 20 bře 2009, 18:43
od remmir
Co je to "změnit toleranci rychlosti" ? Chcete říct, že zavádíte nelinearitu typu tření v převodech, to znamená nějaké pásmo necitlivosti? Taková nelinearita sama o sobě může přinášet kmity, s tím opatrně.

Ano, pásmo necitlivosti je ten správný termín. To je spíš kvůli tomu, aby se to přesně nesnažilo dodržet rychlost třeba 150, když při pwm 300 je 149 a pwm 301 je ta rychlost 151.

Napsal: 20 bře 2009, 21:40
od mtajovsky
A k čemu to? No tak se bude akční veličina měnit o +- 0,2%. To je ve většině případů daleko méně, než je vliv poruch jako změna parametrů motoru nebo proměnná zátěž.

Tohle téma je mi docela blízké, kdysi jsem číslicový regulátor ss motoru obhajoval jako svou diplomku. Byl to motor 4 kW pro pohon suportů obráběcích strojů, regulace na polohu s podřízenou rychlostní regulační smyčkou. Ovšem v té době to bylo na TTL, I8008čka nebyla dostatečně rychlá. Řízený tyristorový usměrňovač měl 8 bitový vstup, takže ještě o jeden bit méně, než váš A/D převodník. Ale žádné pasmo necitlivosti jsme nezaváděli a ani z výsledků měření nebo simulace nevyplývala jeho potřeba.

Naopak, zaváděli jsme nelinearitu typu saturace, aby se omezila maximální rychlost přeběhu motoru mezi polohami a tím i překmity.