PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Schrittmotor: Wie viele Schritte pro Sekunde?



datatom
08.02.2012, 21:57
Hallo zusammen,

ich habe den Schrittmotortreiber A4983 http://www.shop.robotikhardware.de/shop/catalog/product_info.php?products_id=237 und möchte das dazugehörige Beispielprogramm http://www.robotikhardware.de/download/A4983POW.pdf für meinen Schrittmotor http://www.sparkfun.com/datasheets/Robotics/SM-42BYG011-25.pdf nutzen.

In dem Programm wird darauf hingewiesen, dass nicht jeder Schrittmotor diese Drehgeschwindigkeit verträgt. Woher weiß ich, ob mein Schrittmotor diese Drehgeschwindigkeit verträgt. Leider finde ich keine Hinweise.

Hat jemand einen Tipp?

Vielen Dank.

Grüße

datatom

ranke
09.02.2012, 07:17
Im Datenblatt ist eine Angabe zur Induktivität L und dem Widerstand R der Spulen gemacht. Die Einheit der Induktivität ist überraschenderweise in Megastunden (Mh), sicherlich hat der Verfasser des Datenblatts Millihenry (mH) gemeint.
Der Quotient von L/R ergibt die Zeitkonstante, das ist die Zeit, nach der der Strom nach Anlegen der Spannung auf etwa 63% des Maximalstroms gestiegen ist. Die Zeitkonstante errechnet sich bei den gegebenen Daten zu 1,35 ms, entsprechend einer Ansteuerfrequenz von 740 Hz.
Man kann annehmen, dass der Schrittmotor bei dieser Frequenz schon deutlich an Drehmoment verloren hat, weil der Maximalstrom nicht mehr erreicht werden kann. Damit sich der Strom schneller aufbaut kann man die Speisespannung erhöhen (also über 12V). Allerdings läuft man dann Gefahr, dass bei langsamen Drehzahlen der zulässige Strom überschritten wird. Man muss dann eine geeignete Strombegrenzung in der Ansteuerelektronik aufbauen. Der von Dir verlinkte Treiber bietet diese Möglichkeit.

datatom
09.02.2012, 07:39
Danke für die Antwort. Ich nehme an, dass ich durch die Ansteuerungsfrequenz die Drehgeschwindigkeit vorgebe?


Damit sich der Strom schneller aufbaut kann man die Speisespannung erhöhen (also über 12V). Allerdings läuft man dann Gefahr, dass bei langsamen Drehzahlen der zulässige Strom überschritten wird. Man muss dann eine geeignete Strombegrenzung in der Ansteuerelektronik aufbauen. Der von Dir verlinkte Treiber bietet diese Möglichkeit.

Kann im Moment aus der Doku nicht entnehmen, wie ich eine Strombegrenzung vornehmen kann.:(

Kann ich da noch einmal einen Tipp bekommen?

ranke
09.02.2012, 08:37
Ich nehme an, dass ich durch die Ansteuerungsfrequenz die Drehgeschwindigkeit vorgebe?

Der Motor hat einen Schrittwinkel von 1,8°, also 200 Schritte pro Umdrehung. Bei Ansteuerung mit 200 Hz dreht er also mit 1 Umdrehung pro Sekunde (oder 60 U/min).


Kann im Moment aus der Doku nicht entnehmen, wie ich eine Strombegrenzung vornehmen kann

Zitat aus der von Dir verlinkten Produktbeschreibung: "Der maximale Strom für den Schrittmotor wird über ein Poti (Regler) auf dem Modul fest eingestellt. Dadurch können nahezu alle bipolaren Schrittmotoren bis zu einer Stromstärke von 2A ansteuern. Die Nennspannung der Motoren ist in diesem Fall nahezu unerheblich, da sich diese durch die Stromregelung automatisch ergibt. Es ist nur wichtig, das die Nennspannung der Schrittmotoren unter der Motorspannung liegt, je deutlicher das der Fall ist, desto mehr Kraftreserven können im höheren Drehzahlbereich erreicht werden."

Es ist also ein Drehregler auf der Platine. Solange Du den Schrittmotor mit Spannungen bis 12V betreibst brauchst Du den nicht unbedingt weil der Widerstand der Wicklungen den Strom auf den maximal zulässigen Wert beschränkt. Bei höheren Spannungen wird es aber notwendig den Stromregler auf den für den Motor zulässigen Strom (330 mA) einzustellen.

H2R2
11.02.2012, 10:04
Bei schneller Ansteuerung gibt es die Möglichkeit die Schrittausführung durch einen Schrittmotor mit Encoder zu überprüfen. Dies ist die sicherste Methode und man kann bei höherer Auflösung auch kleinere Schritte machen. Falls kein Encoder eingebaut ist, kann man auch versuchen magnetische 1-Chip Encoder, wie z.B. den iC-MH8, mit einem Magnet auf der Achse nachzurüsten. Die Positionsrückkopplung ist dann absolut oder inkremental. Hier gibt es auch ein deutsches Datenblatt davon: http://www.ichaus.biz/product/iC-MH8 .

datatom
11.02.2012, 16:02
Zitat aus der von Dir verlinkten Produktbeschreibung: "Der maximale Strom für den Schrittmotor wird über ein Poti (Regler) auf dem Modul fest eingestellt. Dadurch können nahezu alle bipolaren Schrittmotoren bis zu einer Stromstärke von 2A ansteuern.

Bin mal wieder schwer von Begriff:confused:

Woher weiß ich den auf wieviel Volt der Poti eingestellt ist?

datatom
18.02.2012, 13:44
Wie ich den Poti einstelle, weiß ich mittlerweile:)

Jetzt nach den Hinweisen von euch noch einmal eine Verständnisfrage:

Wenn ich meinen Motor http://www.sparkfun.com/datasheets/Robotics/SM-42BYG011-25.pdf mit 12 V betreibe brauche ich den Poti nicht einstellen, sollte ich den Motor mit z.B. 35 V betreiben, das ist der Maxwert des Treiberboards http://www.pololu.com/catalog/product/1201 , muss ich den Poti so einstellen, dass der maximale Nennstrom des Motors 0.33 Ampere nicht übersteigt, stimmt das?

ranke
18.02.2012, 14:45
Ja, das würde ich als richtig erachten. Laut Datenblatt hat der Motor einen zulässigen Wicklungsstrom von 0,33A und einen Wicklungswiderstand von 34 Ohm. Schließt man 12V dauerhaft an eine Wicklung an, so ergibt sich gerade der zulässige Wicklungsstrom von 0,33 A (O.K., rechnerisch sind es 0,35A, aber im Treiber bleibt ja auch noch etwas Spannung hängen). Die Spannung von 12V ist also die Spannung, ab der man zum Schutz des Motors eine Strombegrenzung braucht, bei Spannungen unter 12V wird der zulässige Strom auch unter ungünstigen Verhältnissen (Blockade) nicht überschritten, eine zusätzliche Strombegrenzung ist deshalb nicht notwendig.

datatom
18.02.2012, 15:06
Ich verstehe allerdings nicht, warum ich an einem 12 V-Motor 35 V anschließen kann?

ranke
18.02.2012, 15:19
Die Spannung von 35 V ist kein Problem für den Motor. Problematisch ist der Strom, denn der erzeugt Wärme in den Wicklungen, daher darf der Strom nicht zu hoch werden. Würde man 35V ohne Strombegrenzung anlegen würde der Motor in manchen Betriebszuständen (z.B. wenn er nicht oder langsam dreht) zu heiss. Bei einem schnell drehenden Motor wird aber eine Gegenspannung induziert, deshalb sind da die 12V wieder viel zu niedrig und der Strom sinkt so stark ab, dass der Motor keine Kraft mehr hat. Um den Motor einigermaßen schnell drehen zu lassen braucht man also eine Betriebsspannung die größer ist als 12V. Daher nimmt man gerne eine höhere Spannung und begrenzt den Strom elektronisch auf den zulässigen Wert, so dass der Motor nicht zu heiss werden kann.

