Krokový motor
Z MAM wiki
Řádka 12: | Řádka 12: | ||
Ukázka signálu je pouze pro pravotočivý směr otáčení motoru - generována posloupnost 8,10,2,6,4,5,1,9. Pro otáčení směrem opačným stačí generovat číselnou posloupnost v opačném pořadí. | Ukázka signálu je pouze pro pravotočivý směr otáčení motoru - generována posloupnost 8,10,2,6,4,5,1,9. Pro otáčení směrem opačným stačí generovat číselnou posloupnost v opačném pořadí. | ||
- | + | ||
+ | [[Soubor:Schema_krokovy_motor.png|thumb|left|Schéma zapojení krokového motoru]] | ||
[[Soubor:Zapojeni_vinuti_civky_motoru.gif| Princip výkonového oddělení cívky motoru a signálové části]] | [[Soubor:Zapojeni_vinuti_civky_motoru.gif| Princip výkonového oddělení cívky motoru a signálové části]] | ||
Řádka 18: | Řádka 19: | ||
=== Řešení === | === Řešení === | ||
- | |||
- | |||
Semestrální práce programována v jazyce C: | Semestrální práce programována v jazyce C: | ||
Řádka 81: | Řádka 80: | ||
} | } | ||
+ | |||
+ | [[Soubor:Krokovy_motor_realne_zapojeni.jpg|thumb|left|Reálné zapojení krokového motoru]] | ||
=== '''Závěr''' === | === '''Závěr''' === | ||
Verze z 12. 5. 2010, 19:54
Krokový motor
Obsah |
Zadání
Ovládání krokového motoru
Analýza problému
Ukázka signálu je pouze pro pravotočivý směr otáčení motoru - generována posloupnost 8,10,2,6,4,5,1,9. Pro otáčení směrem opačným stačí generovat číselnou posloupnost v opačném pořadí.
Princip výkonového oddělení cívky motoru a signálové části z procesoru. Na vstupy invertoru jsou přivedeny řídící signály z procesoru.
Řešení
Semestrální práce programována v jazyce C:
/* main.c */ #include <avr/io.h> // zde je definovan napr. PORTB #include <avr/iom168.h> // konstanty pro konkretni typ mikrokontroleru #define F_CPU 1000000UL #include <util/delay.h> // toto potrebuji pro pouziti funkce _delay_ms() int index = 7; // ukazatel na předpokládaný stav rotoru const int pole[] = {8,10,2,6,4,5,1,9}; // jednotlivé stavy rotoru int main (void){ // hlavni funkce programu /* init */ DDRB=0xFF; // Data Direction Register PORTB: kazda nozicka bude vystup ini(); // nastavení do předem známého stavu while(1){ // periodický pohyb krokového motoru kroky(260,0,2); kroky(260,1,2); } } // konec main int cekej(int cykly){ // Tato funkce vznikla z důvodu špatně implementovaného skriptu _delay_ms(1); while(cykly>0){ _delay_ms(1); // po vložení proměnné do teto funkce AVR studio požaduje načíst chybějící soubory cykly--; // toto byl způsob jak se tohoto problému zbavit. } } int doleva(void){ // Pootočení rotoru o jeden krok vlevo if(index==0) index = 7; // Ošetření "přetečení" else index--; PORTB= pole[index]; return 0; } int doprava(void){ // Pootočení rotoru o jeden krok vpravo if(index==7) index = 0; // Ošetření přetečení else index++; PORTB= pole[index]; return 0; } int kroky(int pocet,int smer, int cas){ // doleva=0;doprava=1;cas=cas jednoho kroku v ms;pocet=pocet kroku while(pocet > 0){ if(smer==1) doprava(); else doleva(); cekej(cas); pocet--; } } int ini(void){ // inicializace motoru do zakladni polohy kroky(7,0,50); }
Závěr
Podařilo se nám úspěšně rozpohybovat krokový motor disketové mechaniky ve dvou směrech. Naimplementované funkce ovládají motor definováním přesného počtu kroků daným směrem s přednastavenou délkou doby zachování stavu. Ukázka motoru v chodu Video krokový motor. Maximální rychlosti, které se nám podařilo s tímto krokovým motorem docílit bylo 500 kroků za vteřinu. Napájecí napětí invertorů bylo 3,5V při proudové ochraně 130mA. Při zkrácení doby jednoho kroku na 1/1000s se již motor přestal hýbat, dosáhli jsme tak jeho hranice.
Hardware
Krokový motor z disketové mechaniky, AVR Dragon, ATmega168, 2x invertor TC4424, 8x dioda 1N5819, 4x LED 2barevná, 4x rezistor