Microstepping mit µC und L6208

Hallo zusammen,

ich versuche nun seit fast 2 Wochen, einen Schrittmotor im Microstepping zu betreiben…
Dabei handelt es sich um den Schrittmotor ST5918X1008-A von Nanotec.
Dieser wird mit einem Eval-Board des L6208 von STMicroelectronics GmbH angesteuert.
Der darauf verwendete Baustein L6208 wird im Halbschritt mit Fast Decay betrieben. Das Microstepping wird ja dann dadurch erreicht, dass man an den Pins für die Referenzspannung eine Sinuswelle anlegt, stimmt das soweit?
Hier noch das Datenblatt, sowie das Application Note zum Baustein: L6208
http://www.st.com/stonline/products/literature/ds/75… (Datenblatt)
http://www.st.com/stonline/products/literature/an/86… (Application Note)

Mein Problem ist nun, dass ich einen Sinus im Mikrocontroller programmiert habe, der aber kein „sauberer“ Sinus ist, sondern wie in folgendem Bild ausschaut:
http://img20.imageshack.us/i/img2646v.jpg/
Channel1: Sinus, der aus dem PWM- Signal des µC besteht und über ein R-C- Glied geht
Channel2: PWM- Signal zur Sinuserzeugung

Das R-C-Glied sieht wie folgt aus:
http://img239.imageshack.us/i/vref.jpg/

Meine Vermutung ist, dass das R-C-Glied die Sinuskurve nicht richtig glättet. Kann das sein?

Ein paar Worte noch zum µController:
Verwendet wird ein XC878 von Infineon. Die darin integriete Capture/Compare- Unit wurde so eingestellt, dass der als Zeitbasis verwendete CCT-Timer nach 20µs überläuft, was eine PWM-Signal-Frequenz von 50kHz zur Folge hat.
Der Capture/Compare-Wert wird in einem General Timer alle 1µs verändert.
Hier noch mein Quellcode, mit dem ich den Sinus mit 50 Werten im µController erzeuge.
if(counter == 49)
{
status = 0;
}
if(counter == 0)
{
status = 1;
}

if(status)
{
counter++;
}
else
{
counter–;
}

CCU_vLoadChannelCapCompRegister(0,sinvalue[counter]); //Erzeugt Sinuswelle an Channel0, in dem CapCom- Wert verändert wird

Anbei noch der Schaltplan des Eval-Boards mit dem L6208:
http://img516.imageshack.us/i/evalschematic.jpg/

Könnt ihr mir da weiter helfen?
Weiß leider wirklich nicht mehr weiter… :o(

Vielen vielen Dank für eure Antworten und die investierte Zeit!

Liebe Grüße,
Markus

Hi,

könntest du auch noch definieren, was eigentlich dein Problem ist? Dreht sich der Motor oder nicht?

Gruss Reinhard

Guten Tag,

Hallo zusammen,

mein Problem ist, dass der Motor sich zwar dreht, aber er stockt. Ich denke, das liegt an dem beschriebenen Problem mit der Sinusfunktion.
Das Hauptproblem ist aber, dass die Sinuswelle wie in dem Bild gezeigt nicht wirklich eine Sinusfunktion ist, sondern sehr „wellig“.
Ich hoffe, ihr versteht, was ich meine ;o)

LG,
Markus

RC-Glied glättet nicht richtig
Hallo Llemilian,

zunächst scheint Deine Vermutung richtig zu sein (wie anhand Deines Bildes zu sehen ist), dass das RC-Glied, welches dem PWM-Ausgang des Mikrocontrollers nachgeschaltet ist, die PWM-Signale nicht richtig glättet. Dies bedeutet, dass die RC-Zeitkonstante noch viel zu klein ist. Abhilfe: vergrößere die Zeitkonstante indem Du entweder den Kondensator oder den Widerstand solange vergrößerst, bis das Ausgangssignal keine Spikes mehr enthält, sondern wie ein sauberer, gleichgerichteter Sinus aussieht.

Hinweis zum Sinus-Signal:
1.) Das gewünschte Sinus-Signal darf nur aus positiven Sinus-Halbwellen bestehen, da der L6208 nur positive Referenzspannungen verarbeiten kann.
2.) Achte auf die richtige Frequenz des Sinus.
3.) Du benötigst natürlich zwei gleichgerichtete Sinus-Signale - pro Phase eines, also brauchst Du auch 2 PWM-Ausgänge an Deinem Mikrocontroller.
4.) Die Sinus-Signale müssen um 90° phasenverschoben sein.

Hier ein Auszug aus dem Application-Datenblatt:
„For microstepping, the two inputs are rectified sine-wave voltages with a phase delay of 90°. The L6208 is operated in the normal drive mode and the frequency of the two sine-wave voltages must be 1/4 of the CLOCK frequency.“

Wenn Du die obigen Punkte zum Sinus-Signal erfüllt hast, wird es auch keine Aussetzer mehr geben. Im Leerlauf darf der Schrittmotor bei Microstep von Haus aus keine Aussetzer (Schrittverluste) haben, es sei denn der Phasenstrom, bzw. das erzeugte Drehmoment ist so gering, dass es zur Überwindung der Lagerreibung nicht mehr ausreicht.

Viel Erfolg!

Gruß, Alexander

Hallo,

dein Schaltbild des Evalboards ist kaum lesbar, aber nach allem was ich sonst gesehen habe bist du womöglich auf einer ganz falschen Dampferfahrt:

du brauchst für den Motor einen bipolaren Sinus, also eine positive und eine negative Halbwelle - wo bitte schaltest du die Polarität um?

Ich benutze einen Prozessor mit völlig andere logischer Anordnung: der Steppermotorcontroller schaltet die Motorwindungen in einer H-Brücke um, jeweils für 2 Schritte positiv und für 2 Schritte negativ. Für den Microschrittbetrieb muss man das weiter unterteilen und jeweils für einen Schritt einen 90 Grad ansteigenden und für den folgenden 90 Grad absteigenden Sinus als Ref verwenden, beim Nulldurchgang erfolgt dann die Umpolung. Im Endeffekt liegen dann am Ref-Eingang positive Sinushalbwellen an synchron zu den Umschaltimpulsen.

Ich verwende dazu einen Prozessor hoher Geschwindigkeit (einen RISC-PIC) mit einer Taktung mit einem Vielfachen der Schrittfrequenz, z.B. 32 fach. Bei den Takten 0…31 eines Schrittes wird dazu aus einer Tabelle der passende Sinuswert ausgegeben (bei mir 5 bit digital, aber das ist egal), daher sind Sinus und Polarität immer synchron. Das ganze natürlich nochmal um 90 Grad versetzt für die 2 Wicklung.

Gruss Reinhard

Hallo,

eine PWM gibts natürlich auch noch, die ist aber nachgeordnet und läuft mit erheblich höherer Frequenz als der Schrittbetrieb (wie sollte sie auch sonst funktionieren). Sie steckt bei mir im Stepper Motor Controller.

Irgendwie sieht dein Aufbau logisch ganz anders aus.

Gruss Reinhard