PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Problem mit Schrittmotor



Rodney
29.01.2005, 13:36
Hallo Leute,

ich hab folgendes Problem:

Ich steuer einen unipolaren Schrittmotor mit dem L293D an (ich weiß, dass das nicht die optimale Lösung ist...)
Ich verwende das Ansteuerungsschema aus dem Datenblatt des Motors, aber er dreht immer nur einen Schritt vor, dann wieder zurück.

Mir ist aufgefallen, dass es egal ist ob ich die zusammengeführte Mittelanzapfung anschließe oder nicht, er dreht immer nur einen Schritt vor und dann zurück...

MfG, Rodney

Rodney
29.01.2005, 16:32
es handelt sich übrigens um einen Howard Ind. 1-19-4202.

noch eine weitere Frage:

kann ich dort die Schrauben an den Ecken lösen und tauschen (damit ich ihn besser am Chassi verschrauben kann) ohne, dass der Motor außeinanderfällt bzw sich irgendetwas verschiebt, dass er nicht mehr optimal läuft?

[phil]
29.01.2005, 17:25
Mir ist aufgefallen, dass es egal ist ob ich die zusammengeführte Mittelanzapfung anschließe oder nicht
Also wenn du die mittelanzapfung weglassen kannst und er trotzdem noch was tut, dann hast du was falsch angeschlossen. Die Mittelanzapfung is ja normalerweise der GND.

PicNick
29.01.2005, 17:29
Einzeln kannst du die Schrauben sicher austauschen (also nicht alle auf einmal).
Mit der Schaltung oder mit den Schritten hast du sicher einen Murks.
Mach die Schritte mal einzeln und miß nach, ob das dem Datasheet entspricht. mfg robert
@phil: hab das datasheet angesehen. in der Mitte hätt er gerne +, die Spulen dann über T auf Gnd. (kann man wahrscheinlich auch umdrehen)

Rodney
29.01.2005, 18:40
ich steuer das ganze ja nicht über Transistoren sondern über den L293D an...
Ich habe gedacht, man könnte theoretisch alles umdrehen also die Mittelanzapfung auf 0V legen und dann die anderen auf 12V...
Alle Leitungen die ich nicht benutze müssen doch auch einfach auf Masse gelegt werden oder?

PicNick
29.01.2005, 19:14
Das blöde ist, daß die Mittelanzapfungen der Spulen alle verbunden sind.
Der 293 ist eine Brückenschaltung, schaltet also nicht nur gegen GND, sondern legt auch + an. jetzt fährt der Saft auch durch die falschen Spulen.
Du müßtest also durch (kräftige) Dioden dafür sorgen, daß die 293-Ausgänge zwar eine Wicklung auf GND ziehen können, aber kein + reinschicken können.
Die Motor MittelLeitung legst du dann wie beschrieben auf + .
klaro ? mfg robert

Rodney
29.01.2005, 19:43
was für dioden z.B.?
Kann ich das ganze ohne Dioden gar nicht lösen?

MfG, rodney

PicNick
30.01.2005, 09:59
Vielleicht geht's auch, wenn man die Treiber im richtigen moment disabled, da hängen aber immer zwei zusammen. Ich muß mir das mal aufzeichnen und dann den Kopf schief halten, damit das Hirn zusammenläuft. mfg robert

Rodney
30.01.2005, 11:41
das wär klasse =D>

PicNick
30.01.2005, 15:02
Soderla. Also wenn Du Schwarz (common) auf + anschließt, solltest du nix sonst brauchen.
Kannst du deine Schaltung posten
oder erzählen auf Basis: Motor-Farbe / Pin# L293D und noch dein Ansteuerschema (4-Schritte) da muß wo der Wurm drin sein.
mfg robert

Rodney
30.01.2005, 16:23
ok dann poste ich hier mal die Anschlüsse etc

L239D

