Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.
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===== | ||