-         

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 11

Thema: Einzelne Schritte mit Schrittmotor

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    12.09.2009
    Beiträge
    5

    Einzelne Schritte mit Schrittmotor

    Anzeige

    Hallo, ich hoffe ihr könnt mir weiterhelfen


    Ich habe ein RN-Mega8 Board mit einer RN-Step-Schaltung (L297,L29 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?

  2. #2
    Erfahrener Benutzer Roboter Experte Avatar von Neutro
    Registriert seit
    28.10.2007
    Ort
    Ostfriesland
    Alter
    38
    Beiträge
    642
    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
    Jemand mit einer neuen Idee ist ein Spinner, bis er Erfolg hat.
    (Mark Twain)

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    12.09.2009
    Beiträge
    5
    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:

    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?

  4. #4
    Erfahrener Benutzer Roboter Experte Avatar von Neutro
    Registriert seit
    28.10.2007
    Ort
    Ostfriesland
    Alter
    38
    Beiträge
    642
    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.
    Jemand mit einer neuen Idee ist ein Spinner, bis er Erfolg hat.
    (Mark Twain)

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    12.09.2009
    Beiträge
    5
    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?

  6. #6
    Erfahrener Benutzer Roboter Genie Avatar von BurningBen
    Registriert seit
    02.09.2008
    Ort
    Darmstadt
    Alter
    26
    Beiträge
    842
    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

  7. #7
    Erfahrener Benutzer Roboter Experte Avatar von Neutro
    Registriert seit
    28.10.2007
    Ort
    Ostfriesland
    Alter
    38
    Beiträge
    642
    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.
    Jemand mit einer neuen Idee ist ein Spinner, bis er Erfolg hat.
    (Mark Twain)

  8. #8
    Neuer Benutzer Öfters hier
    Registriert seit
    12.09.2009
    Beiträge
    5
    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

  9. #9
    Erfahrener Benutzer Roboter Experte Avatar von Neutro
    Registriert seit
    28.10.2007
    Ort
    Ostfriesland
    Alter
    38
    Beiträge
    642
    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.
    Jemand mit einer neuen Idee ist ein Spinner, bis er Erfolg hat.
    (Mark Twain)

  10. #10
    Neuer Benutzer Öfters hier
    Registriert seit
    12.09.2009
    Beiträge
    5
    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?

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •