![]() |
|
|
Pin | (I/O) | Namjena |
Pin 1 | PC Output | nSTROBE |
Pin 2 | PC Output | Data 0 |
Pin 3 | PC Output | Data 1 |
Pin 4 | PC Output | Data 2 |
Pin 5 | PC Output | Data 3 |
Pin 6 | PC Output | Data 4 |
Pin 7 | PC Output | Data 5 |
Pin 8 | PC Output | Data 6 |
Pin 9 | PC Output | Data 7 |
Pin 10 | PC Input | nACK |
Pin 11 | PC Input | Busy |
Pin 12 | PC Input | Paper Empty |
Pin 13 | PC Input | Select |
Pin 14 | PC Output | nAUTOFEED |
Pin 15 | PC Input | nERROR |
Pin 16 | PC Output | Initialize Printer |
Pin 17 | PC Output | nSelect Input |
Pin 18 - 25 | Ground |
Zbog male izlazne struje paralelnog porta od oko 10-ak mA potreban nam je driver za upravljanjem koračnim motorom. U tu svrhu koristimo ULN2003 koji služi kao strujni izvor.
Izvedba posebnog napajanja za koračni motor i sklopovlje za upravljanje njime nije nužno jer možemo koristiti napajanje PC-a. Naponi koji su nam na raspolaganju su +5V i +12V.
CEE-type connector (male) | |
Pin | Funkcija |
Pin 1 |
+5V |
Pin 2 | GND |
Pin 3 | GND |
Pin 4 | +12V |
Sama izvedba hardvera nije složena što se da vidjeti iz sheme.
Kao upravljačke signale za upravljanje koračnim motorom koriste se podatkovne linije 2, 3, 4 i 5 paralelnog porta PC-a. Zbog male izlazne struje na izlazu porta koristi se driver ULN 2003. Njega napajamo iz napajanja PC-a s +12V. Zener dioda služi za zaštitu kod pojave reverznog napona koji uzrokuje motor.
Da bi koristili paralelni port na PC-u potrebno ga je inicijalizirati. Pod Linux OS koristimo naredbe (pri tome moramo biti logirani kao root):
modprobe parport_pc
insmod lp.o
Provjeru inicijalizacije vršimo naredbom :
cat /proc/devices
nakon čega nam se izlistaju aktivni devices i tamo mora biti i lp.
Sam program step.c izgleda:
#include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <asm/io.h> #define base 0x378 #define step1 0x01 #define step2 0x04 #define step3 0x02 #define step4 0x08 void main(int argc, char *argv[]){ if(ioperm(base,1,1)) fprintf(stderr,"ne otvara port %x\n",base), exit (1); printf("argv1=%c",argv[1][0]); int j; j=1; if(argv[1][0]=='r'){ while(j<50){ int i=0; outb(step1,base); while(i<500000)i++; i=0; outb(step2,base); while(i<500000)i++; i=0; outb(step3,base); while(i<1000000)i++; i=0; outb(step4,base); while(i<800000)i++; j++; } } else if(argv[1][0]=='l'){ while(j<50){ int i=0; outb(step1,base); while(i<500000)i++; i=0; outb(step4,base); while(i<500000)i++; i=0; outb(step3,base); while(i<1000000)i++; i=0; outb(step2,base); while(i<800000)i++; j++; } } } |
Program ima ulazni parametar koji određuje smjer vrtnje motora i može biti 'l' kao left ili 'r' kao right.
Program prevodimo naredbom:
gcc step.c -o step
Program se pokreće naredbama:
./step l
ili
./step r