Individální projekty MPOA

Mikroprocesory s architekturou ARM

Uživatelské nástroje

Nástroje pro tento web


2014:motor-demo

Rozdíly

Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.

Odkaz na výstup diff

Obě strany předchozí revize Předchozí verze
Následující verze
Předchozí verze
2014:motor-demo [2014/12/29 20:02]
Jakub Novotný [Firmware]
2014:motor-demo [2015/01/18 18:46] (aktuální)
Jakub Novotný
Řádek 1: Řádek 1:
-{{:​2014:​motor-demo:​under_construction.jpg|}} 
- 
 ======Demo řízení motorů====== ======Demo řízení motorů======
  
Řádek 27: Řádek 25:
  ​{{:​2014:​motor-demo:​maxon_amax.jpg|}} {{:​2014:​motor-demo:​maxon_amax02.jpg?​500|}}  ​{{:​2014:​motor-demo:​maxon_amax.jpg|}} {{:​2014:​motor-demo:​maxon_amax02.jpg?​500|}}
 ===Univerzální krokový motor=== ===Univerzální krokový motor===
-Byl použit 12V krokový motorek [[http://​www.elektromotory-bor.cz/​cz/​synchronni-motory/​synchronni-elektromotor-reverzacni-smr-300-100.html|SMR 300-100]] od výrobce [[http://​www.elektromotory-bor.cz/​cz/​|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.\\  ​+Byl použit 12V krokový motorek [[http://​www.elektromotory-bor.cz/​cz/​synchronni-motory/​synchronni-elektromotor-reverzacni-smr-300-100.html|SMR 300-100]] od výrobce [[http://​www.elektromotory-bor.cz/​cz/​|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í.\\  ​
 {{:​2014:​motor-demo:​uni_anim.gif|}} [[http://​mechatronics.mech.northwestern.edu/​design_ref/​actuators/​uni_anim.gif|Zdroj]] {{:​2014:​motor-demo:​smr300-100.jpg?​200|}} {{:​2014:​motor-demo:​smr300-100aa.jpg?​200|}} {{:​2014:​motor-demo:​uni_anim.gif|}} [[http://​mechatronics.mech.northwestern.edu/​design_ref/​actuators/​uni_anim.gif|Zdroj]] {{:​2014:​motor-demo:​smr300-100.jpg?​200|}} {{:​2014:​motor-demo:​smr300-100aa.jpg?​200|}}
   ​   ​
Řádek 39: Řádek 37:
 {{:​2014:​motor-demo:​soic.png?​200|}} {{:​2014:​motor-demo:​soic.png?​200|}}
 ===Dvojitý můstkový budič L298N=== ===Dvojitý můstkový budič L298N===
-[[http://​www.st.com/​web/​en/​catalog/​sense_power/​FM142/​CL851/​SC1790/​SS1555/​PF63147|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, ​elektormagnety ​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 [[http://​cs.wikipedia.org/​wiki/​Pulzn%C4%9B_%C5%A1%C3%AD%C5%99kov%C3%A1_modulace|pulzně šířkovou modulací.]] L298N může spínat proud maximálně 2A při nejvyšším napětí ​46W. Povolený ztrátový výkon je 25W při dostatečném ​chalzení, které zajistí teplotu pouzdra do 75°C. L298N obsahuje ochranu proti přehřátí. Vyrábí ho firma [[http://​www.st.com|STMicroelectronics]] mj. v pouzdru Multiwatt15.\\+[[http://​www.st.com/​web/​en/​catalog/​sense_power/​FM142/​CL851/​SC1790/​SS1555/​PF63147|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 [[http://​cs.wikipedia.org/​wiki/​Pulzn%C4%9B_%C5%A1%C3%AD%C5%99kov%C3%A1_modulace|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 [[http://​www.st.com|STMicroelectronics]] mj. v pouzdru Multiwatt15.\\
 {{:​2014:​motor-demo:​l298n.png?​500|}} {{:​2014:​motor-demo:​multiwatt15.png?​200|}} {{:​2014:​motor-demo:​l298n.png?​500|}} {{:​2014:​motor-demo:​multiwatt15.png?​200|}}
  
Řádek 65: Řádek 63:
  
 Na stránce [[http://​developer.mbed.org/​|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 [[http://​developer.mbed.org/​users/​mbed_official/​code/​mbed/​file/​4fc01daae5a5/​TARGET_KL25Z|mbed.h]] a [[http://​developer.mbed.org/​users/​mbed_official/​code/​TSI/​|TSISensor.h]]. Na stránce [[http://​developer.mbed.org/​|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 [[http://​developer.mbed.org/​users/​mbed_official/​code/​mbed/​file/​4fc01daae5a5/​TARGET_KL25Z|mbed.h]] a [[http://​developer.mbed.org/​users/​mbed_official/​code/​TSI/​|TSISensor.h]].
-Zdrojový kód je k prohlédnutí níže.+Zdrojový kód je k prohlédnutí níže. ​Dále je zde ke stažení {{:​2014:​motor-demo:​frdm_motor_project_full.zip|celý projekt}}, {{:​2014:​motor-demo:​frdm_motor_project_kl25z_bin.zip|přeložený kód}} a {{:​2014:​motor-demo:​main_cpp.zip|samotný zdrojový kód v c++.}}
  
 <code cpp> <code cpp>
Řádek 71: Řádek 69:
 #include "​TSISensor.h"​ #include "​TSISensor.h"​
  
-    Ticker tick;  //​definice ​přerušovače+    Ticker tick;  //​definice ​prerusovace
         ​         ​
-    DigitalOut m1(PTD0); ​     //definice 4 výstupů ​pro řízení krokového ​motorku+    DigitalOut m1(PTD0); ​     //definice 4 vystupu ​pro rizeni krokoveho ​motorku
     DigitalOut m2(PTD5);     DigitalOut m2(PTD5);
     DigitalOut m3(PTA13);     DigitalOut m3(PTA13);
     DigitalOut m4(PTC12);     DigitalOut m4(PTC12);
-    DigitalOut right(PTD3); ​     //definice 2 výstupů ​pro řízení směru otáčeni ​DC motorku+    DigitalOut right(PTD3); ​  ​//definice 2 vystupu ​pro rizeni smeru otaceni ​DC motorku
     DigitalOut left(PTD2);     DigitalOut left(PTD2);
-    int step=0; ​              //​definice ​globálních proměnných ​ +    int step=0; ​              //​definice ​globalnich promennych ​ 
     float wait1=0;     float wait1=0;
     float threshold=0;​     float threshold=0;​
         ​         ​
-void flip() ​                       //​obsluha ​přerušení přepíná ​vinuti ​krokového ​motorku+void flip() ​                       //​obsluha ​preruseni prepina ​vinuti ​krokoveho ​motorku
          {          {
          ​wait1++; ​          ​wait1++; ​
-         if (wait1>​=threshold+1) ​  //ovládáni ​rychlosti ​přepínání vinutí ​podle  +         if (wait1>​=threshold+1) ​  //ovladani ​rychlosti ​prepinani vinuti ​podle  
-         ​{ ​                        //​hodnoty ​dříve vyčtené ​ze slideru+         ​{ ​                        //​hodnoty ​drive vyctene ​ze slideru
           wait1=0; ​     ​           wait1=0; ​     ​
          ​step++;​          ​step++;​
Řádek 93: Řádek 91:
          ​step=0;​          ​step=0;​
                    
-         ​if(left==1) ​      //otáčení ​vlevo+         ​if(left==1) ​      //otaceni ​vlevo
                 {                 {
-         if (step==0) ​     //první ​stav vinutí+         if (step==0) ​     //prvni stav vinuti
            {            {
              m1=0;              m1=0;
Řádek 102: Řádek 100:
              m4=0;              m4=0;
            ​} ​            ​} ​
-         if (step==1) ​     //druhý ​stav vinutí+         if (step==1) ​     //druhy stav vinuti
            {            {
              m1=0;              m1=0;
Řádek 110: Řádek 108:
            ​} ​            ​} ​
                        
-         if (step==2) ​     //třetí ​stav vinutí+         if (step==2) ​     //treti stav vinuti
            {            {
              m1=1;              m1=1;
Řádek 118: Řádek 116:
            }            }
                        
-           if (step==3) ​   //čtvrtý ​stav vinutí+           if (step==3) ​   //ctvrty ​stav vinuti
            {            {
              m1=1;              m1=1;
Řádek 127: Řádek 125:
                 }                 }
           ​           ​
-          if(right==1) ​    //otáčení ​vpravo ​+          if(right==1) ​    //otaceni ​vpravo ​
                 {                 {
-         if (step==3) ​     //první ​stav vinutí+         if (step==3) ​     //ctvrty ​stav vinuti
            {            {
              m1=0;              m1=0;
Řádek 136: Řádek 134:
              m4=0;              m4=0;
            ​} ​            ​} ​
-         if (step==2) ​     //druhý ​stav vinutí+         if (step==2) ​     //treti stav vinuti
            {            {
              m1=0;              m1=0;
Řádek 144: Řádek 142:
            ​} ​            ​} ​
                        
-         if (step==1) ​     //třetí ​stav vinutí+         if (step==1) ​     //druhy stav vinuti
            {            {
              m1=1;              m1=1;
Řádek 152: Řádek 150:
            }            }
                        
-           if (step==0) ​   //čtvrtý ​stav vinutí+           if (step==0) ​   //prvni stav vinuti
            {            {
              m1=1;              m1=1;
Řádek 163: Řádek 161:
         }          } 
    
-int main(void) {               //hlavní ​funkce+int main(void) {               //hlavni ​funkce
     ​     ​
-    DigitalOut ledr(LED_RED); ​ // definice ​výstupů ​pro RGB led+    DigitalOut ledr(LED_RED); ​ // definice ​vystupu ​pro RGB led
     DigitalOut ledb(LED_BLUE);​     DigitalOut ledb(LED_BLUE);​
     DigitalOut ledg(LED_GREEN);​     DigitalOut ledg(LED_GREEN);​
-    wait(0.5); ​                // ​zablikají všechny ​LED pro ověření ​ +    wait(0.5); ​                // ​zablikaji vsechny ​LED pro overeni ​ 
-    ledr=1; ​                   // funkčnosti ​desky FRDM-KL25Z+    ledr=1; ​                   // funkcnosti ​desky FRDM-KL25Z
     ledb=1;     ledb=1;
     ledg=1;     ledg=1;
Řádek 186: Řádek 184:
     wait(0.1);     wait(0.1);
                    
-    tick.attach(&​flip,​ 0.006); ​  //​obsluha ​přerušení ​se spustí každých ​6ms +    tick.attach(&​flip,​ 0.006); ​  //​obsluha ​preruseni ​se spusti kazdych ​6ms 
-    PwmOut led_pwm(LED_BLUE); ​       //definice PWM výstupu ​pro modrou LED +    PwmOut led_pwm(LED_BLUE); ​   //definice PWM vystupu ​pro modrou LED 
-    led_pwm.period_ms(5.0f); ​        ​//definice periody PWM výstupu ​pro modrou LED+    led_pwm.period_ms(5.0f); ​    ​//definice periody PWM vystupu ​pro modrou LED
     ​     ​
-    PwmOut motor_pwm(PTD1); ​     //definice pwm výstupu ​pro ovládáni ​rychlosti DC motorku +    PwmOut motor_pwm(PTD1); ​     //definice pwm vystupu ​pro ovladani ​rychlosti DC motorku 
-    motor_pwm.period_ms(5.0f); ​  //​definice periody PWM výstupu ​pro ovládáni ​rychlosti DC motorku +    motor_pwm.period_ms(5.0f); ​  //​definice periody PWM vystupu ​pro ovladani ​rychlosti DC motorku 
-    TSISensor tsi;               //​definice ​proměnné ​pro dotykový ​senzor (slider)+    TSISensor tsi;               //​definice ​promenne ​pro dotykovy ​senzor (slider)
     ​     ​
     float x=1;                   //​definice     float x=1;                   //​definice
-    int timer=0; ​                //dalších proměnných +    int timer=0; ​                //dalsich promennych 
-    right=0; ​                    //počáteční nastavení směru otáčení+    right=0; ​                    //pocatecni nastaveni smeru otaceni
     left=1;     left=1;
         ​         ​
-    while (1) {                         //nekonečná smyčka +    while (1) {                         //nekonecna smycka 
-        x =  1.0-tsi.readPercentage(); ​ //čtení ​hodnoty z kapacitního ​slideru+        x =  1.0-tsi.readPercentage(); ​ //cteni hodnoty z kapacitniho ​slideru
                            
-        if (x<​0.98) ​                    //​pokud se někdo ​dotknul slideru, tak +        if (x<​0.98) ​                    //​pokud se nekdo dotknul slideru, tak 
-        {                               //se aktualizuje hodnota PWM a délka ​prodlevy ​  +        {                               //se aktualizuje hodnota PWM a delka prodlevy ​  
-        led_pwm =  x;                   //​mezi ​přepínáním vinutí krokového ​motorku ​+        led_pwm =  x;                   //​mezi ​prepinanim vinuti krokoveho ​motorku ​
         motor_pwm = x;         motor_pwm = x;
         threshold=50*x-2;​         threshold=50*x-2;​
         }         }
         ​         ​
-        wait(0.1); ​                     //čekání+        wait(0.1); ​                     //cekani
         timer++;         timer++;
                            
-        if (timer>​20) ​                  //změna směru otáčení ​obou motorků+        if (timer>​20) ​                  //zmena smeru otaceni ​obou motorku
                 {                  { 
            ​timer=0;​            ​timer=0;​
Řádek 221: Řádek 219:
 return 0; return 0;
 } }
-</​code> ​ +</​code>​
  
 =====Dosažené výsledky===== =====Dosažené výsledky=====
Řádek 228: Řádek 225:
 ---- ----
  
-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 červené LED ukazují, které vinutí krokového motorku je pod proudem. ​Oranžové LED ukazují směr otáčení komutátorového motorku. Šířka PWM signálu je indikována žlutou LED a také modrou led přímo na FRDM-KL25Z. Zařízení bylo úspěšně vyzkoušeno.\\ ​  ​ +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.\\  
-Zatím ​je ke shlédnutí ​současná realizace ​projektu:+{{:​2014:​motor-demo:​zepredu01.jpg?​400|}} {{:​2014:​motor-demo:​zepredu02.jpg?​400|}} 
 +{{:​2014:​motor-demo:​zezadu01.jpg?​400|}} {{:​2014:​motor-demo:​led-kontrolky.jpg?​400|}} 
 + 
 + 
 +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 [[http://​uloz.to/​live/​xzCsV9Ub/​step-motor-dc-motor-control-with-frdm-kl25z-indicator-leds-wmv|uloz.to]]. K dispozici je i nahrávka [[https://​www.youtube.com/​watch?​v=wocUC18Q1C8|pracovní verze projektu.]] 
 +{{youtube>​C93qEr_SvQk?​medium}} {{dailymotion>​x2dqhuj?​medium}}
  
-{{youtube>​sALln11ezXA?​medium}} 
 =====Závěr===== =====Závěr=====
  
2014/motor-demo.1419879746.txt.gz · Poslední úprava: 2014/12/29 20:02 autor: Jakub Novotný