-
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.
-
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
-
Hallo und Danke!
Hat mich etwas weiter gebracht eure Infos! :)
Hab mir alles (Treiber Spezi und Pwm Artikel in RN- Wissen) durchgelesen und gehe nochmal einen Schritt zurück.
Code:
$regfile = "M168def.dat"
$crystal = 16000000
$hwstack = 100
$swstack = 100
$framesize = 100
$baud = 9600
'Programmkonfiguration
'Port/Pin Konfiguration
Config Portb.1 = Output
Portb.1 Alias Pwm
'PWM Konfiguration
Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = clear Up , Prescale = 1
'(16000000/1) / (256*2) = 31250Hz = 31,25kHz
'Jetzt soll also ein Puls (Rechtecksignal) von 31kHz am Portb.1 ankommen
'Hauptprogramm
Do
Pwm = 128 'Compare1a = 128 also Tastverhältniss 50%
Loop
End
Alles richtig soweit für die Pwm eingegeben?
Wenn ja dann sollte jetzt ein Tastverhältniss von 50% eingestellt sein und damit ein gleichmäßiges Rechtecksignal.
Welcher Wert ist den nun aber für die Geschwindigkeit zuständig wenn das Tastverhältniss immer 50% sein soll?
Dachte das wäre Compare1a = 0 - 255?:confused:
Danke schon mal für die Infos!
p@
-
Die Frequenz des Rechtecksignals.
Wenn PWM vom Controller eine Festfrequenz nutzt kann man es nicht nutzen.
Dann muß man einen Rechteck-Signalgenerator programmierne der bis maximal 300kHz gehen darf.
-
....das ist ja gar-nicht-mal so einfach fürn ollen Mechaniker... :)
Dachte ich komm´ der Sache etwas näher. :(
Also keine Hardware PWM sondern einen Softwaresignalgenerator proggen?
...jetzt fange ich wieder an mit waitms? Könnt ihr mir bitte noch etwas auf die Sprünge helfen wie sowas in Bascom ausehen könnte?
Bin jetzt etwas verwirrt... :confused:
Oder muss man irgendwie den Prescale mit einer Variablen verknüpfen... :confused:
-
Da ich ja kein Bascom mache,
http://www.mikrocontroller.net/topic/152966
Da wird ein Frequenzgenerator mit Bascom programmiert.
Eventuell mal da im Code und in den Posts nach Hinweisen schauen.
Ein Timerrinterrupt der nach einer der Frquenz entsprechenden Zeit einen Ausgang toggelt sollte da gehen.
Dann bleibt zwichen den IRQs noch zeit für anderes.
-
Ok, danke für den Hinweis.
An die Bascom Progger:
Steuert jeder so "kompliziert" seinen Schrittmotor über einen Frequenzgenerator an?
Tja, dann muss ich nochmal back to the roots und mich einarbeiten...
Danke bis hier hin an euch beiden! :)
-
Habe grad mal die Suche bemüht.
Hier im Forum gabs das auch schon:
https://www.roboternetz.de/community...hteckgenerator
Eventuell mal einen der Poster kontaktieren.
-
...ok, also ich versuche als erstes mal nur einen Takt über den Timer1 an einem Pin zu erzeugen - den maximalen Takt (oder annähernd) für den den Leadshinetreiber.
Der Hersteller sagt ja von 0 - max. 300kHz...
Hier mal der Code:
Code:
$regfile = "M168def.dat"
$crystal = 16000000
$hwstack = 100
$swstack = 100
$framesize = 100
$baud = 9600
'Programmkonfiguration
'Timer konfigurieren
Config Timer1 = Timer
On Timer1 Frequenzerzeugung
Enable Timer1
Enable Interrupts
'16000000 (systemtakt ohne Prescaler) / 65535 (16Bit Timer) = 244Hz (kleinster Takt)
'Port/Pin Konfiguration
Config Portd.2 = Output
Portd.2 Alias Frequenzausgang
'Hauptprogramm
Do
!NOP
Loop
End
Frequenzerzeugung:
Timer1 = 55 '16000000/55=290909Hz ca.300kHz (der max. Takt für den Leadshintreiber)
Toggle Frequenzausgang
Return
....ähm, was sagt ihr? :confused: