Forum: FPGA, VHDL & Co. Schrittmotor Regelung mit FPGA und Inkrementalgeber


von Christian A. (noeppkes)


Lesenswert?

Hallo,

konnte leider zu meinem Thema nichts finden.
Es geht um folgendes:
Schrittmotorsteuerung mit Rampenfunktion im FPGA und als Rückmeldung ein 
Inkrementalgeber.

Nun ist mir nicht ganz klar wie ich die Regelstrecke aufbauen soll.
Was ich bisher habe ist ein uC, welcher mir schon einen Schrittmotor 
ansteuert (Takt, Richtung und das ganze interpolierend über bisher 3 
Achsen) per Interrupt. Das ganze schon einstellbar mit einer 
Rampenfunktion zur Beschleunigung des Motores.
Nun möchte ich das ganze in einen FPGA übertragen, was mir eigentlich 
nicht so schwer fallen sollte.
Das Problem ist nun die Regelung anhand der Rückgabe vom 
Inkrementalgeber.

1. Frage: Soll ich dies jeweils für jede Achse mit einem PID-Regler 
machen oder geht das auch einfacher indem ich dem Bresenham Algorithmus 
den Differenzwert übergebe.
2. Frage: Bekommt der evetuelle PID-Regeler den Takt, den auch der Motor 
sieht bei Hochrampen oder läuft der PID-Regler mit einem konstantem 
Takt.

Sofern schon jemand was in diese Richtung getan hat würde ich mich über 
Hilfe freuen.
Ist nicht gerade ein kleines Projekt, zumal das ganze noch auf mind. 4 
Achsen ausgebaut werden soll.

noeppkes ...

von Olaf (Gast)


Lesenswert?

> Schrittmotorsteuerung mit Rampenfunktion im FPGA und als
> Rückmeldung ein Inkrementalgeber.

Ich hasse es ja so boese Gegenfragen zu stellen, aber weisst du 
ueberhaubt was du da machen willst?

Man kann sicher auch einen Schrittmotor mit einem FPGA irgendwie regeln, 
aber tut da wirklich not?
Es gibt auch Anwendungen wo man einen Schrittmotor mit extra 
Inkrementalgebern verwendet, aber normalerweise ist das Unsinn.

> Das Problem ist nun die Regelung anhand der Rückgabe vom
> Inkrementalgeber.

Noe, das Problem ist das du noch garnicht erzaehlt hast was du da regeln 
willst. Ein Schrittmotor benoetigt weder einen Regler noch einen 
Inkrementalgeber. Du kannst dem einfach sagen mach 100Schritte nach 
links und dann macht er das. Und fuer bestimmte sicherheitskritische 
Anforderungen kann es dann Sinn machen diese Schritte mit dem 
Inkrementalgeber mitzuzaehlen und dann Alarm zu geben wenn der Motor 
nicht das macht was du ihm gesagt hast.

Ueberleg doch bitte mal alleine was passieren wird wenn dein 
Inkrementalgebe eine halbe Schrittweite deines Motors neben seinem 
Sollwert liegt.

> 2. Frage: Bekommt der evetuelle PID-Regeler den Takt, den auch
> der Motor sieht bei Hochrampen oder läuft der PID-Regler mit
> einem konstantem Takt.

Bis jetzt sehe ich noch nicht was du regeln willst. Aber wenn es 
wirklich einen Grund fuer einen PID-Regler gaebe dann haengt die 
Abtastzeit deines Reglers von deiner Strecke ab. Und wenn man wirklich 
einen PID-Regler in einem FPGA haben will dann braucht er natuerlich 
einen Takt als Arbeitstakt, aehnlich wie eine CPU ja auch einen Takt 
benoetigt. Es gibt aber keinen Zusammenhang mit der notwendigen 
Regelzeit.
Ich wuerde sogar sagen das die Zeiten eines Regler in den allermeisten 
Faellen so langsam sein werden das man nur ein FPGA nehmen wird wenn man 
es aus anderen Gruenden sowieso in der Schaltung hat.

Olaf

von Christian A. (noeppkes)


Lesenswert?

Hallo.
siehe zwischen den Zeilen.

