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