POČÍTAČ A ARDUINO UNO II

Vágner Vlastimil

    Po kdysi dávno napsaném programu pro PICAXE 28X2 na ovládání 4-kanálového motor driveru shield s L293D [1] který je využit pro ovládání dětského jeřábu. Jsem se rozhodl zkusit si napsat program a takto si ovládat tento shield i pomocí Arduina a parametry pro ovládání motorů také zadávat z počítače PC, pro sériovou komunikaci používám již dříve napsaný program terminál.

 

4-KANÁLOVÝ MOTOR DRIVER SHIELD L293D

    Deska umožňuje ovládat čtyři DC motory, dva krokové motory a dvě modelářská serva tyto se připojují do svorek na DPS označených M1, M2, M3, M4 pro serva jsou osazeny piny (kolíčky), napájení připojených motorů je z externího zdroje a nesmí překročit proud jedním kanálem 0.6A. Externí napájecí zdroj se připojuje do dvou osazených svorek na DPS označených +M a GND. V tomto případě napájení JE NUTNÉ ODEBRAT PROPOJKU NA DESCE OZNAČENOU PWR TAK ABY NAPÁJENÍ ARDUINA A NAPÁJENÍ MOTORU BYLO ODDĚLENO NA TOTO SE NESMÍ ZAPOMENOUT. Řídící obvod 74HC595 výstupy QA – QH označený IC3 ovládá řídící signály INPUT1, INPUT2, INPUT3 a INPUT4 obou integrovaných obvodů IC1 a IC2. Signály ENÁBLE1 a ENÁBLE2 obou integrovaných obvodů se ovládají digitálními výstupy na desce Arduina označené D11, D3, D5, D6, jde o výstupy na kterých je možno použít regulaci PWM která v tomto případě reguluje otáčky DC motorů. Výstup označený D11 ovládá signál ENÁBLE1 motoru označeného na desce M1,  výstup označený D3 ovládá signál ENÁBLE2 motoru označeného na desce M2, integrovaný obvod má označení na DPS IO1. Výstup označený D5 ovládá signál ENÁBLE1 motoru označeného na desce M4,  výstup označený D6 ovládá ENÁBLE2 motoru označeného na desce M3, integrovaný obvod má označení na DPS IO2. Signál na vstupu OE integrovaného obvodu IO3 má po zapnutí napájení na vstupu kladné napájecí napětí zajištěné rezistorem 10K z kladné napájecí větve, tím je zajištěno že na výstupech QA – QH integrovaného obvodu IO3 74HC595 je záporné napětí a vstupy INPUT1, INPUT2, INPUT3, INPUT4 obou integrovaných obvodů IO1 a IO2 jsou v logické „0“. Tím je zabezpečeno že se neroztočí připojené motory a současně se nedají zapsat žádná data, při zápisu dat do 74HC595 je programově digitálním výstupem označeným D7 na tomto vstupu trvale připojeno záporné napájecí napětí které umožňuje zadávání dat do IO3. Řídící vstupy IO3 „SCLK, RCLK a SER“ jsou ovládány digitálními výstupy Arduina 4, 12, 8. Digitální výstup 4 ovládá vstup SCLK (HODINOVÝ SIGNÁL „CLK“), digitální výstup 12 ovládá vstup RCLK (POTVRENÍ DAT), digitální výstup 8 ovládá vstup SER (SÉRIOVÁ DATA). Výstupy IO3 QA – QH jsou připojeny na řídící vstupy „INPUT1 – INPUT4 IO1 a IO2“, řídící vstupy IO1 INPUT1, INPUT2, INPUT3, INPUT4 ovládají výstupy IO3 : QC – INPUT1, QD – INPUT2, QE – INPUT3 a QB – INPUT4. Řídící vstupy IO2 INPUT1, INPUT2, INPUT3, INPUT4 ovládají výstupy IO3 : QA – INPUT1, QG – INPUT2, QH – INPUT3 a QF – INPUT4. Hodnoty které se zadávají při ovládání výstupů v TERMINÁLU „PC“ pro ovládání výstupů IO3 jsou : QA – 128, QB – 64, QC – 32, QD – 16, QE – 8, QF – 4, QG – 2, QH – 1.         

                    

 

PROGRAMY PRO POČÍTAČ A ARDUINO

    Program pro počítač je napsán ve VB6 je uložen v adresáři Počítač kde je také celkový popis ovládání programu v souboru PDF. Použitý terminál umožňuje zadávat textové řetězce, jednotlivé znaky a čísla. Je možné ho používat i pro jinou komunikaci s koncovým zařízením. Program pro Arduino je uložen v adresáři ARDUINO, program pro Arduino používám pro jednoduché ovládání připojených motorů k shield s L293D.

 

