close
Vážení uživatelé,
16. 8. 2020 budou služby Blog.cz a Galerie.cz ukončeny.
Děkujeme vám za společně strávené roky!
Zjistit více

Vážení uživatelé,
16. 8. 2020 budou služby Blog.cz a Galerie.cz ukončeny.
Děkujeme vám za společně strávené roky!

Matematika v robotice 8. Trojčlenka 1.

4. července 2013 v 5:45 | Petr |  Roboti a Matematika
Už když jsem já byl prvňáček, za hlubokého bolševika, tak paní (soudružka) učitelka Habrnálová se v matematice vždycky přikrčila zkontrolovala jestli někdo není za dveřmi, a pak šeptala - měli byste to počítat podle vzorečku, ale já vás to naučím trojčlenkou.... Tedy už tehdy byla trojčlenka zakázaná, co teprve dneska když nad nami nebdí laskavé oko Sovětského Svazu, ale ještě laskavější oko Evropského Svazu - pardon - Evropské unie.

Tedy z nedostatku jiného popisu označuju jako trojčlenku úlohy typu

A1 / B1 = A2 / B2
Neboli babička na obalení 5 řízků potřebuje 3 vajíčka, kolik bude potřebovat na obalení 7 řízků ?
Neboli A1 / 7 = 3 / 5 neboli A1 = 7 * 3 / 5 neboli 4,2 vajíčka... Jasné ?

Takže si probereme úlohu na trojčlenku v mých robotech - napětí na motorech, které může dosahovat až 30 voltů se měří 10 bitovým AD převodníkem s vnitřní referencí 2,56 V.

Takže nejprve z pohledu konstruktéra - napěti 30V musím měřit AD převodníkem s maximálním napětím 2,56 V - jaký zkonstruuju dělič ? Takže 30 / 2,56 11,78 - hnusné číslo - a protože v oblasti nad 10 se z normálních odporů nejlépe sestavuje dělič 1:16 tak bereme dělič 1 : 16 čímž budeme moci měřit napětí až 2,56 * 16 = 40,96 V
A teď z pohledu programátora. Už jem psal - pro napětí používejte nějaké "lidské" jednotky takže přepočteme číslo z AD převodníku na milivolty -tudíž bude nabývat hodnot 0 - 40960
10 bitový AD převodník má max hodnotu 1024 takže musíme změřenou hodnotu násobit koeficientem 40960 / 1024 = 40
X * 40 je X * 32 + X * 8 takže konečný výpočet bude
NAPETÍ = (ADC << 5) + (ADC << 3)
Samozřejmě, že proměnné NAPĚTÍ i ADC musí být typu uint16_t, který má maximální hodnotu 65535 jinak by byl problém ( což by byl i s proměnnou typu int16_t, která je od - do + 32767).

Jenom drobná poznámka - víte jak vypadá dělič 1 : 16 - od pinu procesoru do země jde odpor 1K a ke zdroji signálu jde odpor 15 K jasné ?

Tohle bylo až příliš jednoduché, takže si dáme druhou variantu - místo vnitřní reference 2,56V použijeme napětí procesoru 5V jako referenci.
Takže nejprve dělič 30/5 = 6 - dělič 1: 6 nedáme z normálních odporů nidky dohromady tak použijeme můj oblíbený 1 : 8 - ten se staví tak že do země jde odpor 470 ohm a ke zdroji signálu jde odpor 3300 ohm - jenomže to není zcela přesně 1: 8 ale 1: ( 3300 + 470 ) / 470 to je 1 : 8,0213. Takže při referenci 5V změříme AD převodníkem maximální napětí 8,0213 * 5 to je 40,1 V.

Tudíž by bylo nejlépe násobit 40100 / 1024 to je 39.2 což můžeme brát jako 39 a tedy

NAPETÍ = (ADC << 5) + (ADC << 3) - ADC

Pro veliký úspěch třetí pokus: Představte si, že necháme dělič 1: 16 z 1 příkladu, ale použijeme referenci 5V z druhého. To nám dá maximální napětí 5 * 16 = 80 V - Musím psát vzorec ?
Ale jo 80 je 64 + 16
NAPETÍ = (ADC << 6) + (ADC << 4)
Tato varianta však má problém - pro napětí nad 65 voltů hrozí přetečení výsledku, protože náš datový typ uint16_t zpracuje max 65535 milivoltů.

Doufám, že se necítíte uraženi matematikou pro 3 třídu základní školy, tak přidávám radu paní Kubáčové pro novomanželky : Ačkoliv my se učíme počítat s celými čísly - vy se naučte velice dobře počítat s desetinnými, protože pokud řeknete - miláčku moh bys zvýšit svůj příjem 1,2 krát - váš miláček se nad tím hluboce zamyslí - zatímco když řeknete - zvyš svůj příjem 8x - zasměje se a místo peněz - patrně uteče k milence...
 

Buď první, kdo ohodnotí tento článek.

Komentáře jsou uzavřeny.


Aktuální články

Reklama