PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : 3 Schrittmotoren mittels Atmega8 ansteuern



Houdini
28.05.2008, 20:03
Hi zusammen!

Ich möchte für meinen Roboter ERNIE das Auge bauen und benutze hierfür die 18xZoom Optik eines alten Camcorders.

Auf dieser Optik befinden sich 3 Schrittmotoren. Ich denke sie sind bipolar, da sie jeweils 4 Anschlüsse haben.

Ich möchte die Motoren zunächst zum Testen mit meiner myAVR Platine bestückt mit einem Atmega8 betreiben.

Die Schrittmotoren sind recht klein und müssten eine Betriebsspannung von 5V haben.

Reicht hierfür die folgende Schaltung aus (pro Motor einmal)

https://www.roboternetz.de/wissen/images/c/c8/Schrittmotorprinzip2.gif

oder muss ich diese Variante verwenden:

https://www.roboternetz.de/wissen/images/7/77/L298standard.gif


Ich freue mich auf eure Antworten!
Danke und Gruß
Houdini

womb@t
29.05.2008, 11:48
Die erste Schaltung mit dem L293 ist wesentlich kleiner als die L297-L298-Kombination, und ist auch für kleinere Motoren ausgelegt (I max).
Doch der wesentliche Unterschied ist die Ansteuerung! Die erste Schaltung benötigt eine Software-Schwittmotorsteuerung, während die zweite Schaltung lediglich noch einen Takt für einen Schritt und einen Pegel für die Richtung.

Houdini
29.05.2008, 21:49
Hi!

Danke womb@t!

Ich habe mal einen passenden Schaltplan erstellt. Passt das so?!

http://80.237.241.37/dwerner/files/stepper.jpg

Danke und Gruß
Houdini

BlackDevil
30.05.2008, 20:36
Schaut richtig aus - wenn ich nur Splan 1 mit dem Vergleiche

Houdini
08.06.2008, 18:56
Hi!

Ich habe die oben gezeigte Schaltung nun aufgebaut und getestet:

Das Ergebnis seht ihr hier (http://80.237.241.37/dwerner/files/roboternetz/).



Derzeit habe ich den Atmega8 wie folgt programmiert:



$crystal = 3686411
$regfile = "m8def.dat"
Config Portc = Output
Config Portd = Input
Portd = &H0C

Dim Tmp As Byte
Dim Tmp2 As Byte
Tmp = 1
Tmp2 = 1
Do
If Pind.2 = 0 Then
Portc.0 = 1
Portc.1 = 0
Portc.2 = 1
Portc.3 = 0
Waitms 5
Portc.0 = 1
Portc.1 = 0
Portc.2 = 0
Portc.3 = 1
Waitms 5
Portc.0 = 0
Portc.1 = 1
Portc.2 = 0
Portc.3 = 1
Waitms 5
Portc.0 = 0
Portc.1 = 1
Portc.2 = 1
Portc.3 = 0
Waitms 5
Elseif Pind.3 = 0 Then
Portc.0 = 0
Portc.1 = 1
Portc.2 = 1
Portc.3 = 0
Waitms 5
Portc.0 = 0
Portc.1 = 1
Portc.2 = 0
Portc.3 = 1
Waitms 5
Portc.0 = 1
Portc.1 = 0
Portc.2 = 0
Portc.3 = 1
Waitms 5
Portc.0 = 1
Portc.1 = 0
Portc.2 = 1
Portc.3 = 0
Waitms 5
Else
' keine Taste ist gedrückt LED zurücksetzten
Tmp = 1
Tmp2 = 1
Portc = 0
End If
Loop
End



Lässt sich dies noch schöner/kürzer machen?

Wie kann ich die Geschwindigkeit, die derzeit per "Waitms 5" geregelt ist anhand eines Potis regeln?

Danke und Gruß
Houdini

Andree-HB
09.06.2008, 10:17
Wie kann ich die Geschwindigkeit, die derzeit per "Waitms 5" geregelt ist anhand eines Potis regeln?


...einfach eine Variable als veränderbaren Zeitwert einsetzen und sich diesen Wert durch einlesen eines Analogportes / Poti / Umrechnung generieren.

pongi
09.06.2008, 18:22
Ich würde noch als Optimierung die 4bits vom PORTD auf den verbleibenden jeweils 2Bits bei PORTB u. PORTC umsetzen. Man muss zwar ein bisschen mit den Bits jonglieren, wäre aber machbar, und dann hattest noch einen ganzen Port frei.
Wenn natürlich andere Überlegungen für diese Verteilung sprechen (wie zB Spezialfunktionen der Pins), dann hab ich nichts gesagt :-D

Statt waitms könnte man einen Timer benutzen, und 3 Wartevariablen für die 3 Motoren, und aus dem Takt, was der eine Timer erstellt (interruptbasiert), die Wartezeiten ausrechnen. Damit wäre dann noch für andere Dinge Rechenzeit übrig.