regulace DC motoru - podvozek se dvěma motory
Petr Zapadlo
zapik na email.cz
Pondělí Leden 7 09:44:36 CET 2019
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
Další informace o konferenci Hw-list