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

Martin Locker locker na vosrk.cz
Pondělí Leden 7 10:54:20 CET 2019


Zdravím,

ono uregulovat motory s tímto vybavením pro přímou jízdu není úplně jednoduché. Ostatně málokterý amatérský robot umí jezdit "rovně".
Zásadní problém je malé rozlišení snímače - enkodéru. Obvykle se předpokládá, že bude použit jen pro měření ujeté vzdálenosti.
Pro regulaci rychlosti je potřeba větší rozlišení (mám na kolech robota 4000 tiků/ot. a není to nic moc).


Samozřejmě se to dá trochu "ošidit". V malém robotovi mám serva s vestavěným enkodérem http://robotika.vosrk.cz/guide/sensors/encoder/cs (cca 500 tiků/otáčku), což je pro regulaci rychlosti dost málo. Abych neřešil problémy se zákmity na hranách používám synchronní vyhodnocování enkodérů http://robotika.vosrk.cz/guide/sensors/decode/cs (tj. vaše řešení 1. - mám také periodu 1ms). I když asi bych se zkusil podívat, proč tam ty zákmity vznikají. Tipuji, že máte ten optický snímač dost daleko od kotoučku (pak je změna opravdu pomalá).
Regulační smyčka běží s frekvencí 50 Hz, čemuž odpovídá max. 10 tiků/periodu při maximální rychlosti. Tzn. normálně nejsem schopen regulovat lépe než na 10%.


Varianta měření délky pulzu je problematická. Za prvé by pulzy musely mít stejnou šířku při konstantní rychlosti (vzhledem k provedení enkodéru asi nereálné) a za druhé hodnoty dostávám v různých časových rozestupech. Tj. stejně musím regulační smyčku provádět s konstantní frekvencí, ale občas mám změřenou hodnotu "čerstvou", jindy "starou".


Kdysi jsem někde našel tip jak to regulovat. Místo regulace rychlosti se použije regulace polohy. 
Princip je asi takový to:
1. nastavím si rychlost pohybu Vp, např. 7,5 ticků za periodu regulace (mohu i neceločíselné hodnoty)
2. v každém kroku posunu hodnotu požadované polohy: S = S + Vp
3. porovnám s hodnotou z enkodéru Senc, error = S - Senc
4. tj. regulační odchylka pro výpočet akčního zásahu (řízení pwm).
Nenahradí to sice rozlišení enkodéru, ale celkem to funguje (mám to samozřejmě nedostatky, ale ...)



Nastavení samotného regulátoru (pokud člověk nechce řešit moc teorie, identifikaci soustavy, atd.) je trochu experiment, ale většinou to není pro dosažení rozumného (tj. ne nejlepšího) stavu řešitelné.


Martin Locker


----- Původní zpráva ----- 
> Odesilatel: "Petr Zapadlo" <zapik na email.cz> 
> Příjemce: hw-list na list.hw.cz 
> Datum: 07/01/2019 09:45 
> Předmět: 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