|
I denne artikkelen, skal jeg vise hvordan jeg har laget en kotroller for to stk step motorer. Vi kommer til å bruke parallelportens pin nr 2, 3, 4 og 5.
For å lage denne kontrolleren trenger du følgende:
- test print plate
- 8 stk 1k Ohm motstand
- 2 stk zener dioder
- 2 stk ULN2003 IC
- diverse ledningsbiter
- 2 stk unipolar step motorer
Komponenter og koblinger.

Dette koblet jeg sammen i henhold til dette skjemaet:

Det ble da seende ut som dette:

Det er dobbelt, fordi planen er å kunne styre to stepper motorer med kun 4 pinner fra parallel porten. Hvis dette fungerer, kan vi doble det og da kan vi styre 4 steppermotorer med de 8 pinnene som er tilgjengelig i parallel porten.
C programmet som styrer dette.
Denne listingen gjør at 2 unipolar stepmotorer snurrer noen runder den ene veien, for så å snurre like mange ganger den andre veien. Det kan sikkert med fordel gjøres på en annen måte, men denne har jeg valgt.
Kompileres med gcc -O 2stepmotor.c -o 2stepmotor
Kjøres med kommandoen sudo ./2stepmotor
/**************************************************** * Program som styrer to steppermotorer synkronisert * * Laget av Jens Christoffersen * * 2009 * *****************************************************/ //includes #include #include #include #include #include
//definitions #define base 0x3bc #define sleeping1 7000 // by changeing this, you change the speed og the motor.
//variables int x;
main(int argc, char **argv) { // get access to the parallel port if (ioperm(base,1,1)) fprintf(stderr, "Couldn't get the port at %x\n", base), exit(1);
// send low, to all pins outb(0, base);
// start infinit loop while (1) {
// start for - loop for (x=0;x<48;x++) { // start sending high nad low to pins start with all pins to low outb(0, base); // send high to pin 2 and 4 outb(5, base); printf ("Pin \t2 and 4 high and \t3 and 5 low.\n"); usleep(sleeping1);
// send low to all pins outb(0, base); printf ("Pin \t2 and 4 low and \t3 and 5 low.\n"); usleep(sleeping1); // send hig to pin 3 and 5 outb(10, base); printf ("Pin \t2 and 4 low and \t3 and 5 high .\n"); usleep(sleeping1);
// send low to all pins outb(0, base); //send high til pind 2, 3, 4 and 5 outb(15, base); printf ("Pin \t2 and 4 high and \t3 and 5 high.\n"); usleep(sleeping1); } // end for loop
// start new for loop for (x=0;x<48;x++) { // do everything again, just the other way around. outb(0, base); outb(15, base); printf ("Pin \t2 and 4 high and \t3 and 5 high.\n"); usleep(sleeping1);
outb(0, base); outb(10, base); printf ("Pin \t2 and 4 low and \t3 and 5 high .\n"); usleep(sleeping1);
outb(0, base); printf ("Pin \t2 and 4 low and \t3 and 5 low.\n"); usleep(sleeping1); outb(0, base); outb(5, base); printf ("Pin \t2 and 4 high and \t3 and 5 low.\n"); usleep(sleeping1);
} // end for loop
} // end infinite loop
// send low to all pins outb(0, base); }
Verdien som sendes
For å finne ut hviilken verdi som skal sendes, legger man sammen følgende tall:
| Pin |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
| Verdi |
1 |
2 |
4 |
8 |
16 |
32 |
64 |
128 |
Dersom du vil sende high til pin 2 sender du verdien 1 til parallelportaddressen. Hvis du vil sende high til pin 3 og 5 legger du sammen verdiene: 2+8=10. Da sender du verdien 10 til parallelportaddressen.
Det er sånn jeg har regnet ut verdien som blir sendt til de forskjellige pinnene i programmet på forrige side.
Video
Klikk på linken for å se en liten videosnutt. Her har jeg koblet på det lille LED-panele som vi har laget tidliegere, for å se hva som blir sendt til parallelporten.
Link til video
|