PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Einzelne Schritte mit Schrittmotor



Timotor11
12.09.2009, 17:16
Hallo, ich hoffe ihr könnt mir weiterhelfen:)


Ich habe ein RN-Mega8 Board mit einer RN-Step-Schaltung (L297,L298) zur Ansteuerung eins Sanyo Denki Schrittmotors.

Ich möchte nun mit Bascom einen einzelnen Schritt den der Motor machen soll Programmieren. Wenn ich aber sage, dass ein Pin auf High gehen soll, dann dreht sich der Motor die Ganze Zeit?!

Wie kann ich das ganz einfach umsetzen, dass ich einen ( zwei, drei) schritte machen kann?

Habe ich einen ganz einfachen Denkfehler?

Neutro
13.09.2009, 10:46
Am einfachsten ist es eine For- Next Schleife zu programmieren (Siehe Bascom Hilfe) die bei jedem Zyklus einen Ausgangsport Toggelt.
Für erste Versuche kann man ja die Schrittzahl Fest einprogrammieren, später kann man dann noch ein kleines Displaymenue einfügen das die Schrittzahl und Drehrichtung anzeigt und mit Tastern dann die Schrittzahl verstellen kann.
So bin ich jedenfalls mit Schrittmotoren angefangen.
So sieht dann das Hauptprogramm aus (Konfigurationen usw. habe ich hier weggelassen)
Do

While Pinc.0 = 0

For A = 1 To B Step 1
Locate 1 , 1
Lcd A;
If A < 10 Then
Locate 1 , 2
Lcd " "
End If
Waitms 100
Toggle Portd.7
Waitms 100
Toggle Portd.7

Next A

Wend


If Pinc.3 = 0 Then 'Änderung der Drehrichtung
Waitms 100
Toggle Portd.6
End If

If Portd.6 = 1 Then 'Anzeige der Drehrichtung
Locate 1 , 5
Lcd "links "
Else
Locate 1 , 5
Lcd "rechts"
End If

If Pinc.1 = 0 Then '+1 Schritt
Waitms 50
Incr B
End If

If Pinc.2 = 0 Then '-1 Schritt
Waitms 50
Decr B
End If

If B > 99 Then B = 0

If B < 10 Then
Locate 2 , 2
Lcd " "
End If

Lowerline

Lcd B

Loop

Timotor11
13.09.2009, 11:59
Hey!

Danke für den denkanstoß:) habs jetzt mal laufenlassen nur ist klappt da was nicht:
der Motor dreht bei deinem programm 100ms und macht dann 100ms pause. Das Drehen ist auch ziemlich ruckartig.

Was ich erstmal hinbekommen möchte ist, dass der Motor jede Sekunde einen Schritt macht.
Gut drehen tut sich der Motor bei folgendem Code:







$regfile = "m8def.dat"
$crystal = 3686400



Ddrd = &B11101000


Portd.5 = 0
Portd.3 = 1
Portd.7 = 0






Do


Portd.6 = 1
Waitms 1
Portd.6 = 0




Loop

Wie kriege ich nun einen schritt/sek hin? Kann ich auch mit Timern arbeiten? ist die Waitms-Methode nicht zu ungenau?

Neutro
13.09.2009, 17:23
Das der Motor "ruckelt" ist schon so gewollt in meinem Programm. Es ging ja in erster Linie darum zu sehen ob und in welcher Richtung der Motor dreht. Die Geschwindigkeit hängt natürlich von der Wartezeit in der For Next Schleife ab, je weniger Zeit desto schneller dreht der Motor. Willst du einen exakten Sek. Takt haben würde ich einen Externen Quarz nehmen und dessen Frequenz mit dem Timer entsprechend runerteilen. Wie das geht steht im WIKI beschrieben.

Timotor11
13.09.2009, 21:30
Ich denke ich weiß jetzt wo mein problem liegt:

Ich habe mal mit den timern ein bisschen rumgespielt. Bei meiner Frequenz von 3686400 HZ ,einer Teilung von 8 und einem Startwert von 200 bei Timer0 (8bit) müsste ich ja, wenn ich bei jedem Interrupt toggle auf eine Frequenz von 3686400/8/56/2 auf 4114,2 HZ kommen. Das entspricht im Vollschrittbetrieb( / 200) 20,5 U/sek. Ist das erstmal richtig gedacht?

