Krokový motor
Z MAM wiki
(Rozdíly mezi verzemi)
(Uprava formatovani C kodu) |
|||
Řádka 16: | Řádka 16: | ||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
+ | int main (void){ // hlavni funkce programu | ||
+ | |||
+ | //unsigned char a=0; // pomocna promenna | ||
+ | unsigned char t=100; | ||
+ | unsigned char dopredu = 0; | ||
+ | |||
+ | /* init */ | ||
+ | |||
+ | DDRB=0xFF; // Data Direction Register PORTB: kazda nozicka bude vystup | ||
+ | |||
+ | |||
+ | |||
+ | /* hlavni smycka */ | ||
+ | |||
+ | while(dopredu){ // nekonecna smycka | ||
+ | |||
+ | |||
+ | PORTB= 0x08; | ||
+ | _delay_ms(t); | ||
+ | PORTB= 0x0c; | ||
+ | _delay_ms(t); | ||
+ | PORTB= 0x02; | ||
+ | _delay_ms(t); | ||
+ | PORTB= 0x06; | ||
+ | _delay_ms(t); | ||
+ | PORTB= 0x04; | ||
+ | _delay_ms(t); | ||
+ | PORTB= 0x05; | ||
+ | _delay_ms(t); | ||
+ | PORTB= 0x01; | ||
+ | _delay_ms(t); | ||
+ | PORTB= 0x09; | ||
+ | _delay_ms(t); | ||
+ | |||
- | + | ||
- | + | // vystup na nozicky portu B | |
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | |||
- | |||
// pockam nejakou postrehnutelnou dobu | // pockam nejakou postrehnutelnou dobu | ||
- | + | ||
- | } // konec nekonecne smycky | + | } // konec nekonecne smycky |
- | + | ||
- | + | while(!dopredu){ | |
- | + | ||
- | + | PORTB= 0x09; | |
- | + | _delay_ms(t); | |
- | + | PORTB= 0x01; | |
- | + | _delay_ms(t); | |
- | + | PORTB= 0x05; | |
- | + | _delay_ms(t); | |
- | + | PORTB= 0x04; | |
- | + | _delay_ms(t); | |
- | + | PORTB= 0x06; | |
- | + | _delay_ms(t); | |
- | + | PORTB= 0x02; | |
- | + | _delay_ms(t); | |
- | + | PORTB= 0x0c; | |
- | + | _delay_ms(t); | |
- | + | PORTB= 0x08; | |
- | + | _delay_ms(t); | |
- | + | } | |
- | } // konec main | + | } // konec main |
- | + | ||
'''Hardware:''' | '''Hardware:''' | ||
Verze z 6. 5. 2010, 09:50
Krokový motor
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.
Bipolární řízení s polovičním krokem
int main (void){ // hlavni funkce programu //unsigned char a=0; // pomocna promenna unsigned char t=100; unsigned char dopredu = 0; /* init */ DDRB=0xFF; // Data Direction Register PORTB: kazda nozicka bude vystup /* hlavni smycka */ while(dopredu){ // nekonecna smycka PORTB= 0x08; _delay_ms(t); PORTB= 0x0c; _delay_ms(t); PORTB= 0x02; _delay_ms(t); PORTB= 0x06; _delay_ms(t); PORTB= 0x04; _delay_ms(t); PORTB= 0x05; _delay_ms(t); PORTB= 0x01; _delay_ms(t); PORTB= 0x09; _delay_ms(t); // vystup na nozicky portu B // pockam nejakou postrehnutelnou dobu } // konec nekonecne smycky while(!dopredu){ PORTB= 0x09; _delay_ms(t); PORTB= 0x01; _delay_ms(t); PORTB= 0x05; _delay_ms(t); PORTB= 0x04; _delay_ms(t); PORTB= 0x06; _delay_ms(t); PORTB= 0x02; _delay_ms(t); PORTB= 0x0c; _delay_ms(t); PORTB= 0x08; _delay_ms(t); } } // konec main
Hardware:
AVR Dragon, ATmega168, 2x invertor TC4424, Krokový motor optické mechaniky.