PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Schrittmotor Problem



pongi
12.04.2007, 20:52
Hallo!

Ich weiss, es gibt schon hunderte Threads, aber ich weiss jetzt nicht weiter.
Meine Schaltung basiert auf diesem Tutorial: http://www.the-starbearer.de/Roboterelektronik/Schrittmotoren.htm
Also ULN2803 als Treiber.
Die Daten des Motors stehen da: http://www.sly.de/artikeldet.php?suchspeicher=MOTS2&proid=37979&bez=Schrittmotor12VDC%2060mA%20(Winkel%207.5°%20/%2085%20Schritte)&sid=da78dc61278c1faeb1932bec15e74dfc

An die Pins 1-4 vom ULN2803 hab ich PC 0-3 vom Atmega8 angeschlossen, und an die Pins 15-18 die Spulen B2-B1-A2-A1 in diese Reihenfolge. Die Mittelanzapfung liegt auf 12V, und natürlich hat der ULN seine Spannungsversorgung.

Ich kann den Motor schon in Halb- und Vollschritt ansteuern, aber aus irgendeinem Grund dreht er sich nur in eine Richtung. Die Bitfolge für die Ansteuerung habe ich in ein Array gepackt, es wird einmal inkremental und einmal dekremental ausgelesen, der Motor dreht sich aber trotzdem nur in eine Richtung.

Code:



void main(void){
DDRC=0xFF;
const uint8_t steptable[]={1, 3, 2, 6, 4, 12, 8, 9};
uint8_t j=0;
while(j!=11){ //hier solle es in die eine Richtung drehen
uint8_t i=0;
while(i!=8){
PORTC=steptable[i];
i++;
_delay_ms(5);
j++;
}
}
j=0;
while(j!=11){ //und ab hier in die andere
uint8_t i=7;
while(i!=255){
PORTC=steptable[i];
i--;
_delay_ms(5);
j++;
}
}

}

Was mach ich falsch? Liegst an der Software, oder hab ich was falsch angeschlossen?
Der Motor läuft übrigens sehr ruhig, erwärmt sich nicht, und hat ein ordentliches Drehmoment. Ich tippe also auf einen banalen Software- und/oder Verständnisfehler meinerseits, den ich aber beim besten Willen nicht finde...

Danke im Voraus für die Hilfe.

MfG

pongi

pongi
13.04.2007, 18:37
Endlich hab ich es geschafft, beide Richtungen anzufahren, eine While-Schleife war schlecht, und da ist das ganze steckengeblieben.
Eine Frage hab ich aber noch: am Motor steht Winkel vom Schritt / Schritt: 7.5° / 85, das heisst doch, dass der Motor in 85 Schritten eine ganze Umdrehung machen sollte oder? Meine While-Schleife durchläuft schon 200 mal das Array, der Motor dreht sich aber immer noch nicht einen ganzen Kreis... Das sollten dann aber schon 200*4 (Arraygröße) = 800 Schritte sein... Oder seh ich das falsch?
Kann es sein, das da noch eine Untersetzung im Motor ist, wovon nichts im Datenblatt (siehe ober) steht? Oder mach ich wieder was falsch?




while(j!=200){
uint8_t i=0;
while(i!=4){
PORTC=steptable[i];
i++;
_delay_ms(5);
}
j++;

}

Hier nocheinmal ein "Datenblatt", jetzt direkt vom Hersteller... Was besseres hab ich nicht gefunden... http://www.mingjong.com.tw/eipe/front/bin/ptdetail.phtml?Category=100022&Part=ST35

darwin.nuernberg
13.04.2007, 19:49
Schon ohne die daten gelesen zu haben:


Da die Welle nicht zentrisch ist zeigt dass ein Getriebe eingebaut ist um das Drehmoment zu erhöhen.

Die Untersetzung scheint 1/85 zu sein also eine drehung der Welle benötigt 85 Drehungen des Motors.

Könnt der Schrittwinkel des Motors evtl. 7,5° betragen ?


Das wären dann 48 Schritte für eine 360° Motordrehung und demzufolge mit der Untersetzung 4080 Schritte für eine 360° drehung der Welle.


Kommt das hin?

pongi
13.04.2007, 19:57
Ich hab jetzt mit den Werten experimentiert, bei 255*4 scheint der Motor 180° Grad zu machen. Das ist genau die Hälfte vom Wert, was du gerechnet hast. Ich hab im Datenblatt nichts gefunden, was auf eine Untersetzung deuten würde, obwohl eindeutig eine drin ist...

Oder werdet ihr daraus schlau?
1 step 1-2 Step Angle: 7.5 ¢X /85 ¢X
Reduction Ratio: 1/85


Wie kann ich es genau herausfinden, wieviele Schritte ich für eine Drehung brauche?

darwin.nuernberg
13.04.2007, 20:03
Experimentelle Metode:

lass den Motor bzw. die achse 10x eine komplette Drehung machen teile durch 10 und probiere dann noch sicherheitshalber ob der motor nach der berechneten schrittzahl auch nach 30, 40 und 50 Volldrehungen immer an der 0° position stehen bleibt.

primitiv aber sicher.

pongi
13.04.2007, 20:04
Ist ein guter Ansatz, danke!