Re: regulace DC motoru - podvozek se dvěma motory

Pavel Hudecek edizon na seznam.cz
Pondělí Leden 7 10:25:40 CET 2019


1. Arduinisti využívají toho, že AVR má tvarovač vestavěn. Jelikož má 
vestavěn i pull-up, můžou dokonce vynechat i ty odpory a je to naprosto v 
pořádku:-) Párkrát jsem kolem r. 2000 dělal redesigny z 51 na AVR a téměř 
vždy to bylo ve stylu, že z původně plné desky zbyla skoro prázdná, z asm 
bylo C a funční parametry se rapidně zlepšily.

Jedno z toho mělo i nějakej enkodér s 500 kroků/ot a ze "zlobí když s tím 
rukou otáčíte moc rychle" bylo "není vrtačka, kterou by to nestíhalo". 
Enkodér prostě generoval přerušení. Nedávno jsem si na to vzpomněl, když 
jsem bojoval s enkodérem na LPC. Závěr byl, že tam jsem tehdy měl nějaké 
AVR, které neumí přerušení na obě hrany a tak jsem vždy při tom přerušení 
přepínal směr hran, což bylo ale až po té, co to prošlo nějakým triviálním 
testem konzistence signálu, který spočíval myslím jen v tom, že jsem 
několikrát zkontroloval, zda na druhém drátě je správná úroveň a zda na 
tomto se nezměnila.

Při hledání TSCT2013 mi gůgl vyhodil jen nějaké festivaly a ani přidání 
encoder nepomohlo. Podle pruhovaného kolečka předpokládám, že to bude 
dvojitá optická brána. Zde je velmi důležité, aby vzdálenost pruhů na daném 
poloměru správně seděla na rozteč bran, jinak to právě dělá popisované 
zákmity.

PH

-----Původní zpráva----- 
From: Petr Zapadlo
Sent: Monday, January 07, 2019 9:44 AM
To: hw-list na list.hw.cz
Subject: regulace DC motoru - podvozek se dvěma motory

Zdravím,

koupil jsem synovi stavebnici podvozku robota se dvěma motory s
převodovkou. Povaluje se toho všude spousty:

https://www.aliexpress.com/item/Motor-Smart-Robot-Car-Chassis-Kit-Speed-Encoder-Battery-Box-2WD-For-Arduino-Free-Shipping/32766175672.html?spm=2114.search0104.3.129.24d77303K8kMys&ws_ab_test=searchweb0_0,searchweb201602_5_10065_10068_319_317_10696_10084_453_454_10083_10618_10304_10307_10820_10821_537_10302_536_10059_10884_10887_100031_321_322_10103,searchweb201603_52,ppcSwitch_0&algo_expid=17c52e32-375a-46f3-848e-34b53cee145a-18&algo_pvid=17c52e32-375a-46f3-848e-34b53cee145a&transAbTest=ae803_4

Připojení přes 2 H můstky k modulu esp8266, doplnil jsem to snímači
TSCT2013 na enkodery na kolech. Problém nastal když to mělo jet rovně,
každá malá nerovnost způsobuje zatočení.

Snažím se vyřešit jak synchronizovat oba motory.  Je tam několik problémů:

1) elektrický - hrany lezoucí ze snímače (optotranzistor emitorem na
zem, v kolektoru odpor 10k) jsou velmi pozvolné, musel jsem natvarovat
74hc14 (proč všichni arduinisti to mají připojeno přímo na pin?), ale i
tak se stává, že je na hraně zákmit - není na každé, ale sem tam se
vyskytne = musím s ním počítat a to jak na sestupné tak na vzestupné.
Ošetřovat to elektricky?

2) programový - jak správně regulovat motory aby to jelo rovně a
necukalo to.


Co jsem už zkoušel:

1) načítaní enkoderů realizováno jako vzorkování po 1ms, tím že
nereaguji na hranu, ale testuji úroveň každou ms, jsem dostal stabilní a
kvalitní údaj, bohužel při rychlejší regulaci motorku (přepočet hodnoty
výstupní pwm) každých 50ms se počet tiků z enkoderu pohyboval v počtu 2
- 3, což na nějakou přesnou regulaci jako rozlišení nestačí. Zkoušel
jsem 2 varianty:

     - varianta 1 - jeden motor byl ovládán ručně stabilní hodnotou pwm,
druhý motor k němu regulován. po každém výpočtu znulovány čítače na obou
enkoderech - tohle nebylo použitelné - autíčko se točilo prakticky pořád
dokola

     - varianta 2 - jeden motor byl ovládán ručně stabilní hodnotou pwm,
druhý motor k němu regulován. Jako regulační odchylka byla brána celkový
rozdíl obou čítačů, které nebyly nulovány. - ze začátku se autíčko nějak
zatočilo a pak víceméně drželo směr, ale potácelo se jako opilé.


2) enkodery jsou načítány přerušením od hrany, s tím, že musím přerušení
vypnout až do okamžiku těsně před další hranou, jinak mi zákmity na
opačné hraně dělají neplechu a falešné počty. Nenačítám počet hran, ale
zjišťuji dobu mezi dvěma hranami - dostávám nějaké desítky ms s
rozlišením po us.  Tj rozlišení pro regulaci by mělo být velmi vysoké a
neměl by být problém výsledné pwm přepočítat po každé hraně. Zde jsem se
zatím k testům nedostal - když hodím do přerušení i výpočet PID
(používám knihovnu PID) tak je přerušení zřejmě příliš dlouhé, protože
se mi resetuje esp8266 watchdogem.


Záležitost č. 2 - jak nastavovat koeficienty PID abych se dobral
nějakého výsledku?  Pokaždé když změním postup jak načítám vstupní
veličinu, musím změnit i koeficienty  - tj pokud hledám podobný projekt,
který jako vstup používá třeba sledovač čáry, stejně musím měnit koef.
Na netu jsem našel několik matematických postupů jak se dobrat výsledku,
ale ty jsou pro mě nepoužitelné - neznám přesné vlastnosti sestavy.


řešil jste někdo něco podobného nebo viděl někdo ?  V podstatě se hlavně
potřebuji dostat ke stavu že motory budou mít stejné výsledné otáčky =
model pojede rovně.

Díky

Petr



_______________________________________________
HW-list mailing list  -  sponsored by www.HW.cz
Hw-list na list.hw.cz
http://list.hw.cz/mailman/listinfo/hw-list 



Další informace o konferenci Hw-list