ZADÁVÁNÍ DAT PRO OVLÁDÁNÍ MOTORŮ Z PC

    Po propojení počítače a desky Arduina s osazeným shieldem s L293D připojíme napájecí napětí pro motory. Na počítači spustíme program RS_232.EXE zvolíme komunikační port (popis je i v souboru PDF k tomuto programu), otevřeme komunikaci kliknutím na tlačítko „OTEVŘÍT COM“ a do okna pod nápisem „ZÁPIS TEXT“ zadáme hodnoty jako první zadáváme hodnotu pro vstupy INPUT1, INPUT2, INPUT3, INPUT4 obou IO1, IO2 pro ten motor který chceme ovládat. Poté zadáváme hodnotu pro navolené motory a po zadání všech hodnot klikneme na tlačítko „ODESLAT ZÁPIS TEXT“ a poté jsou data odeslána do Arduina a navolený motor se rozběhne. Vypnutí navoleného motoru provedeme takto u navoleného motoru označíme myší hodnotu a tuto pro VYPNUTÍ MOTORU PŘEPÍŠEME „0“ a opět odešleme kliknutím na tlačítko „ODESLAT ZÁPIS TEXT“. Vypnutí navoleného motoru pokud jsme si po spuštění motoru kliknutím na tlačítko „SMAZAT ZÁPIS TEXT“ tyto zadané hodnoty smazali provedeme takto v okně pro zápis dat zadáme 0, 0, 0, 0, 0 a odešleme a navolený motor se zastaví. Kliknutím na tlačítko „ULOŽIT ZÁPIS/ČTENÍ“ si uložíme zadávaná data na disk pro další potřebu, kliknutím na tlačítka s popisy „SMAZAT ČTENÍ TEXT, SMAZAT ZÁPIS TEXT a SMAZAT VŠE“ smažeme zapsané hodnoty v uvedených oknech.

    PŘÍKLAD ZADÁVÁNÍ DAT : chceme aby se točil motor označený M1 spuštěný příkazem INPUT1 IO1 a M3 spuštěný příkazem INPUT2 IO2 podle hodnot popsaných výše zadáváme jako první součet hodnot  pro INPUT1 IO1 to je QC hodnota 32, pro hodnotu motoru M3 a příkaz INPUT2 IO2 to je QC hodnota 2. Tyto dvě hodnoty sečteme 32 + 2 = 34 první zadaná hodnota v okně pro ZÁPIS TEXT bude 34 tato hodnota je pro aktivaci výstupů 74HC595, druhá hodnota pro první motor bude v rozsahu „0 – 255“ zadáme třeba zvolenou hodnotu 180, třetí zadaná hodnota bude „0“ druhý motor není navolen, čtvrtá hodnota bude pro třetí motor opět v rozsahu „0 – 255 zadáme třeba hodnotu 255, pátá zadaná hodnota bude „0“ čtvrtý motor není navolen. Tak že výsledný celkový zápis bude : 34, 180, 0, 255, 0 a poté klikneme na tlačítko  „ODESLAT ZÁPIS TEXT“ a navolené motory se roztočí, vypnutí motorů provedeme tak jak je popsáno výše pokud chceme změnit směr například prvního motoru změníme hodnotu „QC  INPUT1 IO1“ za hodnotu QD INPUT2 IO1. Je jasné že před změnou chodu musíme motory vypnout postupujeme stejně jak je popsáno výše. Pokud chceme spustit pouze motor M1 zadáváme hodnotu pro INPUT1 nebo INPUT2 IO1 a hodnota bude : 32, 200, 0, 0, 0 nebo 16, 200, 0, 0, 0 pokud chceme ovládat pouze motor M3 zadáváme hodnotu pro INPUT3 nebo INPUT4 IO2 a hodnota bude : 1, 0, 0, 200, 0 nebo 4, 0, 0, 180, 0. Stejně postupujeme i při zadávání hodnot pro další motorky.

   ! ! Je důležité pokud to je možné používat vždy stejné DC motory a dříve si před připojením motorů k shieldu zjistit jejich proudový odběr při běhu na volno bez zatížení „pomocí zdroje a DMM mimo shield“ aby nedošlo ke zničení IO L293D, poté je při připojení motorků k shieldu vhodné napoprvé ovládat vždy pouze postupně vždy jeden motor tak aby se zjistila spodní hranice parametru PWM kdy se motorek ještě roztočí a tuto si po odzkoušení chodu na oba směry poznamenat a poté ji zadávat v parametru pro PWM. V mém případě je jedna spodní hodnota vyšší než druhá spodní hodnota tak že zadávám tu vyšší spodní hodnotu aby se motorek točil oběma směry !!.

    Tím že motorový shield je osazený na desce Arduina a nechtělo se mi osazovat piny (kolíčky) na tento shield pro připojení potenciometrů a možné měnění otáček pomocí těchto potenciometru zvolil jsem volbu zadávání parametrů PWM z počítače. Úprava programu je velice jednoduchá a pak by se v programu zadávala pouze hodnota pro INPUT1 - INPUT4 pro oba IO1 a IO2.   

 

 

kopie obrazovky se zadanými parametry

připojené motorky „vypnutý chod“

 

připojené motorky zapnutý chod

 

 

   

    Použité prameny :

    Burkhard Kainka elektronika s podporou PC Visuál Basic v praxi

    Pro Arduino čerpáno z internetu

    [1] modul zakoupen v Laskarduino shopu

    Bližší informace :

    vagnervlastimil@seznam.cz