Individální projekty MPOA

Mikroprocesory s architekturou ARM

Uživatelské nástroje

Nástroje pro tento web


2014:motor-demo

Demo řízení motorů

Bc. Jakub Novotný, UREL, FEEC, VUT Brno xnovot94@stud.feec.vutbr.cz

Úvod


Použijeme vývojový kit s krokovým motorem připojeným přes tranzistorové pole A2982 a se stejnosměrným motorem připojeným přes můstek L298N. Pomocí desky FRDM-KL25Z budeme ovládat oba motorky. Motory slouží jako demo ukázka činnosti, směr otáčení se samočinně střídá, rychlost je nastavitelná kapacitním sliderem. Buzení motorků je indikováno LED kontrolkami.

Hardware


Vývojový kit s motorky

Vývojový kit obsahuje dva motorky a potřebné výkonové prvky pro jejich ovládání. Jeho původním autorem je pravděpodobně Ing. Jan Kovář, Ph.D. Části kitu budou popsány níže.

Komutátorový stejnosměrný motor

Byl použit běžný stejnosměrný 12V motor Maxon A-max.

Univerzální krokový motor

Byl použit 12V krokový motorek SMR 300-100 od výrobce REGULACE - AUTOMATIZACE BOR. Má 4 cívky a 6 vývodů. Výrobce udává 300 otáček za minutu při buzení kmitočtem 50Hz. Maximální doporučený kmitočet je 60Hz, ale tehdy již nastaly problémy s otáčením, pravděpodobně by bylo nutné budit větším proudem. Motorek je provozován v unipolárním režimu, kdy na vývody 1 a 2 je připojen záporný pól zdroje a na vývody a a b je postupně připojován kladný pól zdroje tak, že v jednom okamžiku jsou pod proudem dvě vinutí.
Zdroj

Vedle toho by mohl být motorek buzen bipolárně pomocí dvou můstků nebo pomocí střídavého napětí 12V 50Hz dle doporučení výrobce. To v tomto případě ale nebude využito.

Osmikanálový budič A2982

A2982 je vhodný pro buzení indukčních zátěží, jako jsou motorky, relé nebo elektromagnety. Může spínat až 350mA na kanál při napětí 50V. Maximální ztrátový výkon výrobce neuvádí. Vyrábí ho firmaAllegro Micro Systems ve dvacetipinovém pouzdru SOIC. Zde jsou využity pouze čtyři kanály.

Dvojitý můstkový budič L298N

L298N je vhodný pro spínání indukčních zátěží, jako jsou bipolární krokové motory se dvěma vinutími, komutátorové motory, elektromagnety nebo relé. Zde bude použit pouze jeden můstek ze dvou. Umožňuje ovládat směr otáčení motorku i změnu rychlosti pomocí přivedeného signálu s pulzně šířkovou modulací. L298N může spínat proud maximálně 2A při nejvyšším napětí 46V. Povolený ztrátový výkon je 25W při dostatečném chlazení, které zajistí teplotu pouzdra do 75°C. L298N obsahuje ochranu proti přehřátí. Vyrábí ho firma STMicroelectronics mj. v pouzdru Multiwatt15.

Oddělovací optočlen LTV845

LTV845 je čtyřnásobný optočlen, který slouží ke galvanickému oddělení FRDM-KL25Z od motorků. Jinak by docházelo k nežádoucímu rušení od napěťových špiček vznikajících ma motorcích. Izolační napětí je 5kV. Vyrábí ho firma Lite-On Semiconductor Corp. v pouzdru DIP16.

Vývojová deska FRDM-KL25Z

FRDM-KL25Z je vývojová deska od firmy Freescale. Obsahuje 32-bit mikroprocesor ARM Cortex-M0+ MKL25Z128VLK4 taktovaný na 48MHz s periferiemi USB OTG, SPI, I2C, ADC, DAC, 10× PWM výstup, 128 KB flash a 16 KB SRAM. Vývojová deska dále obsahuje dotykový slider, další USB pro nahrávání vytvořeného programu, akcelerometr MMA8451Q a červenou, zelenou a modrou LED ve společném pouzdru. Přídavný mikroprocesor PK20DX128VFM5 zajišťuje programování hlavního mikroprocesoru v systému OpenSDA. Po připojení k osobnímu počítači se FRDM-KL25Z chová jako USB flash disk. Lze přímo nahrát zdrojový kód přeložený do formátu *.bin.

Schéma zapojení celého zařízení

Některé součástky, které nebyly dosud zmíněny, jsou k nalezení ve schématu. Původním autorem vývojového kitu s motory je Ing. Jan Kovář, Ph.D. Na kitu je přítomen 3.3V stabilizátor, který se nyní nepoužívá. Předtím vyráběl napětí pro předchozí komutátorový motorek.

Firmware


Program byl vytvořen v prostředí mbed.org, což je online open source platforma pro vývoj embedded systémů založených na mikroprocesorech ARM Cortex®-M. Vývoj probíhá na webové stránce. Není tedy potřeba instalovat žádný další software na uživatelův počítač. Vzhled prostředí je následující:

Stáhneme zkompilovaný soubor *.bin a uložíme ho do připojené vývojové desky FRDM-KL25Z, která se chová jako přenosná USB paměť.

Na stránce mbed.org jsou k dispozici různé názorné příklady a mnoho užitečných knihoven pro ovládání periferií desky FRDM-KL25Z. Byly využity knihovny mbed.h a TSISensor.h. Zdrojový kód je k prohlédnutí níže. Dále je zde ke stažení celý projekt, přeložený kód a samotný zdrojový kód v c++.