Pin 1 - 5V
Pin 2 - Port C Pin 0
Pin 3 - Motor weiß (A)
Pin 4 - GND
Pin 5 - GND
Pin 6 - Motor grün (A')
Pin 7 - Port C Pin 1
Pin 8 - 12V

Pin 9 - 5V
Pin 10 - Port C Pin 2
Pin 11 - Motor rot (B)
Pin 12 - GND
Pin 13 - GND
Pin 14 - Motor braun (B')
Pin 15 - Port C Pin 3
Pin 16 - 5V

Ansteuerungsroutine:

void schrittmotor(void) {
static int schritt;
schritt++;
if (schritt > 4) schritt = 1;

if (schritt == 1) PORTC = B00001010;
if (schritt == 2) PORTC = B00001001;
if (schritt == 3) PORTC = B00001101;
if (schritt == 4) PORTC = B00000110;
}

Die Funktion rufe ich in einer Endlosschleife 10mal in der Sekunde auf.


Mir ist gerade noch aufgefallen, dass wenn ich an die Commonschleife 12V anlege (direkt von der Batterie) die ganze Schaltung Strom bekommt obwohl an der Batterie sonst nur noch GND angeschlossen ist und der Spannungsregler also keinen 12V Input hat. Wie kann das denn sein? :-s

Wirklich vielen Dank für deine Hilfe!

PicNick
30.01.2005, 17:00
Hi, probier mal
1 B01010000
2 B10010000
3 B10100000
4 B01100000
Wie gesagt, Common auf VCC2 (8). Laß hören mfg robert
EDIT: Der smiley heißt Klammer 8 Klammer

Rodney
30.01.2005, 17:06
jez passiert garnichts mehr...

Die Bits hinten sind doch schon richtig oder?
Ist ja nicht Pin 4-7 sondern 0-3

Rodney
30.01.2005, 17:08
sorry ich hab mich oben bei den Anschlüssen vertan, deswegen schreibst du das... 8-[

Ich editier das mal

Rodney
30.01.2005, 20:38
Ich seh das jetzt erst, warum schreibst du bei Common VCC2 und was soll das ( 8 ) dahinter??

-MfG, Rodney

PicNick
31.01.2005, 08:10
Motor common (schwarz) gehört auf Motor + , das heißt beim L293D
VCC2 und ist auf Pin 8
Kannst Du deine beschaltung aktualisieren und nochmal reinstellen ?
mfg robert

Rodney
31.01.2005, 13:36
Motor common (schwarz) gehört auf Motor + , das heißt beim L293D
VCC2 und ist auf Pin 8
Kannst Du deine beschaltung aktualisieren und nochmal reinstellen ?
mfg robert

ja ich habe Common auf + gelegt zwar nicht an den L293D aber an die Batterie (beides die selbe Versorgung)

die Schaltung habe ich bereits gestern aktualisiert.

MfG, rodney

PicNick
31.01.2005, 13:54
Oh, hab ich übersehen.
dann:
1 B00001010
2 B00001001
3 B00000101 da hast du murks
4 B00000110
versuch's mal mfg robert

Rodney
31.01.2005, 14:35
auch nach der Veränderung läuft alles wie immer: ein schritt vor, ein schritt zurück...
Keine veränderung wenn ihc die Commonschleife nicht auf 12V setze

PicNick
31.01.2005, 14:51
Checks:
JTAG off (Fuses) ? (PINC 2, 3, 4)
I2C off ? (PINC 0, 1)
PORTC as Output ?
Ultimativ: statt motor 4 LED mit vorwiderstand (~200 Ohm) , schauen ob das tickert, wie es soll. (Bremsen mit idle-loops)
Messen an den Pins
Den Motor kannst du offline testen, indem COMMON vorwiderstand (~200 Ohm) auf 12V und die anderen Anschlüsse laut Motor datasheet-folge auf 0V (GND ) legst.
nu ? mfg robert

Rodney
31.01.2005, 16:01
Es lag am JTAG
ich hab erst die LEDs angeschlossen, es haben immer nur 2 abwechselnd geblinkt.

Jetzt läuft das ganze, ich bin zwar ein bisschen entäuscht von der Kraft des Motors aber in den unteren Drehzahlen gehts.

Vielen Dank dir PicNick!

PicNick
31.01.2005, 16:36
*tätarätä* *tätarätä* *tätarätä*

Rodney
31.01.2005, 17:38
sorry aber ich melde mich nochmal:

ich wollte jetzt einen 2. Motor anschließen, dafür nutze ich dann die Pins 4-7 am Port C. Nur funktioniert jetzt Pin 5 nicht. Gibt es dort auch eine Extra-funktion die ich deaktivieren muss? Im Datenblatt steht als Beschreibung nur TDI.

mfg, Rodney

PicNick
31.01.2005, 18:53
Jaja, der Bursche is hartnäckig
es gibt ein Register ASSR und ein Bit AS2 darin.
wenn das gesetzt ist, is das Port auch weg
macht spaß, gelle ? mfg robert

Rodney
31.01.2005, 19:07
joa, macht spass (besonders wenn dann was funktioniert)... :-)

ich hab mal in der Doku nachgeguckt, dieses AS2 ist ja Bit Nr 3
Also muss ich doch jetzt schreiben:
ASSR = ASSR && B00001000;

damit dieses Bit auf 1 gesetzt wird?

Leider bleibt die entsprechende LED aus... (wenn ich das gesamte Register auf 1 setze geht auch die LED an PC6 nichtmehr...

mfg, Rodney

PicNick
31.01.2005, 19:10
Halt ein, Kollege, das Bit muß auf Null sein und das heißt so :

ASSR &= ~B00001000;

mfg

Rodney
31.01.2005, 19:22
](*,) ](*,)
Klar, es soll ja auf 0 gesetzt werden und nicht auf 1...

Leider bleibt die schöne LED immer noch aus.
Ich habe grad am Port nachgemessen, er steht auf undefiniert (2,5V)
Ein programmierfehler kann es nicht sein, ich habe den kompletten Port als Ausgang definiert und ihn komplett auf 0 gesetzt.

Aber du hast sicher noch eine Antwort parat, scheinst ja wirklich fit darin zu sein.

Ein dickes Dankeschön mal wieder an dieser Stelle! =D>

PicNick
31.01.2005, 19:56
Tscha, eigentlich kämpfen um portc der TWI-Bus, der JTAG und die extern. CLock
Vielleicht geht's um die Reihenfolge
JTAG (logo)
ASSR ... auf null
und DANN erst als Output definieren
(2.5V ist nämlich typisch input)
?? Drauf bleiben, nicht aufgeben !
(das einzige, was man aufgibt, ist ein Brief, wir lassen uns von so einem Silikon-Dödi nicht den Tag verderben)
mfg

Rodney
31.01.2005, 21:06
leider auch Fehlanzeige...

Bei den Fusebits ist übrigens nur BootSz0 und BootSz1 gesetzt, und SPIEN aber den kann man nicht verändern.

mfg, Rodney

PicNick
01.02.2005, 07:59
Ok, das stimmt so.
DIe andere Reihenfolge probiert ? mfg

Rodney
01.02.2005, 15:04
joa die andere Reihenfolge hat auch nix gebracht, leider

Vielleicht ist der Port kaputt oder so?
Ich kann das ganze ja auch an einen anderen Port legen, ist halt nur ärgerlich.

Wie aktiviert man nochmal in C einen Pin an einem Port ohne den ganzen neuzubelgen?
So?
sbi(PORTC,3) // Pin 3 aktivieren (auf Spannung ziehen)

PicNick
01.02.2005, 15:08
Im Prinzip ja, nur laut doku ist "sbi" am Aussterben
PORTC |= 1 << 3; setzen
PORTC &= ~(1<<3); löschen

Vergiss aber nicht, daß du "0" brauchst, um eine deiner Spulen unter Saft zu setzen 0 = Strom, 1 = nix mfg robert

Rodney
01.02.2005, 15:13
Ok werde ihc das so machen, jetzt sollte dem ganzen ja nichts mehr im Wege stehen.
Vielen Dank für deine ausführliche schnelle Hilfe!

Eine abschließende Frage noch:
Im Datenblatt meines Motors sind folgende Kräfteangaben:
Detent Torque: 80g-cm
Holding Torque: 504g-cm

Wie rechne ich das ganze jetzt in Ncm um?
Wären das nur 5Ncm bei der Holding Torque??
Bei welcher Frequenz wird dieser Wert erreicht?

mfg, Rodney

PicNick
01.02.2005, 15:17
Oh jeh, ich fürcht', ich bin der falsche :oops: mfg

Rodney
01.02.2005, 16:08
Es gibt also auch was worauf du keine Antwort parat hast... [-(
:mrgreen:
Nee ist ja nicht nur ein 2er Gespräch hier, kein Problem^^

Manf
01.02.2005, 16:36
Die Angaben in gramm sind natürlich nicht ganz sauber formuliert aber die Umrechnung sollte so stimmen. Unten noch ein paar Definitionen zu Torque.

Die beiden Daten sind für die Geschwindigkeit null definiert. Die Geschwindigkeit sonst nach Datenblatt, oder gibt es sonst Angaben über den Motor?
Manfred

http://www.usdigital.com/products/ms23/index.shtml
Torque

Detent Torque: The amount of torque required to rotate a stepper motor shaft without power applied to the windings.

Holding Torque: The amount of torque required to rotate the stepper motor shaft while the windings are energized with maximum DC current at zero speed.

Pull In Torque: The amount of torque a stepper motor can produce without losing synchronism starting from a zero speed state, then given a fixed frequency step sequence.

Pull Out Torque: The amount of torque a stepper motor can produce at a particular operating speed without losing synchronism.

Rodney
01.02.2005, 17:41
so, langsam bin ich wirklcih am Ende...
die LED´s haben alle richtig geblinkt aber warum funktioniert dieser Code nicht mit dem Motor:



void motor_links(void) {
static int schritt1;
schritt1++;
if (schritt1 > 4) schritt1 = 1;

if (schritt1 == 1) PORTC = B00001010;
if (schritt1 == 2) PORTC = B00001001;
if (schritt1 == 3) PORTC = B00000101;
if (schritt1 == 4) PORTC = B00000110;

}

void motor_rechts(void) {
// Pin 5 (TDI) funktioniert nicht / kaputt deswegen dort zusätzlcih PortD, Pin 7

static int schritt2;
schritt2++;
if (schritt2 > 4) schritt2 = 1;

if (schritt2 == 1) { PORTC = B10000000; PORTD |= 1 << 7;}
if (schritt2 == 2) { PORTC = B10010000; PORTD &= ~(1<<7);}
if (schritt2 == 3) { PORTC = B01010000; PORTD &= ~(1<<7);}
if (schritt2 == 4) { PORTC = B01000000; PORTD |= 1 << 7;}
}


Motor_links funktioniert, motor_rechts dagegen nicht.
Beide Motoren sind gleich angeschlossen nur halt an verschiedenen Pins.

PicNick
01.02.2005, 20:06
Links und recht testest du erst mal einzeln ? Sonst müssen wir das anders machen mit dem Programm.
Trotzdem solltest du den jeweils anderen Motor mit 1-ern deaktivieren.
if (schritt1 == 1) PORTC = B11111010; // links
bzw
if (schritt2 == 1) { PORTC = B10001111; PORTD |= 1 << 7;} //rechts

PoRTD Pin 7 könnte vom Timer 2 belegt sein.
Wenn du den nicht brauchst, dann TCCR2 auf NULL setzen
(Auf output setzen is eh logo)
wenn der zweite L293 analog angeschlossen ist
Pin2 <> PORTC.7
Pin7 <> PORTC.6
Pin10 <> PORTC.5/ PortD.7
Pin15 <> PORTC.4
seh ich so mal keinen Fehler *seufz* mfg robert

Rodney
01.02.2005, 21:12
gott bin ich blöd, ich Dummkopf hab im Eifer des Gefechts beide Motoren gleichzeitig angesteuert, was natürlich nicht funktionieren kann, da die beiden Routinen sich gegenseitig behindern...
Ich muss jetzt erstmal das Programm umschreiben, ich schätz mal das wars jetzt^^

Wollen wir mal hoffen, das der thread hier zu Ende ist.

mfg, Rodney

Rodney
01.02.2005, 21:57
Ok alles hat funktioniert, damit wäre das Motorproblem wohl gelöst, danke an alle die hier gepostet haben, aber natürlich besonders PicNick.
Eben sind mir zwar beide Treiber um die Ohren geflogen (Verpolung, die Dinger warn nicht gesichert weil sie direkt am Akku hängen) aber immerhin funktioniert hat alles.