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:
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.)
Čip a motorky zapoj následovně:
Vin
na destičce+
na bateriiGND
na destičce-
na baterii1A
čipu na D1
na destičce2A
čipu na D2
na destičce1,2EN
čipu na D3
na destičce1Y
a 2Y
čipu k dvěma kontaktům motorku3A
čipu na D6
na destičce4A
čipu na D7
na destičce3,4EN
čipu na D8
na destičce3Y
a 4Y
čipu k dvěma kontaktům motorkuMotorek 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ďme ovládat stejnosměrné motory!</p>\n<p>Motory potřebují, na rozdíl od počítače a LED světýlek, celkem hodně elektrické\nenergie, a navíc můžou dokonce energii vyrábět (fungují jako dynamo).\nKdybys je připojila přímo k destičce, která na tolik proudu není\npřipravená, mohla by se destička zničit.</p>\n<p>Představ si náramkové hodninky a traktor: obě zařízení něčím točí (ručičkami\nnebo koly), ale kdybys připojila motor z traktoru na mechanismus hodinek,\nmoc dlouho by správný čas neukazovaly.\nA motůrek z hodinek by zase nepohohl při orání pole.</p>\n<p>Proto použijeme čip s názvem L293D, který elektřinu potřebnou pro “hrubou sílu”\nmotorku odstínit od logických signálů z destičky.</p>\n<p>Potřebnou energii dodáme z baterií.</p>\n<p>Čip je černá krabička, která na sobě má trochu textu, ale ne dost na to,\nabys poznala co dělá.\nTo je deteilně popsáno v takzvaném <em>datasheetu</em> – PDF, které vypadne když\nzadáš „L293D“ do vyhledávače.\nTam lze najít kompletní popis této součástky včetně diagramy, který ukazuje\nkde najít kterou nožič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šimni si, že nahoře je znázorněné „vykousnutí“ (zde oranžově),\nkteré najdeš i na součástce.\nJe důležité mít čip správně otočený, jinak nebudeš zapojovat správné nožičky.</p>\n<p>Čip posílá do své nožičky <code>1Y</code> energii z_<code>Vpower</code>, pokud je signál na\n<code>1A</code> i <code>1,2EN</code> současně. Jinak nožičku <code>1Y</code> spojí se zemí (<code>GND</code>).\nPodobně 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ás znamená, je vysvětleno níže.)</p>\n<h1>Zapojení</h1>\n<p>Čip a motorky zapoj následovně:</p>\n<ul>\n<li>Napájení<ul>\n<li>V<sub>logic</sub> čipu k 5V – <code>Vin</code> na destičce</li>\n<li>V<sub>power</sub> čipu k <code>+</code> na baterii</li>\n<li>GND (jedno který) čipu k <code>GND</code> na destičce</li>\n<li>GND (jedno který) čipu k <code>-</code> na baterii</li>\n</ul>\n</li>\n<li>První motorek:<ul>\n<li><code>1A</code> čipu na <code>D1</code> na destičce</li>\n<li><code>2A</code> čipu na <code>D2</code> na destičce</li>\n<li><code>1,2EN</code> čipu na <code>D3</code> na destičce</li>\n<li><code>1Y</code> a <code>2Y</code> čipu k dvěma kontaktům motorku</li>\n</ul>\n</li>\n<li>Druhý motorek:<ul>\n<li><code>3A</code> čipu na <code>D6</code> na destičce</li>\n<li><code>4A</code> čipu na <code>D7</code> na destičce</li>\n<li><code>3,4EN</code> čipu na <code>D8</code> na destičce</li>\n<li><code>3Y</code> a <code>4Y</code> čipu k dvěma kontaktů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ádání</h1>\n<p>Motorek se točí, pokud je na jeho kontaktech rozdíl napětí: pro první motorek\nmusí být na <code>1Y</code> jiná hodnota než na <code>2Y</code>.\nPro obě musí být aktivní nožička <code>1,2EN</code>, a pak <code>1A</code> ovládá <code>1Y</code> a\n<code>2A</code> ovládá <code>2Y</code>.</p>\n<div class=\"highlight\"><pre><code>from machine import Pin\n\npin_1a = Pin(5, Pin.OUT) # D1 na destičce, 1A na čipu\npin_2a = Pin(4, Pin.OUT) # D2 na destičce, 2A na čipu\npin_12en = Pin(0, Pin.OUT) # D3 na destičce, 1,2EN na čipu\n\npin_1a.value(1)\npin_2a.value(0)\npin_12en.value(1)</code></pre></div><p>Když prohodíš hodnoty <code>pin_1a</code> a <code>pin_2a</code>, motorek se začne točit opačným\nsměrem.</p>\n<p>Pro nastavení rychlosti otáčení se hodí použít obdélníkovou vlnu, PWM,\nnastavenou na nožič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ý motorek se dá ovládat podobně, jen s jinými čísly pinů.\nTady jsou:</p>\n<div class=\"highlight\"><pre><code>pin_3a = Pin(12, Pin.OUT) # D6 na destičce, 3A na čipu\npin_4a = Pin(13, Pin.OUT) # D7 na destičce, 4A na čipu\npin_34en = Pin(15, Pin.OUT) # D8 na destičce, 3,4EN na čipu</code></pre></div>\n\n\n " } } }