datatom
18.02.2012, 18:20
So, dann werde ich den Schrittmotor mal anklemmen. Allerdings stellt sich die Frage, welches Kabel auf welchen Pin? Der Schrittmotor hat die Kabelfarben gelb, rot, grün und blau. Hat jemand einen Tip? In den Dokus steht nichts.

Geistesblitz
18.02.2012, 23:49
Die Kabelfarben unterscheiden sich von Motor zu Motor erheblich und folgen keinem festen Schema. Musst du wohl oder übel durchmessen, welche Kabel miteinander verbunden sind. Da du 4 Kabel hast, ist der Motor mit Sicherheit bipolar und die Kabelpaare sollten sich so problemlos mit Widerstandsmessung herausfinden lassen.

datatom
19.02.2012, 07:12
Die Kabelpaare habe ich gefunden: Gelb und Blau, sowie Grün und Rot. Ich habe einfach mit dem Voltmeter getestet, bei welchen beiden Kabel ein Durchfluss war.

Wie messe ich den Wiederstand und was sagt mir das Ergebnis?

Geistesblitz
19.02.2012, 16:53
Mit Widerstandsmessung hätte man das auch herausfinden können, braucht man halt keine extra Spannungsquelle. Mit den Widerstandswerten kannst du auch nicht viel anfangen, da die ja nur statisch sind. Die dynamischen Anteile sollten überwiegen, lassen sich aber schlecht messen. Wichtig ist erstmal, die Spulen herausgeunden zu haben.

datatom
19.02.2012, 17:09
Wie find ich denn jetzt heraus welches Kabelpaar auf 1A und 1B und welches 2A und 2B kommt? Ich meine das ist egal, oder?

Würde folgendes gehen?

Erstes Paar:
Gelb auf 1A
Blau auf 1B

Zweites Paar:
Grün auf 2A
Rot auf 2B

RoboHolIC
19.02.2012, 17:34
Für die grundsätzliche Funktion ist nur entscheidend, daß du jede Wicklung an eine eigene H-Brücke anschließt und nix über Kreuz.
Die Drehrichtung kannst du umkehren jeweils durch umpolen !einer! Wicklung.
Werden beide Wicklungen umgepolt, dann ist das wie ein doppeltes Minus und hebt sich auf.

So wie du vorschlägst, ist es erstmal OK.

datatom
20.02.2012, 20:23
Ich habe jetzt sämtliche Kabelpositionen durchprobiert Gelb auf 1A, 1B, usw. , der Schrittmotor dreht sich nicht. Er zuckt jedesmal kurz, wenn ich den Strom einschalte.

Woran kann es liegen. Hier mein Programm. Gibts da evtl. einen Fehler?


