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/23 22:18] 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: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|}} |
| | ||
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.**\\ | 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.**\\ | ||
Řádek 34: | Řádek 32: | ||
{{:2014:motor-demo:50hz_step_motor.png?200|}} | {{:2014:motor-demo:50hz_step_motor.png?200|}} | ||
===Osmikanálový budič A2982=== | ===Osmikanálový budič A2982=== | ||
- | [[http://www.allegromicro.com/en/Products/Motor-Driver-And-Interface-ICs/High-and-Low-Side-Drivers/UDx2981-2.aspx|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 firma[[http://www.allegromicro.com|Allegro Micro Systems]] ve dvacetipinovém pouzdru SOIC. | + | [[http://www.allegromicro.com/en/Products/Motor-Driver-And-Interface-ICs/High-and-Low-Side-Drivers/UDx2981-2.aspx|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 firma[[http://www.allegromicro.com|Allegro Micro Systems]] ve dvacetipinovém pouzdru SOIC. Zde jsou **využity pouze čtyři kanály.**\\ |
{{:2014:motor-demo:a2982_ic.png?350|}} {{:2014:motor-demo:a2982_one_channel2.png?450|}} | {{:2014:motor-demo:a2982_ic.png?350|}} {{:2014:motor-demo:a2982_one_channel2.png?450|}} | ||
{{: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 54: | Řádek 52: | ||
====Schéma zapojení celého zařízení==== | ====Schéma zapojení celého zařízení==== | ||
- | Některé součástky, které nebyly dosud zmíněny, jsou k nalezení ve schématu. | + | 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 [[http://www.vutbr.cz/lide/jan-kovar-47073/funkce|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. |
+ | {{:2014:motor-demo:schema_motor_demo.png?1000|}} | ||
=====Firmware===== | =====Firmware===== | ||
---- | ---- | ||
- | Program byl vytvořen v prostředí [[http://developer.mbed.org/|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č.\\ | + | Program byl vytvořen v prostředí [[http://developer.mbed.org/|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í:\\ |
- | Vzhled prostředí je následující:\\ | + | {{:2014:motor-demo:web_mbed01.png?700|}}\\ |
- | FIXME FIXME :-O\\ | + | 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ěť. |
- | K dispozici je 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. 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> | ||
+ | #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; | ||
+ | } | ||
+ | </code> | ||
=====Dosažené výsledky===== | =====Dosažené výsledky===== | ||
Řádek 68: | Řá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===== | ||