Olaf schrieb:
>> Schrittmotorsteuerung mit Rampenfunktion im FPGA und als
>> Rückmeldung ein Inkrementalgeber.
>
> Ich hasse es ja so boese Gegenfragen zu stellen, aber weisst du
> ueberhaubt was du da machen willst?
>
> Man kann sicher auch einen Schrittmotor mit einem FPGA irgendwie regeln,
> aber tut da wirklich not?
> Es gibt auch Anwendungen wo man einen Schrittmotor mit extra
> Inkrementalgebern verwendet, aber normalerweise ist das Unsinn.

Fräsanlage steuern. Externer Controller für MACH3. Zuerst wird dieser 
Schrittmotoren ansteuern, später dann Servo-Motoren. Für die 
Servo-Motoren brauche ich den Inkrementalgeber und einen PID-Regler. Für 
die Schrittmotoren nicht unbedingt. Da hast du Recht. Man hat dann die 
Möglichkeit zu erkennen, wenn der Motor durch irgendwelche Gründe 
"hängt". Kleinere Schrittverluste könnte man dann ausgleichen. Ich 
vermute, dass hier die reine Abweichung in den Bresenham-Algorithmus 
eingerechnet funktionieren dürfte, so dass man sich bei Schrittmotoren 
den PID-Regler sparen und auf Differenzregelung gehen könnte.

>> Das Problem ist nun die Regelung anhand der Rückgabe vom
>> Inkrementalgeber.
>
> Noe, das Problem ist das du noch garnicht erzaehlt hast was du da regeln
> willst. Ein Schrittmotor benoetigt weder einen Regler noch einen
> Inkrementalgeber. Du kannst dem einfach sagen mach 100Schritte nach
> links und dann macht er das. Und fuer bestimmte sicherheitskritische
> Anforderungen kann es dann Sinn machen diese Schritte mit dem
> Inkrementalgeber mitzuzaehlen und dann Alarm zu geben wenn der Motor
> nicht das macht was du ihm gesagt hast.
>
> Ueberleg doch bitte mal alleine was passieren wird wenn dein
> Inkrementalgebe eine halbe Schrittweite deines Motors neben seinem
> Sollwert liegt.
>
Der Inkrementalgeber liegt nur daneben wenn ich ihn zu früh abfrage. 
Sofern ich diesen immer vor dem setzen des nächsten Schrittes abfrage, 
sollte es doch stimmen. Das hast du doch oben indirekt geschrieben.
> Man kann sicher auch einen Schrittmotor mit einem FPGA irgendwie regeln,
> aber tut da wirklich not?
Es gibt keine Abweicheung, sofern man keine Schritte verloren hat. (Eine 
gewisse Abweichung lässt sich ja auch kompensieren. (halber oder ganzer 
Schritt wie du schon so schön sagtest.)

>> 2. Frage: Bekommt der evetuelle PID-Regeler den Takt, den auch
>> der Motor sieht bei Hochrampen oder läuft der PID-Regler mit
>> einem konstantem Takt.
>
> Bis jetzt sehe ich noch nicht was du regeln willst. Aber wenn es
> wirklich einen Grund fuer einen PID-Regler gaebe dann haengt die
> Abtastzeit deines Reglers von deiner Strecke ab. Und wenn man wirklich
> einen PID-Regler in einem FPGA haben will dann braucht er natuerlich
> einen Takt als Arbeitstakt, aehnlich wie eine CPU ja auch einen Takt
> benoetigt. Es gibt aber keinen Zusammenhang mit der notwendigen
> Regelzeit.
> Ich wuerde sogar sagen das die Zeiten eines Regler in den allermeisten
> Faellen so langsam sein werden das man nur ein FPGA nehmen wird wenn man
> es aus anderen Gruenden sowieso in der Schaltung hat.
>

Es ist mir klar, dass der PID-Regler einen Takt braucht. Die Frage war 
nur welcher ?
Der takt von der Motoransteuerung (Drehzahltakt). D.h. jede 
Schrittänderung triggert auch den PID-Regler, bis dieser "auf Kurs" ist 
oder soll ich den Systemtakt nehmen, der konstant und ständig läuft ?

noeppkes ...


> Olaf

von Olaf (Gast)


Lesenswert?

> Fräsanlage steuern. Externer Controller für MACH3. Zuerst wird dieser
> Schrittmotoren ansteuern, später dann Servo-Motoren.

Beides hat aber doch garnichts miteinander zutun. Warum willst du also 
eine Aufgabe zweimal loesen? Die Steuerung einer Fraese mit 
Servo-Motoren stelle ich mir im uebrigen wirklich als grosse 
Herausforderung vor. Nicht unmoeglich, aber sehr schwierig weil du ja 
wirklich genau vorgegebene Kurven sehr genau abfahren musst. Viel Spass. 
:-)