' PWM Testprogram
'''''$prog , 255 , &B11011100,
$prog , 255 , &B11011001,
$regfile = "m2560def.dat"
$hwstack = 82 '80
$framesize = 68 ' 64
$swstack = 68 '44


$crystal = 16000000 'Quarzfrequenz
$baud = 19200


Config Pind.5 = Output
Led Alias Portd.5

Config Pinc.0 = Output ' Stiftleiste JP 2; Pin 3; PC0
Stepper1_reset Alias Portc.0

Config Pinc.1 = Output ' Stiftleiste JP 2; Pin 4; PC1
Stepper1_rotational_direction Alias Portc.1

Config Pinc.2 = Output ' Stiftleiste JP 2, Pin 5; PC2
Stepper1_enable Alias Pinc.2

Dim Stepper1_speed As Integer
Echo Off

' Bei dem Motortreiber 18V15 von Pololu liegt die PWM Frequenz (kHz) bei max. 40 kHz, siehe Doku des Motorboard auf Seite 3
' Formel zur kHz-Berechnung: Ausgangsfrequenz = (Quarzfrequenz/Prescale ) /(Timerauflösung*2)
' Quarzfrequenz = $crystal = 16000000
' Bei 16 Bit Timer: Prescale = 1, 8, 64, 256, 1024 für Timer1 Seite 164 der Doku für ATMEGA2560
' Bei 8 Bit Timer/ Counter2: Prescale = 1, 8, 32, 64, 128, 256 , 1024
' Timerauflösung = Bit, bzw. Pwm = 8, Bit ist dann 8. Mit dem Wert Bit wird die Zahl 2 hochgenommen => 2 hoch 8 = 256

' (16000000:1024):(256*2) = 30,517578125 kHz

' Timer1 ist ein 16 Bit Timer, wird in diesen Fall auf 8 Bit gesetzt.
'Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Up , Prescale = 1024 ' Stiftleiste JP 1; Pin 24
' (16000000:1024):(256*2) = 30,517578125 kHz
Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Up , Prescale = 1024 ' 3,814697265625 ' Stiftleiste JP 1; Pin 24

Timer1 = 16

Led = 0 ' LED einschalten

Stepper1_enable = 1 ' Stepper1 ausschalten
Wait 1
Stepper1_enable = 0 ' Stepper1 einschalten
Wait 1

Stepper1_reset = 1
Waitms 1
Stepper1_reset = 0
Waitms 1
Stepper1_reset = 1


Stepper1_rotational_direction = 1
Stepper1_speed = 100

Wait 5
'''''''''''''''''''''''''''''''''''''''''''''''''' ''''''''''''''''''''''''''''''
Do
Toggle Led
Waitms 250

' Der max. Wert von Compare1a liegt bei 2 hoch Bit-Wert => 2 hoch 8 = 256. Da ab 0 gezählt wird, ist der max. Wert für einen 8 Bit-Timer 255

Compare1a = Stepper1_speed ' Stiftleiste JP 1; Pin 24

Loop

'''''''''''''''''''''''''''''''''''''''''''''''''' ''''''''''''''''''''''''''''''
End

Geistesblitz
20.02.2012, 21:07
Was willst du überhaupt mit PWM? Der Schrittmotorcontroller reagiert nur auf steigende oder fallende Flanken (je nach Treiber), und die kommen bei PWM in der konstanten PWM-Frequenz. Du brauchst aber veränderliche Frequenz, da jeden Puls einen Schritt weiterbewegt wird. Piept der Motor denn? Sieht nämlich so aus, als ob die PWM-Frequenz so hoch ist, dass der Schrittmotor nicht hinterher kommt. Ich verwende zum Testen von Schrittmotortreibern gerne einen einfachen Inverter-Taktgeber (http://www.dieelektronikerseite.de/Lections/Taktgeber%20-%20Herzschrittmacher%20der%20Elektronik.htm), dessen Frequenz sich mit nem Poti verändern lässt und setz den an den Takteingang vom Treiber. An Richtung kann man dann einen Umschalter mit Anschlüssen nach H und L setzen.

datatom
21.02.2012, 11:33
Das mit dem Taktgeber wäre eine Alternative. Ich bin im Moment allerdings im Hotel und kann von hier aus nichts bestellen:-(

Ich habe das Programm geändert: PWM habe ich jetzt ausgebaut und anstelle einen Timer definiert.

Allerdings dreht sich nix. Ich habe alle möglichen Kabelpositionen mit den Kabelpaaren ausprobiert.

Folgende Pins habe ich an den Controller angeschlossen:
Dir
Step
Enable

VMOT
GND
2B
2A
1A
1B
VDD
GND

Hier noch einmal das geänderte Programm:


' Stepper Testprogram

$prog , 255 , &B11011001,
$regfile = "m2560def.dat"
$hwstack = 82 '80
$framesize = 68 ' 64
$swstack = 68 '44


$crystal = 16000000 'Quarzfrequenz
$baud = 19200


Config Pind.5 = Output
Led Alias Portd.5

Config Pinc.0 = Output ' Stiftleiste JP 2; Pin 3; PC0
Stepper1_reset Alias Portc.0

Config Pinc.1 = Output ' Stiftleiste JP 2; Pin 4; PC1
Stepper1_rotational_direction Alias Portc.1

Config Pinc.2 = Output ' Stiftleiste JP 2, Pin 5; PC2
Stepper1_enable Alias Pinc.2

Dim Stepper1_speed As Integer
Dim I1 As Integer

Echo Off

Led = 0 ' LED einschalten

Stepper1_enable = 1 ' Stepper1 off

I1 = 0

Do
Toggle Led
Waitms 75
I1 = I1 + 1
Loop Until I1 = 20

Wait 5

Stepper1_rotational_direction = 1

'''''''''''''''''''''''''''''''''''''''''''''''''' ''''''''''''''''''''''''''''''
Do
Toggle Led
Waitms 200

Stepper1_enable = 0 ' Stepper1 on

Config Timer0 = Timer , Prescale = 256 ' Stiftleiste JP 1; Pin 26
Timer0 = 131

Loop

'''''''''''''''''''''''''''''''''''''''''''''''''' ''''''''''''''''''''''''''''''
End

Ist das Programm so in Ordnung?

Vielen Dank.

Geistesblitz
21.02.2012, 12:10
Wenn ich das richtig sehe, wird nirgends der Timer definiert, nirgends eingeschaltet und nirgends die zugehörige Sub aufgerufen. Lies dir mal das hier (http://halvar.at/elektronik/kleiner_bascom_avr_kurs/timer_counter/) durch, dann wird dir hoffentlich klar, wie der Timer funktioniert.

datatom
21.02.2012, 21:29
So, ich hoffe der Timer0 ist jetzt in Ordnung;-)

Allerdings dreht sich der Schrittmotor immer noch nicht.

Wahrscheinlich ist die Frequenz zu hoch, sollte nach meinen Erkenntnissen z.Z. bei 62500 Hz liegen, oder? Laut einem Beitrag, ziemlich am Anfang meines Problems, sollte der Schrittmotor 200 Hz vertragen können, d.h. ich lasse den Timer0 von 62300 an zählen und habe somit eine Frequenz von 200 Hz. So meine Annahme, aber trotzdem dreht sich der Schrittmotor immer noch nichtL

Was läuft falsch?

Hier noch einmal das geänderte Programm:


' Stepper Testprogram

$prog , 255 , &B11011001,
$regfile = "m2560def.dat"
$hwstack = 82 '80
$framesize = 68 ' 64
$swstack = 68 '44


$crystal = 16000000 'Quarzfrequenz
$baud = 19200


Config Pind.5 = Output
Led Alias Portd.5

Config Pinc.0 = Output ' Stiftleiste JP 2; Pin 3; PC0
Stepper1_reset Alias Portc.0

Config Pinc.1 = Output ' Stiftleiste JP 2; Pin 4; PC1
Stepper1_direction Alias Portc.1

Config Pinc.2 = Output ' Stiftleiste JP 2, Pin 5; PC2
Stepper1_enable Alias Pinc.2

Config Pinc.3 = Output ' Stiftleiste JP 2, Pin 6; PC3
Stepper1_step Alias Pinc.3

Dim I1 As Integer


Echo Off

Led = 0 ' LED einschalten

Stepper1_enable = 1 ' Stepper1 off

I1 = 0

Do
Toggle Led
Waitms 75
I1 = I1 + 1
Loop Until I1 = 20

Wait 5

Stepper1_direction = 1
Stepper1_enable = 0 ' Stepper1 on

'''''''''''''''''''''''''''''''''''''''''''''''''' ''''''''''''''''''''''''''''''
Config Timer0 = Timer , Prescale = 256 ' Stiftleiste JP 1; Pin 26
Enable Timer0
On Timer0 Timer_irq
Enable Interrupts
Timer0 = 62300
'''''''''''''''''''''''''''''''''''''''''''''''''' ''''''''''''''''''''''''''''''


'''''''''''''''''''''''''''''''''''''''''''''''''' ''''''''''''''''''''''''''''''
Do
Toggle Led
Waitms 70
Loop

'''''''''''''''''''''''''''''''''''''''''''''''''' ''''''''''''''''''''''''''''''
End

'Dies ist der Programmteil, der in dem von ihnen gewählten
'Intervall aufgerufen wird
Timer_irq:
Timer0 = 62300.
Stepper1_step = 0 : Waitus 1 : Stepper1_step = 1
Return


Hat jemand einen Tipp?

Vielen Dank.

Geistesblitz
21.02.2012, 21:45
Ich glaub, da hast du was durcheinandergebracht.
Den Timer0 kannst du nur bis 255 einstellen, Timer1 geht bis 65535.
Wenn du dann den Timer auf 62300 stellst, zählt er von da an bis 65535 und läuft dann über. Macht 3236 Zeiteinheiten. Bei 16Mhz Taktfrequenz hast du eine Taktzeit von 0,0625µs, multipliziert mit dem Prescaler ist eine Zeiteinheit des Timers 16µs. 3236*16µs ergibt einen Takt von 51,776ms, ergo eine Frequenz von eta 19,3 Hz. Eigentlich müsste der Schrittmotor damit schon langsam laufen. Ich schätze mal, wenn du Timer1 verwendest, sollte das laufen, vorrausgesetzt natürlich, du hast den Treiber richtig angeschlossen ;)

datatom
21.02.2012, 22:00
Aha, gut. Dann stell ich morgen früh mal auf Timer1 um. Kannst du mir noch einmal erklären wie du auf folgende Werte kommst:
Taktzeit 0,0625µs
Zeiteinheit des Timers 16µs
von 51,776 ms auf 19,3 Hz

Vielen Dank für deine Mühe ;-)

Geistesblitz
21.02.2012, 22:21
Controllertakt: 16000000 Hz -> 1/Takt=0,0625 µs
0,0625 µs * 265 (Prescaler) = 16 µs
Alternativ kannst du auch den Controllertakt durch den Prescaler Teilen und dann das Reziproke daraus bilden, kommt aufs selbe hinaus.

1/51,776ms = 19,3 Hz

datatom
23.02.2012, 07:46
Vielen Dank!

Ich habe den Timer1 eingebaut und jeweils ein 20 Hz und 200 Hz starkes Signal erzeugt.

Leider dreht sich der Schrittmotor immer noch nicht :(

Hier noch einmal das Programm mit 200 Hz, ein Fehler erkenn ich nicht. Wenn ich an dem Ausgangspin Pin 6 eine LED anschließe blinkt sie wunderbar.



' Stepper Testprogram

$prog , 255 , &B11011001,
$regfile = "m2560def.dat"
$hwstack = 82 '80
$framesize = 68 ' 64
$swstack = 68 '44


$crystal = 16000000 'Quarzfrequenz
$baud = 19200


Config Pind.5 = Output
Led Alias Portd.5

Config Pinc.0 = Output ' Stiftleiste JP 2; Pin 3; PC0
Stepper1_reset Alias Portc.0

Config Pinc.1 = Output ' Stiftleiste JP 2; Pin 4; PC1
Stepper1_direction Alias Portc.1

Config Pinc.2 = Output ' Stiftleiste JP 2, Pin 5; PC2
Stepper1_enable Alias Pinc.2

Config Pinc.3 = Output ' Stiftleiste JP 2, Pin 6; PC3
Stepper1_step Alias Pinc.3

Dim I1 As Integer


Echo Off

Led = 0 ' LED einschalten

Stepper1_enable = 1 ' Stepper1 off

I1 = 0

Do
Toggle Led
Waitms 75
I1 = I1 + 1
Loop Until I1 = 20

Wait 5

Stepper1_direction = 1
Stepper1_enable = 0 ' Stepper1 on

'''''''''''''''''''''''''''''''''''''''''''''''''' ''''''''''''''''''''''''''''''
Config Timer1 = Timer , Prescale = 64 ' Stiftleiste JP 1; Pin 26
Enable Timer1
On Timer1 Timer_irq
Enable Interrupts
Timer1 = 64286
'''''''''''''''''''''''''''''''''''''''''''''''''' ''''''''''''''''''''''''''''''


'''''''''''''''''''''''''''''''''''''''''''''''''' ''''''''''''''''''''''''''''''
Do
Toggle Led
Waitms 200
Loop

'''''''''''''''''''''''''''''''''''''''''''''''''' ''''''''''''''''''''''''''''''
End

'Dies ist der Programmteil, der in dem von ihnen gewählten
'Intervall aufgerufen wird
Timer_irq:
Timer1 = 64286.
Stepper1_step = 0 : Waitus 1 : Stepper1_step = 1
Return


Sollte das Programm in Ordnung sein, kann der Fehler an folgender Stelle liegen:

Falsche Frequenz bei der Schrittmotoransteuerung
Falscher Kabelanschluss
Defekt beim Schrittmotor
Defekt beim Treiber

Hat jemand noch einmal eine Idee, vielleicht hat jemand den gleichen Schrittmotor?
Mercury Motor
SM-42BYG011-25
48/2011
http://www.sparkfun.com/products/9238

Geistesblitz
23.02.2012, 08:19
Hast du den Treiber schonmal getestet? Reicht ja ein einfacher Taktgeber für Step und ein Schalter für Direction. Dann kann man da schonmal die Fehler ausschließen.
Outputs werden übrigens so konfiguriert:
Config Portc.0 = Output
aber
Config Pinc.0 = Input
So kann man da zumindest nichts falsch machen.
Solche Sachen wie Stepper1_enable und Stepper1_reset würde ich erstmal auch aus dem Code nehmen, um es übersichtlicher zu halten. Zum Testen ist es dann meist einfacher, diese Anschlüsse mit Kabel auf High oder Low zu legen. Weißt du denn schon, welche Pegel an diesen Anschlüssen die Richtigen sind?
An der Frequenz kann es jedenfalls nicht liegen. Wäre die zu hoch, würde er zumindest Geräusche machen.
Ich kann wirklich nur raten, sich erstmal mit dem Treiber vertraut zu machen, bevor man mit dem µC da ran geht. Wenn man zu viel auf einmal macht, findet man die Stelle mit dem Problem nicht mehr so leicht. Musst versuchen, den Fehler systematisch einzukreisen.
Jetzt, wo ich es sehe: Pin 6 ist das Äquivalent zu Stepper1_step, richtig? Wenn der richtig umgeschaltet wird, kann das Problem schonmal nicht da liegen. Ich tippe mal auf Reset (kommt das im Code überhaupt irgendwo vor, außer in der Definition?) oder Enable. Oder mal ne ganz banale Frage: Am Treiber ist auch die Leistugsversorgung angeschlossen?

Hellmut
20.03.2012, 09:29
Übrigens, für wenig Geld gibt es die Platine StepRocker von Trinamic. Ich habe mich für Ics dieses deutschen fabless Herstellers entschieden. Mit der kostenlosen IDE kann man man sehr einfach testen, durch Eingabe der Schrittezahl. Lässt man also nur einen Schritt jeweils machen, so kann man die Pegel an den Leitungen zum Motor messen und so sehen ob man den Motor richtig versorgt. Die Platine ist so klein, dass ihr Einsatz auch als Alternative zu den Produkten von Robotikhardware.de gesehen werden kann, bzw. sollten die es ins Programm aufnehmen. Das Bauteil besitzt neben der Unterstützung von Mikroschritten auch Logik zur Erkennung von Schrittfehlern. Hier (http://www.conrad.de/ce/de/product/197949/Trinamic-stepRocker-Schrittmotorsteuerung-TMCM-1110-Betriebsspannung-12-24-VDC-Phasen-Strom-max-28-A-Anzahl-steuerbarer-Achsen-3-Schnittstellen-USB-RS485-CAN-nachruestbar)der Link bei Conrad.