Hallo, Ich habe ein kleines Programm geschrieben um einen Schrittmotor anzusteuern,jedoch muss ich ein vielfaches an Schritten machen als man rechnerisch machen müsste. Laut Datenblatt brauche ich 64 Schritte pro Umdrehung Ich schalte die Spulen im Halbschritt durch. Statt 32 mal muss ich das aber ganze 256 mal machen für eine halbe Umdrehung. Habe ich mich vielleicht mit meinen while-Schleifen verzettelt? Oder versteh ich das Konstrukt Treiber mit Schrittmotor noch nicht ganz. Wäre nett wenn einer mal drüberschauen könnte. PS: vollSchritt muss ich noch in halbSchritt ändern vom Namen her. Freundliche Grüße.
1 | unsigned char vollSchrittPB[8] = {0b0000,0b0010,0b0010,0b0110, |
2 | 0b0100,0b0100,0b0000,0b0000}; |
3 | |
4 | unsigned char vollSchrittPD[8] = {0b01000000,0b01000000,0b00000000,0b00000000, |
5 | 0b00000000,0b00100000,0b00100000,0b01100000}; |
6 | int i = 0; |
7 | int DrehRichtung=0; |
8 | |
9 | |
10 | int main(void) |
11 | {
|
12 | DDRD |= 0x60; //PORT D BITS 0..3 auf Ausgabe |
13 | DDRB |= 0x06; //PORT B BITS 1 und 2 auf Ausgabe |
14 | |
15 | |
16 | while (1) |
17 | {
|
18 | {
|
19 | if(DrehRichtung==0){ |
20 | int stepsRechts = 0; |
21 | while(stepsRechts<=256){ |
22 | i=0; |
23 | while(i<=7){ |
24 | PORTD = (PORTD & 0x00) | vollSchrittPD[i]; |
25 | PORTB = (PORTB & 0x00) | vollSchrittPB[i]; |
26 | i++; |
27 | _delay_ms(1);} |
28 | stepsRechts++;} |
29 | DrehRichtung=1; |
30 | _delay_ms(10);} |
31 | |
32 | |
33 | |
34 | else{ |
35 | int stepslinks = 0; |
36 | while ( stepslinks<=256){ |
37 | i=7; |
38 | while (i>=0) |
39 | {
|
40 | PORTD = (PORTD & 0x00) | vollSchrittPD[i]; |
41 | PORTB = (PORTB & 0x00) | vollSchrittPB[i]; |
42 | i--; |
43 | _delay_ms(1);} |
44 | stepslinks++;} |
45 | DrehRichtung=0; |
46 | _delay_ms(10;} |
47 | |
48 | |
49 | }
|
50 | |
51 | |
52 | |
53 | |
54 | }
|
55 | }
|