-
        

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

Thema: Takt-Generieren für Schrittmotoren ???

  1. #1

    Takt-Generieren für Schrittmotoren ???

    Anzeige

    Hallo,
    Ich habe ein Problem mit dem ansteuern eines Schrittmotors.

    Ich habe eine SMC800 Karte, habe diese mit der paralellen Schnittstelle verbunden und ein C++ Programm mit dem Borland_C++_Builder dazu geschrieben. Der motor dreht sich auch, sogar in beide Richtungen so wie ich es haben will.

    Nur:
    er ist viel zu langsam, er hat ungefähr nur 30 U/min.

    Allerdings:
    Jede Millisekunde (1ms) send ich an diese Karte 1 Byte.
    4 Byte werden benötigt um 1 Schritt durchzuführen.
    200 Schritte hat der Motor.

    Nach Adam Riese müsste er dan Trotzdem schneller laufen!!! oder nicht???

    Ich kann keine Zeiten unter 1 ms programmieren !!!

    Welche Lösungen gibt es also für dieses Problem ???

    An die L297/298 Steuerung hab ich auch schon gedacht, aber an die kann ich ja auch nicht unter 1 ms senden !!!

    Oder bin ich gedanklich einfach aufm Holzweg ????

    Im voraus vielen Dank !!!

  2. #2
    Administrator Robotik Einstein Avatar von Frank
    Registriert seit
    30.10.2003
    Beiträge
    4.955
    Blog-Einträge
    1
    Hi,

    warum braucht deine Platine 4 Byte für einen Schritt, wäre ungewöhnlich! Aber ich kenne die Karte nicht!. Ich glaube aber das du da ein Denkfehler machst - eigentlich müsste er sich doch bei jedem Byte ein Schritt bewegen.
    Dann müsste man es wohl so rechnen:

    Wenn du jede Millisekunde ein Takt gibst, dann wären 1000 Takte = Sek und 60.000 Takte 1 Minute .
    Wenn der Motor 200 Schritte pro Umdrehung benötigt, ergibt sich:
    60000 / 200=300
    Also dein Motor muss 300 Umdrehungen pro Minute machen.

    Das ist eigentlich schon recht schnell, zumindest für Bot´s, da man da ja Räder oft direkt dran befestigt.

    Und warum sollte man mit ein bisschen ASM-COde nicht noch höhere Taktraten hin bekommen? Allerdings wüsste ich nicht wozu man die beim Bot braucht?

    Gruß Frank

  3. #3
    Gast
    Hallo,
    erstmal vielen dank,

    Ich schicke der Platine folgendes über den Para-Port:

    ABCD
    1001 Byte 1
    1010 Byte 2
    0110 Byte 3
    0101 Byte 4

    Genau so werden nachher auch die Phasen angesteuert (denke ich).

    Das wären dann 1000 Bytes in der Sek=250 Takte x 60sec=15000 Takt/min.

    15000/200 Takt =75 U/min.

    Ich vermute dass mein Programm-Timer zu ungenau ist und nicht alle ms sendet , sondern alle 1,5-2 ms und somit die Drehzahl nur noch halb so gross ist.

    Wenn ich die L297/298 Schaltung baue und über die Para-Schnittstelle ansteuern will, ist dann jedes Byte 1 Schritt ???

    Könnte ich denn Takt auch von einem Quarz-Timer (Hardware) generieren lassen ??? Ist der dann Fest oder kann mann den noch verstellen ???

    Und warum sollte man mit ein bisschen ASM-COde nicht noch höhere Taktraten hin bekommen?
    Was ist das "ASM-Code" ??? Nie gehört !!!

  4. #4
    Super-Moderator Lebende Robotik Legende Avatar von Manf
    Registriert seit
    30.01.2004
    Ort
    München
    Alter
    63
    Beiträge
    12.222
    Wenn der Roboter nicht mit beliebig vielen Geschwindigkeiten laufen soll, dann könnte man ja eine oder ein paar feste Taktraten generieren und für eine einstellbare Zeit an die Schrittmotor-Steuerung durchschalten. Die Steuerung L297 kann gut eine Folge von n Takten in Schritte umsetzen. Weitere Signale wären dann vorwarts/rückwätrs, rechts/links an/aus, Geschwindigkeit 1,2,3,....
    Dazu gibt es doch schon einen Thread.
    Manfred
    (ASM- Code verwenden heißt in Assembler programmieren. )

  5. #5
    Gast
    Hi,

    also so ganz versteh ich deine Platine immer noch nicht. In einem Byte sind doch die kompletten Infos für eine Phasenstellung vorhanden, also müsste auch jedes Byte einen Schritt bewirken.
    Geb doch mal eine ganz langsame Schrittfolge 2 Sekundentakt oder so aus, dann kannst du alles mitzählen und überprüfen.

    Bei der L297/298 Schaltung ist jeder Takt ein Schritt, aber check nochmal ob das nicht doch bei dir auch so ist!

    Natürlich kann man den Takt akt anders generieren. Wenn es nicht so genau sein muss dann bekommt man das mit einem Logik IC wie 7413 und einem Kondensator hin. Die Schaltung hab ich immer zum testen von Schrittmotoren benutzt.

    Aber das wäre eigentlich Verschwendung des Schrittmotors. Beim Schittmotor ist es ja gerade das schöne das du gezielt eine ganz genaue Anzahl von Takten ausgeben kannst. Um beispielsweise einen Roboter um 90 Grad zu drehen braucht man je nach Radgröße eine festgelegte Zahl von Takten. Die Geschwindigkeit in der man die schickt ist eigentlich völlig egal - solange die Anzahl stimmt würde der Bot immer einen 90 Grad Winkel drehen. Teilt man die Anzahl der Takte durch 2 dann hat man den Wert für die 45 Grad Drehung usw. Man kann also den Bot in jedem Winkel genau drehen und bewegen, man muss nur die Taktzahl addieren.
    Das ganze würde man nicht mehr so genau hinbekommen wenn du einen Taktgenerator benutzt.

    Aber vermutlich willst du sowieso etwas anderes mit dem Schrittmotor machen. Für schnelle Flitzer und Rennbots ist ein Schrittmotor sowieso nicht sonderlich gut geeignet - da solltest du vielleicht dann doch ein normalen Getriebemotor denken.

    Beim Schrittmotor ist etwas Assemblercode oder zumindest compilierter Basic-Code wie mit AVR-Bascom empfehlenswert, da bekommt man schon recht flotte Taktraten hin. Timer braucht man noch nicht mal unbedingt.

    Gruß Frank

  6. #6
    In einem Byte sind doch die kompletten Infos für eine Phasenstellung vorhanden, also müsste auch jedes Byte einen Schritt bewirken.
    Ja aber ich dachte immer es sind 4 (??) Phasenstellungen nötig um den Anker einen Schritt zu bewegen.
    z.B.:

    Phase1 zieht // Phase2 drückt
    Phase1 zieht // Phase2 zieht
    Phase1 drückt // Phase 2 zieht
    Phase1 drückt // Phase 2 drückt

    Ich möchte damit vorerst mal eine Modell-CNC-Fräse ansteuern, die im Eilgang schon ein bisschen Speed haben sollte.

    Danach (in meinem nächsten Projekt) möchte ich dann einen Kettengetriebenen Robby bauen. (mit L297/298 Schaltung )

  7. #7
    Super-Moderator Lebende Robotik Legende Avatar von Manf
    Registriert seit
    30.01.2004
    Ort
    München
    Alter
    63
    Beiträge
    12.222
    Das sind vier Schritte.
    Eigentlich sind es die Zwischenschritte des Halbschrittverfahrens, wobei die Vollschrittpositionen, in der nur eine Spule akitv ist, weggelassen wurden. Laufen tut der Motor damit, nur auf die Definitionen mussen wir uns zur Diskussion einigen.
    Manfred

  8. #8
    Aha,
    versteh ich jetzt nicht ganz.....

    Was heisst das ganz genau,
    heisst das ich betreibe den motor nicht im "echten" Vollschrittbetrieb ???

    Vollschrittpositionen, in der nur eine Spule akitv ist
    heisst das ich muss immer nur 1 Spule anziehen lassen ???


    also

    Phase 1 ziehen
    Phase 2 ziehen

    usw....

    Bernd

  9. #9
    Super-Moderator Lebende Robotik Legende Avatar von Manf
    Registriert seit
    30.01.2004
    Ort
    München
    Alter
    63
    Beiträge
    12.222
    Es geht nicht um muß, er wird laufen.
    Gebaut ist er für den Lauf im Vollschrittberieb.
    ost, nord, west, süd,
    oder auf dem Papier:
    rechts, oben, links, unten,
    Das Haltemoment an den Positionen, mit nur einer aktiven Spule ist am größten. Demnach wird der Wirkungsgrad ein bischen besser sein, im Vollschrittbetrieb mit jeweils nur einer gleichzeitig aktiven Spule gegenüber jeweils zwei gleichzeitig aktiven Spulen.
    Manfred

  10. #10
    Administrator Robotik Einstein Avatar von Frank
    Registriert seit
    30.10.2003
    Beiträge
    4.955
    Blog-Einträge
    1
    So sehe ich es auch! Allerdings machst du trotzdem volle Schritte und das mit jedem Byte! Also kann das mit der geringen Umdrehungszahl die du genannt hast irgendwie nicht hin kommen. Somit muß dein Timer doch wohl erheblich langsamer sein.

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

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