Motorky

Pojďme ovládat stejnosměrné motory!

Motory potřebují, na rozdíl od počítače a LED světýlek, celkem hodně elektrické energie, a navíc můžou dokonce energii vyrábět (fungují jako dynamo). Kdybys je připojila přímo k destičce, která na tolik proudu není připravená, mohla by se destička zničit.

Představ si náramkové hodninky a traktor: obě zařízení něčím točí (ručičkami nebo koly), ale kdybys připojila motor z traktoru na mechanismus hodinek, moc dlouho by správný čas neukazovaly. A motůrek z hodinek by zase nepohohl při orání pole.

Proto použijeme čip s názvem L293D, který elektřinu potřebnou pro “hrubou sílu” motorku odstínit od logických signálů z destičky.

Potřebnou energii dodáme z baterií.

Čip je černá krabička, která na sobě má trochu textu, ale ne dost na to, abys poznala co dělá. To je deteilně popsáno v takzvaném datasheetu – PDF, které vypadne když zadáš „L293D“ do vyhledávače. Tam lze najít kompletní popis této součástky včetně diagramy, který ukazuje kde najít kterou nožičku:

L293D pinout

Všimni si, že nahoře je znázorněné „vykousnutí“ (zde oranžově), které najdeš i na součástce. Je důležité mít čip správně otočený, jinak nebudeš zapojovat správné nožičky.

Čip posílá do své nožičky 1Y energii z_Vpower, pokud je signál na 1A i 1,2EN současně. Jinak nožičku 1Y spojí se zemí (GND). Podobně pro 2Y (2A i 1,2EN), 3Y (3A i 3,4EN), 4Y (4A i 3,4EN). Co to pro nás znamená, je vysvětleno níže.)

Zapojení

Čip a motorky zapoj následovně:

  • Napájení
    • Vlogic čipu k 5V – Vin na destičce
    • Vpower čipu k + na baterii
    • GND (jedno který) čipu k GND na destičce
    • GND (jedno který) čipu k - na baterii
  • První motorek:
    • 1A čipu na D1 na destičce
    • 2A čipu na D2 na destičce
    • 1,2EN čipu na D3 na destičce
    • 1Y a 2Y čipu k dvěma kontaktům motorku
  • Druhý motorek:
    • 3A čipu na D6 na destičce
    • 4A čipu na D7 na destičce
    • 3,4EN čipu na D8 na destičce
    • 3Y a 4Y čipu k dvěma kontaktům motorku

L293D pinout

Ovládání

Motorek se točí, pokud je na jeho kontaktech rozdíl napětí: pro první motorek musí být na 1Y jiná hodnota než na 2Y. Pro obě musí být aktivní nožička 1,2EN, a pak 1A ovládá 1Y a 2A ovládá 2Y.

from machine import Pin

pin_1a = Pin(5, Pin.OUT)  # D1 na destičce, 1A na čipu
pin_2a = Pin(4, Pin.OUT)  # D2 na destičce, 2A na čipu
pin_12en = Pin(0, Pin.OUT)  # D3 na destičce, 1,2EN na čipu

pin_1a.value(1)
pin_2a.value(0)
pin_12en.value(1)

Když prohodíš hodnoty pin_1a a pin_2a, motorek se začne točit opačným směrem.

Pro nastavení rychlosti otáčení se hodí použít obdélníkovou vlnu, PWM, nastavenou na nožičce 1,2EN:

from machine import Pin

pwm_1 = PWM(pin_12en, freq=100, duty=512)
...
pwm_1.duty(1024)
...
pwm_1.duty(256)

Druhý motorek se dá ovládat podobně, jen s jinými čísly pinů. Tady jsou:

pin_3a = Pin(12, Pin.OUT)  # D6 na destičce, 3A na čipu
pin_4a = Pin(13, Pin.OUT)  # D7 na destičce, 4A na čipu
pin_34en = Pin(15, Pin.OUT)  # D8 na destičce, 3,4EN na čipu
{
  "data": {
    "sessionMaterial": {
      "id": "session-material:2019/brno-jaro-2019-pondeli:tmp5:3",
      "title": "Motorky",
      "html": "\n          \n    \n\n    <h1>Motorky</h1>\n<p>Poj&#x10F;me ovl&#xE1;dat stejnosm&#x11B;rn&#xE9; motory!</p>\n<p>Motory pot&#x159;ebuj&#xED;, na rozd&#xED;l od po&#x10D;&#xED;ta&#x10D;e a LED sv&#x11B;t&#xFD;lek, celkem hodn&#x11B; elektrick&#xE9;\nenergie, a nav&#xED;c m&#x16F;&#x17E;ou dokonce energii vyr&#xE1;b&#x11B;t (funguj&#xED; jako dynamo).\nKdybys je p&#x159;ipojila p&#x159;&#xED;mo k&#xA0;desti&#x10D;ce, kter&#xE1; na tolik proudu nen&#xED;\np&#x159;ipraven&#xE1;, mohla by se desti&#x10D;ka zni&#x10D;it.</p>\n<p>P&#x159;edstav si n&#xE1;ramkov&#xE9; hodninky a traktor: ob&#x11B; za&#x159;&#xED;zen&#xED; n&#x11B;&#x10D;&#xED;m to&#x10D;&#xED; (ru&#x10D;i&#x10D;kami\nnebo koly), ale kdybys p&#x159;ipojila motor z&#xA0;traktoru na mechanismus hodinek,\nmoc dlouho by spr&#xE1;vn&#xFD; &#x10D;as neukazovaly.\nA mot&#x16F;rek z&#xA0;hodinek by zase nepohohl p&#x159;i or&#xE1;n&#xED; pole.</p>\n<p>Proto pou&#x17E;ijeme &#x10D;ip s&#xA0;n&#xE1;zvem L293D, kter&#xFD; elekt&#x159;inu pot&#x159;ebnou pro &#x201C;hrubou s&#xED;lu&#x201D;\nmotorku odst&#xED;nit od logick&#xFD;ch sign&#xE1;l&#x16F; z&#xA0;desti&#x10D;ky.</p>\n<p>Pot&#x159;ebnou energii dod&#xE1;me z&#xA0;bateri&#xED;.</p>\n<p>&#x10C;ip je &#x10D;ern&#xE1; krabi&#x10D;ka, kter&#xE1; na sob&#x11B; m&#xE1; trochu textu, ale ne dost na to,\nabys poznala co d&#x11B;l&#xE1;.\nTo je deteiln&#x11B; pops&#xE1;no v&#xA0;takzvan&#xE9;m <em>datasheetu</em> &#x2013; PDF, kter&#xE9; vypadne kdy&#x17E;\nzad&#xE1;&#x161; &#x201E;L293D&#x201C; do vyhled&#xE1;va&#x10D;e.\nTam lze naj&#xED;t kompletn&#xED; popis t&#xE9;to sou&#x10D;&#xE1;stky v&#x10D;etn&#x11B; diagramy, kter&#xFD; ukazuje\nkde naj&#xED;t kterou no&#x17E;i&#x10D;ku:</p>\n<p><span class=\"figure\"><a href=\"/2019/brno-jaro-2019-pondeli/micropython/motors/static/l293d.svg\"><img src=\"/2019/brno-jaro-2019-pondeli/micropython/motors/static/l293d.svg\" alt=\"L293D pinout\"></a></span></p>\n<p>V&#x161;imni si, &#x17E;e naho&#x159;e je zn&#xE1;zorn&#x11B;n&#xE9; &#x201E;vykousnut&#xED;&#x201C; (zde oran&#x17E;ov&#x11B;),\nkter&#xE9; najde&#x161; i na sou&#x10D;&#xE1;stce.\nJe d&#x16F;le&#x17E;it&#xE9; m&#xED;t &#x10D;ip spr&#xE1;vn&#x11B; oto&#x10D;en&#xFD;, jinak nebude&#x161; zapojovat spr&#xE1;vn&#xE9; no&#x17E;i&#x10D;ky.</p>\n<p>&#x10C;ip pos&#xED;l&#xE1; do sv&#xE9; no&#x17E;i&#x10D;ky <code>1Y</code> energii z_<code>Vpower</code>, pokud je sign&#xE1;l na\n<code>1A</code> i <code>1,2EN</code> sou&#x10D;asn&#x11B;. Jinak no&#x17E;i&#x10D;ku <code>1Y</code> spoj&#xED; se zem&#xED; (<code>GND</code>).\nPodobn&#x11B; pro <code>2Y</code> (<code>2A</code> i <code>1,2EN</code>), <code>3Y</code> (<code>3A</code> i <code>3,4EN</code>), <code>4Y</code> (<code>4A</code> i <code>3,4EN</code>).\nCo to pro n&#xE1;s znamen&#xE1;, je vysv&#x11B;tleno n&#xED;&#x17E;e.)</p>\n<h1>Zapojen&#xED;</h1>\n<p>&#x10C;ip a motorky zapoj n&#xE1;sledovn&#x11B;:</p>\n<ul>\n<li>Nap&#xE1;jen&#xED;<ul>\n<li>V<sub>logic</sub> &#x10D;ipu k&#xA0;5V &#x2013; <code>Vin</code> na desti&#x10D;ce</li>\n<li>V<sub>power</sub> &#x10D;ipu k&#xA0;<code>+</code> na baterii</li>\n<li>GND (jedno kter&#xFD;) &#x10D;ipu k&#xA0;<code>GND</code> na desti&#x10D;ce</li>\n<li>GND (jedno kter&#xFD;) &#x10D;ipu k&#xA0;<code>-</code> na baterii</li>\n</ul>\n</li>\n<li>Prvn&#xED; motorek:<ul>\n<li><code>1A</code> &#x10D;ipu na <code>D1</code> na desti&#x10D;ce</li>\n<li><code>2A</code> &#x10D;ipu na <code>D2</code> na desti&#x10D;ce</li>\n<li><code>1,2EN</code> &#x10D;ipu na <code>D3</code> na desti&#x10D;ce</li>\n<li><code>1Y</code> a <code>2Y</code> &#x10D;ipu k&#xA0;dv&#x11B;ma kontakt&#x16F;m motorku</li>\n</ul>\n</li>\n<li>Druh&#xFD; motorek:<ul>\n<li><code>3A</code> &#x10D;ipu na <code>D6</code> na desti&#x10D;ce</li>\n<li><code>4A</code> &#x10D;ipu na <code>D7</code> na desti&#x10D;ce</li>\n<li><code>3,4EN</code> &#x10D;ipu na <code>D8</code> na desti&#x10D;ce</li>\n<li><code>3Y</code> a <code>4Y</code> &#x10D;ipu k&#xA0;dv&#x11B;ma kontakt&#x16F;m motorku</li>\n</ul>\n</li>\n</ul>\n<p><span class=\"figure\"><a href=\"/2019/brno-jaro-2019-pondeli/micropython/motors/static/motors_bb.svg\"><img src=\"/2019/brno-jaro-2019-pondeli/micropython/motors/static/motors_bb.svg\" alt=\"L293D pinout\"></a></span></p>\n<h1>Ovl&#xE1;d&#xE1;n&#xED;</h1>\n<p>Motorek se to&#x10D;&#xED;, pokud je na jeho kontaktech rozd&#xED;l nap&#x11B;t&#xED;: pro prvn&#xED; motorek\nmus&#xED; b&#xFD;t na <code>1Y</code> jin&#xE1; hodnota ne&#x17E; na <code>2Y</code>.\nPro ob&#x11B; mus&#xED; b&#xFD;t aktivn&#xED; no&#x17E;i&#x10D;ka <code>1,2EN</code>, a pak <code>1A</code> ovl&#xE1;d&#xE1; <code>1Y</code> a\n<code>2A</code> ovl&#xE1;d&#xE1; <code>2Y</code>.</p>\n<div class=\"highlight\"><pre><code>from machine import Pin\n\npin_1a = Pin(5, Pin.OUT)  # D1 na desti&#x10D;ce, 1A na &#x10D;ipu\npin_2a = Pin(4, Pin.OUT)  # D2 na desti&#x10D;ce, 2A na &#x10D;ipu\npin_12en = Pin(0, Pin.OUT)  # D3 na desti&#x10D;ce, 1,2EN na &#x10D;ipu\n\npin_1a.value(1)\npin_2a.value(0)\npin_12en.value(1)</code></pre></div><p>Kdy&#x17E; prohod&#xED;&#x161; hodnoty <code>pin_1a</code> a <code>pin_2a</code>, motorek se za&#x10D;ne to&#x10D;it opa&#x10D;n&#xFD;m\nsm&#x11B;rem.</p>\n<p>Pro nastaven&#xED; rychlosti ot&#xE1;&#x10D;en&#xED; se hod&#xED; pou&#x17E;&#xED;t obd&#xE9;ln&#xED;kovou vlnu, PWM,\nnastavenou na no&#x17E;i&#x10D;ce <code>1,2EN</code>:</p>\n<div class=\"highlight\"><pre><code>from machine import Pin\n\npwm_1 = PWM(pin_12en, freq=100, duty=512)\n...\npwm_1.duty(1024)\n...\npwm_1.duty(256)</code></pre></div><p>Druh&#xFD; motorek se d&#xE1; ovl&#xE1;dat podobn&#x11B;, jen s&#xA0;jin&#xFD;mi &#x10D;&#xED;sly pin&#x16F;.\nTady jsou:</p>\n<div class=\"highlight\"><pre><code>pin_3a = Pin(12, Pin.OUT)  # D6 na desti&#x10D;ce, 3A na &#x10D;ipu\npin_4a = Pin(13, Pin.OUT)  # D7 na desti&#x10D;ce, 4A na &#x10D;ipu\npin_34en = Pin(15, Pin.OUT)  # D8 na desti&#x10D;ce, 3,4EN na &#x10D;ipu</code></pre></div>\n\n\n        "
    }
  }
}