Was ist jetzt aber wenn die High und Low phasen lange auseinanderliegen?
Ich habe mal folgendes getestet: Den Clock-Eingang einfach mal kurz an einen Pin gehalten, der auf High stand. Und was passierte? Der Motor ruckelte solange ich drangehalten habe so vor sich hin.
Sollte er nicht eigentlich EINEN schritt machen und gut ist?
Darum ist auch bei einer Frequenz von 1Hz folgendes zu sehen: der Motor läuft unrund eine sekunde und dann steht er wieder eine sekunde.

Ich erwarte aber, dass er nen schritt macht und dann eine sekunde wartet, wieder einen schritt usw...

Habe ich vllt was falsch angeschlossen oder woran kann das liegen?

BurningBen
13.09.2009, 22:22
Hmm, wie hoch ist deine Logikspannung? Bricht die vielleicht ein, und erzeugt dadurch kurzzeitig einen Lowpegel am clock-eingang?

Deine Erwartung das bei HIGH genau ein Schritt gemacht wird ist richtig.

Mal ganz blöd gefragt: Du hast aber schon einen Schrittmotor angeschlossen, oder :-)

Neutro
14.09.2009, 16:50
Eine andere Fehlerquelle könnte sein das die Betriebsspannung der Ansteuerung (µController) nicht von der Motorversorgungsspannung galv.
getrennt ist. E-Motoren verursachen schon z.T üble Störungen auf der Versorgungsspannung. Logikbausteine und Controller fangen dann leicht an die wildesten Sachen zu machen. Am besten man Trennt die 5V Versorgung per DC-DC Wandler oder versorgt alternativ mit Akku oder zweitem Netzteil.

Timotor11
14.09.2009, 17:58
Also ich versorge das RN-Mega8 Board mit 5V über das MysmartUSB.
Die RN-Step-Schaltung wird mit einem Computernetzteil, welches 12V 10A liefert bestromt. Die 12V werden umgewandelt in 5 Volt Logikspannung. Am Motor liegen 12V genau an.
Also ist generell die Überlegung richtig, dass wenn ich das ClockSignal an eine feste Spannung von 5Volt anlege, der Motor EINEN Schrit macht, egal wie lange die Clock leitung an 5volt anliegt?!
Geht sie dann wieder auf Low und wieder auf High macht der motor den nächsten Schritt, nicht wahr?!

Wenn dem so ist, dann spinnt die schaltung oder irgendwas ist falsch angeschlossen!

edit: wenn ich einen finger an die clock-leitung halte, dreht der motr auch

Neutro
15.09.2009, 18:37
Ja, der Motor sollte sich mit jedem Takt um einen Schritt weiterdrehen. Zum Testen einfach mal die Taktleitung mit einem 4,7K Widerstand auf GND legen. Dann mit der +5V Leitung kurz die Taktleitung berühren(am besten vorher den Taktgeber abklemmen um diesen nicht zu zerstören), nun sollte sich der Motor einen Schritt weiterdrehen.

Hast du dir mal im Downloadbereich die Datei
Schrittmotorkarte Protobed_StepM_297-298.pdf
Heruntergeladen? die ist wirklich super, danach habe ich auch mein Versuchsboard aufgebaut.

Timotor11
16.09.2009, 19:54
Hey!

Ja, na klar, die hab ich mir ja nachgebaut! Sieht halt alles sehr wirr aus auf der Platine. Deshalb liegt auch denke ich der Fehler dort. Es muss so sein! Ich habe jetzt zwar nochmal alles durchgecheckt aber nichts gefunden:(
Der Motor blockiert ja sogar wenn ich nichts aus die versorgungsspannung angeschlossen habe. Und das sollte er nicht!

Hast du vielleicht noch eine Platine rumliegen, die ich dann bestücken kann?:)

Neutro
17.09.2009, 17:09
Da muss ich dich enttäuschen, davon habe ich nur eine einzige geätzt....
Hast du deine Schaltung auch als gedruckte Schaltung aufgebaut oder auf Lochraster? Falls gedruckte Schaltung, einfach mal posten ich (und vielleicht auch andere) schau da gerne noch mal drüber.
Hast du vielleicht noch einen anderen Motor da, z.B aus einem alten Diskettenlaufwerk? Falls ja, versuch es doch noch mal damit. LAs Taktgenerator kannst du auch eine Einfache Kippstufe mit einem 40106 oder NE555 nehmen

LG
Neutro