#include "mbed.h"
#include "TSISensor.h"
 
    Ticker tick;  //definice prerusovace
 
    DigitalOut m1(PTD0);      //definice 4 vystupu pro rizeni krokoveho motorku
    DigitalOut m2(PTD5);
    DigitalOut m3(PTA13);
    DigitalOut m4(PTC12);
    DigitalOut right(PTD3);   //definice 2 vystupu pro rizeni smeru otaceni DC motorku
    DigitalOut left(PTD2);
    int step=0;               //definice globalnich promennych  
    float wait1=0;
    float threshold=0;
 
void flip()                        //obsluha preruseni prepina vinuti krokoveho motorku
         {
         wait1++; 
         if (wait1>=threshold+1)   //ovladani rychlosti prepinani vinuti podle 
         {                         //hodnoty drive vyctene ze slideru
          wait1=0;      
         step++;
         if (step>3 )
         step=0;
 
         if(left==1)       //otaceni vlevo
                {
         if (step==0)      //prvni stav vinuti
           {
             m1=0;
             m2=1;
             m3=1;
             m4=0;
           } 
         if (step==1)      //druhy stav vinuti
           {
             m1=0;
             m2=0;
             m3=1;
             m4=1;
           } 
 
         if (step==2)      //treti stav vinuti
           {
             m1=1;
             m2=0;
             m3=0;
             m4=1;
           }
 
           if (step==3)    //ctvrty stav vinuti
           {
             m1=1;
             m2=1;
             m3=0;
             m4=0;
           }
                }
 
          if(right==1)     //otaceni vpravo 
                {
         if (step==3)      //ctvrty stav vinuti
           {
             m1=0;
             m2=1;
             m3=1;
             m4=0;
           } 
         if (step==2)      //treti stav vinuti
           {
             m1=0;
             m2=0;
             m3=1;
             m4=1;
           } 
 
         if (step==1)      //druhy stav vinuti
           {
             m1=1;
             m2=0;
             m3=0;
             m4=1;
           }
 
           if (step==0)    //prvni stav vinuti
           {
             m1=1;
             m2=1;
             m3=0;
             m4=0;
           }
                }
            }
        } 
 
int main(void) {               //hlavni funkce
 
    DigitalOut ledr(LED_RED);  // definice vystupu pro RGB led
    DigitalOut ledb(LED_BLUE);
    DigitalOut ledg(LED_GREEN);
    wait(0.5);                 // zablikaji vsechny LED pro overeni 
    ledr=1;                    // funkcnosti desky FRDM-KL25Z
    ledb=1;
    ledg=1;
    wait(0.1);
    ledr=0;
    wait(0.1);
    ledr=1;
    wait(0.1);
    ledg=0;
    wait(0.1);
    ledg=1;
    wait(0.1);
    ledb=0;
    wait(0.1);
    ledb=1;
    wait(0.1);
 
    tick.attach(&flip, 0.006);   //obsluha preruseni se spusti kazdych 6ms
    PwmOut led_pwm(LED_BLUE);    //definice PWM vystupu pro modrou LED
    led_pwm.period_ms(5.0f);     //definice periody PWM vystupu pro modrou LED
 
    PwmOut motor_pwm(PTD1);      //definice pwm vystupu pro ovladani rychlosti DC motorku
    motor_pwm.period_ms(5.0f);   //definice periody PWM vystupu pro ovladani rychlosti DC motorku
    TSISensor tsi;               //definice promenne pro dotykovy senzor (slider)
 
    float x=1;                   //definice
    int timer=0;                 //dalsich promennych
    right=0;                     //pocatecni nastaveni smeru otaceni
    left=1;
 
    while (1) {                         //nekonecna smycka
        x =  1.0-tsi.readPercentage();  //cteni hodnoty z kapacitniho slideru
 
        if (x<0.98)                     //pokud se nekdo dotknul slideru, tak
        {                               //se aktualizuje hodnota PWM a delka prodlevy  
        led_pwm =  x;                   //mezi prepinanim vinuti krokoveho motorku 
        motor_pwm = x;
        threshold=50*x-2;
        }
 
        wait(0.1);                      //cekani
        timer++;
 
        if (timer>20)                   //zmena smeru otaceni obou motorku
                { 
           timer=0;
           right=!right;
           left=!left;
                }
              }                
return 0;
}

Dosažené výsledky


Byl vyměněn původní komutátorový motorek na vývojové desce a přepojen na provoz na 12V na místo původních 3,3V ze stabilizátoru. Byl vyroben propojovací plochý kabel s konektory a DPS s indikačními LED. Čtyři hranaté červené LED ukazují, které vinutí krokového motorku je pod proudem. Hranaté oranžové LED ukazují směr otáčení komutátorového motorku. Šířka PWM signálu je indikována kulatou žlutou LED a také modrou led přímo na desce FRDM-KL25Z. Zařízení bylo úspěšně vyzkoušeno. Níže je snímek celého zařízení a bližší pohled na LED kontrolky.

Zde je ke shlédnutí finální verze projektu. V případě výpadku serveru youtube.com využijte záložní umístění na serveru dailymotion.com nebo na uloz.to. K dispozici je i nahrávka pracovní verze projektu.

Závěr


Podařilo se splnit zadání projektu. Jako rozšíření by bylo možno připojit k FRDM-KL25Z několik tlačítek, která by mohla měnit směr otáčení, rychlost, nebo úplně vypnout motorky. Také by bylo možné měnit rychlost otáčení samočinně. Ale to až jindy.

2014/motor-demo.txt · Poslední úprava: 2015/01/18 18:46 autor: Jakub Novotný