Eine gemeinsame Masse braucht es schon.
Wenn der GND vom Atmega z.B. 2V niedriger liegt wie der GND vom Motortreiber, wird dieser bei 5V niemals ein High Signal bekommen, da das ja mehr wie 3,7V braucht.
Eine gemeinsame Masse braucht es schon.
Wenn der GND vom Atmega z.B. 2V niedriger liegt wie der GND vom Motortreiber, wird dieser bei 5V niemals ein High Signal bekommen, da das ja mehr wie 3,7V braucht.
Ok, das war mir jetzt etwas zu schnell...
Habe ein Netzteil 48V für den Treiber und ein Netzteil 5V für den Atmega...
GND vom Atmega mit GND vom Treibernetzteil verbinden?
Ja, genau das.
Alle Masse bezogenen Signale müssen ein gemeinsames Bezugspotential (GND) haben sonst wird das nichts.
Nur differentielle Signale sind bezugslos. und nur durch die Spannungsdifferenz zwichen der positiven und der negativen Leitung definiert.
Wobei es egal ist ob so ein Signal dann symetrisch z.B. +15V - -15V ist oder +30V - 0V oder 0V - -30V ist, in allen Fällen ist die Differenz 30V.
Ein Massebezogenes Signal wie ein 5V Logikpegel, hat bei unterschiedlichen Bezugspotentialen an verschiedenen Schaltungsteilen halt nur da 5V wo das Bezugspotential genau 5V negativer als das Signal ist.
Stell es Dir vor wie ein Fluß der an verschiedenen Stellen unterschiedlich Tief ist (Ground). Der Wasserspiegel ist zwar von oben gesehen überall gleich, aber spätestens da wo ein Schiff auf Grund läuft, reicht die Wassertiefe (Signalpegel) nicht aus damit das Signal (Schiff) durch kommt.
Das Bespiel ist nicht richtig zutreffend und etwas blöd, aber was anderes ist mir auf die Schnelle nicht eingefallen.
Danke für deine Ausführung - macht Sinn!
Also mit diesem kleinen Code läuft der Motor schon mal...
Den Schrittmotor habe ich parallel an den Treiber angeschlossen. Ansonsten wie im Code zu sehen:Code:$regfile = "M168def.dat" $crystal = 16000000 $hwstack = 100 $swstack = 100 $framesize = 100 $baud = 9600 'Programmkonfiguration Config Portb.4 = Output Config Portc.1 = Output Config Portb.1 = Output Config Pind.4 = Input Puls Alias Portb.1 'Pul Puls = 0 Richtung Alias Portc.1 'Dir Richtung = 1 Freigabe Alias Portb.4 'Ena Freigabe = 1 S1 Alias Pind.4 'Taster S1 = 1 'Hauptprogramm Do If S1 = 0 Then Waitms 1 Puls = 0 Waitms 1 Puls = 1 Else Puls = 0 End If Loop End
PinB.4 = Freigabe (obwohl der Motor auch ohne diesen Anschluss läuft - warum?)
PinC.1 = Richtung (das klappt mit 1 = Linkslauf / 0 = Rechtslauf)
PinB.1 = Puls (die Frequenz die hier einfach über ein waitms erzeugt wird - hier 2ms => 500Hz => 0.5kHz richtig?)
PinD.4 = Taster S1 (die Frequenz soll erst erzeugt werden wenn Taster gedrückt wird)
Den Treiber habe ich so eingestellt:
Current RMS = 3A
Puls / Schritte = 400
400 Schritte finde ich recht wenig aber bei den anderen Einstellungen läuft er nur sehr viel langsamer - habt ihr irgendwelche Tipps dazu?
...und macht das denn überhaupt Sinn die Frequenz so zu erzeugen oder sollte man da besser eine PWM nutzen?
Der nächste Schritt wäre die Geschwindigkeit über ein Poti zu steuern - aber da hört es jetzt erstmal völlig auf bei mir...
Hab ja frei heute - ich probier mal rum!
Danke für deine Unterstützung i_make_it
- - - Aktualisiert - - -
...ok, hab mal ein wenig mit dem waitms gespielt - den 2. Wert durch 10 geteilt. Bei 400 Schritten läuft der Motor sehr viel schneller...
Wenn ich die Schrittweite am Treiber von 400 auf z.B. 6400 umstelle läuft der Motor entsprechend langsamer. Klar, er muss ja mehr Schritte bei gleicher Frequenz machen. Ok, dachte ich Frequenz nochmals erhöhen - aber bringt nix - Geschwindigkeit bleibt gleich. Wenn man es mit der Frequenz übertreibt z.B. 0,2ms (5kHz) dann steht der Motor und Summt nur laut...
...irgendwelche Ideen wie ich es besser machen könnte?
Greez,
p@
- - - Aktualisiert - - -
...hier mal der Code mit Schalter für Richtungswechsel...
Code:$regfile = "M168def.dat" $crystal = 16000000 $hwstack = 100 $swstack = 100 $framesize = 100 $baud = 9600 'Programmkonfiguration Config Portb.4 = Output Config Portc.1 = Output Config Portb.1 = Output Config Pind.4 = Input Config Pind.5 = Input Puls Alias Portb.1 'Pul Puls = 0 Richtung Alias Portc.1 'Dir Richtung = 1 Freigabe Alias Portb.4 'Ena Freigabe = 1 T1 Alias Pind.4 'Taster zum Frequenzerzeugen T1 = 1 S1 Alias Pind.5 'Schalter zum Richtungswechsel S1 = 1 'Hauptprogramm Do If T1 = 0 Then Waitms 1 Puls = 0 Waitms 0.1 Puls = 1 Else Puls = 0 End If If S1 = 1 Then Richtung = 1 Else Richtung = 0 End If Loop End
400 Pulse pro Umdrehung ist Halbschritt Betrieb.
Der Motor hat ja eine feste Schrittzahl pro Umdrehung im Vollschritt.
Üblicherweise 200 Schritte mit einem Schrittwinkel von 1,8° (ich habe jetzt nicht nach Deinem konkreten Stepper gesehen sondern nehme den Wert der am häufigsten vorkommt)
Im Handbuch:
http://www.leadshine.com/uploadfile/down/m542v2m.pdf
Auf Seite 5-7 findet sich der Anschluß von 4 -Draht , 6-Draht und 8-Draht Steppern.
Auf Seite 8 die Mikroschritt Einstellung basierend auf 1,8° Motoren.
Bei Halbschritt, wie Du es eingestellt hast, läuft der Motor am schnellsten.
Auf Seite 10 ist die Verdrahtung.
Nach dem Timing Diagramm auf Seite 11 ist ENA High aktive. Der Motor sollte also nicht laufen wenn der Controller Pin auf Low geht.
Da Du mit DIR arbeitest ist die linke Hälfte des Diagrams für Dich zutreffend.
Dort siehst Du auch die von mir genannte Notwendigkeit des gemeinsamen GND.
Ein low Signal wird von 0V bis 0,5V erkannt. Ein High Signal ab 3,5V aufwärts.
Auch das Timing siehst Du in dem Diagram.
Also DIR auf High, PUL auf High und ENA auf Low.
Wenn ENA auf High geht mindestens 5µs warten bis DIR auf Low gehen darf.
und wenn DIR den Pegel wechselt, mindestens 5µs warten bis Bei PUL ein Rechtecksignal anliegen darf.
Die PWM Frequenz darf von 0Hz bis maximal 300kHz gehen.
Die Austastung also auf 50% (genauso lang High wie Low)
und zwichen 2 Pegelwechseln müssen minimal 1,6667µs vergehen.
Das müssten die Grenzdaten sein.
Die alternative Ansteuerung die der Treiber kann wäre anstelle von PUL(s) und DIR(ection) mit Clockwise (CW) und Counter Clockwise (CCW) zu arbeiten.
Geändert von i_make_it (07.10.2016 um 13:08 Uhr)
Danke dir für die Infos! 👍 Klasse!
Jetzt muss ich nur noch mit meinen begrenzten Kenntnissen im proggen die passende Pwm erzeugen und aufpassen das ich beim umschalten der Richtung die nötigen Wartezeiten einhalte um den Motor nicht zu zerstören.... 😐
Ich fange morgen an die Pwm in den Griff zu bekommen. Danke nochmal! 👍
Gruß,
p@
Den Motor wirst du nicht zerstören, eher die Ansteuerung (Leistungshalbleiter) durch Kurzschluss.
Und der Eingang ist kein PWM Eingang sondern ein Puls Eingang. Bei PWM stellst du das Verhältnis zwischen Einschalt- und Ausschaltzeit ein. Das hat mit der Pulsfrequenz nichts zu tun. Am leichtesten ist es wenn du dir Diagramme anschaust.
MfG Hannes
Lesezeichen