> Für die Servo-Motoren brauche ich den Inkrementalgeber und
> einen PID-Regler.

Theoretisch waere es vermutlich moeglich einen Servomotor mit einem 
einzigen PID-Regler zu regeln, oder auch einem anderen viel 
komplizierterem Regler. In der Praxis ist das aber eher unueblich weil 
schwer beherschbar. Man nimmt da einen Kaskadenregler.
Da hast als erstes einen Stromregler laufen der den Strom durch deinen 
Servomotor regelt. Das macht man weil das was einem eigentlich als 
erstes einfallen wuerde, die Spannung zu regeln, stark nichtlinear ist. 
Das willst du in dem Regler auf keinen Fall haben. Ausserdem kannst du 
an dieser Stelle auch Grenzen festlegen. Also den Maximalstrom begrenzen 
falls mal wieder ein Doedel den Fraeser zu feste gegen das Werkstueck 
knallt.
Da drueber kannst du dann einen Geschwindigkeitsregler ueberlagern. Auch 
da  wirst du es zu schaetzen wissen wenn du die Geschwindigkeit 
festlegen kannst, weil die ja bei dir in der Praxis stark von Fraeser, 
Drehzahl und Material abhaengt. Dem ueberlagerst du dann einen 
Lageregler. Ich gehe mal davon aus das sich der Lageregler mit den 
anderen Lagereglern der anderen Achsen syncronisieren muss weil du sonst 
keine Schraegen oder Kreise fahren kannst. Und darueber kommt dann 
vermutlich noch ein Regler der beliebige Freiformen abfaehrt.

Klingt das einfach? Hast du den Eindruck das du da irgendwas fuer einen 
Schrittmotor zweitverwerten kannst? :-)

> Es ist mir klar, dass der PID-Regler einen Takt braucht. Die Frage war
> nur welcher ?

Die Regler brauchen eine gewisse zeitliche Aufloesung. Aber keinen Takt 
im eigentlich sinne. Ein Regler definiert sich normalerweise ueber seine 
Abtastzeit und die haengt von deiner Strecke ab. Also z.B welche Masse 
du da bewegst und welche Zeitkonstanten ein Motor hat. Aber ganz gewiss 
nicht vom Takt eines Schrittmotor. Da gibt es keinerlei Zusammenhang.
Der Regler in einem FPGA braeuchte hoechstens einen Takt damit er 
rechnen kann, und der kann beliebig schnell sein, da du die 
Rechenergebnisse spaeter mit der darueberliegenden Abtastzeit 
syncronisierst.

Jetzt noch der Grund warum ich einem FPGA kritisch gegenueber stehe. Bis 
zum Positionsregler ist ganze "relativ" einfach. Das kann auch ein 
normaler Microcontroller. Evenutell mit der Einschraenkung das er 
schnell genug sein muss den Encoder abzutasten. Man muss sich also 
VORHER ueberlegen wie schnell muss der Motor maximal laufen, welche 
Aufloesung brauche ich, welche Abtastfrequenz (Nyquist-Frequenz).
Fuer die letzte Stufe, da fehlt mir die Erfahrung, wuerde ich aber mal 
vermuten das man da etwas mehr Mathematik braucht. Da waere vielleicht 
ein DSP oder gar etwas mit Fliesskomma besser.

Auf jedenfall wirst du in interessanten Zeiten leben. :-D

Olaf

von noeppkes (Gast)


Lesenswert?

Hallo Olaf,

danke für deine Ausführungen.
Haben mir weitergehlofen.

noeppkes ...

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.