FPGA Motorregelung (Positionsregelung)

OP #1464132
Lesenswert?
• ▲
▼
Hallo,

folgendes Problem:
Ich habe eine FPGA-Karte von MESA, genauer gesagt die 7i43. Diese hat 
einen Xilinx Spartan 3 (XC3S200) mit 200kB drauf.
MESA stellt für diese Karte eine Konfiguration zur Verfügung, mit der 
eine Motorregelung für AC, DC, Schrittmotoren und BLDC-Motoren 
realisiert werden kann.

Das ganze funktioniert auch tadellos, die Karte kann über USB mit dem PC 
kommunizieren und den Motor drehen und positionieren wie es einem 
beliebt.
Der Spaß funktioniert auch als Stand-Alone-Version, man kann dabei s.g. 
EVENTs einspielen und somit z.b. den Motor über einen Taster mit einer 
konst Drehzahl drehen lassen oder den Servo positionieren...

Ich brauche jedoch eine Konfiguration, bei der ich mit 
Takt-/Richtungs-Signalen den Servo positionieren kann.
Grundsätzlich brauche ich den ganzen Schnick-Schnack der 
FPGA-Konfiguration nicht, ich muss nur den Positionszeiger 
inkrementieren oder dekrementieren.

Ich lerne deswegen gerade VHDL und verstehe auch schon die Grundzüge, 
jedoch blicke ich bei dem Umfangreichen Programm noch nicht so richtig 
durch.

Da das ganze Dummerweise auch noch über USB angesprochen wird (mittels 
FT245-Chip), wirds noch ein wenig komplizierter im VHDL File.

Ich hab mal die Dateien angehängt, vllt. kann mir jemand helfen...

Wie gesagt, es muss nur ein Signale zum De-/Inkrementieren des 
Positionszeigers eingebaut werden, diese Signale werden natürlich von 
zwei Eingangs-Pins geliefert. (Takt- und Richtungssignal)

Gruß Daniel
Angehängte Dateien:
OP #1464308
Lesenswert?
• ▲
▼
Harry schrieb:
> Und was willst du jetzt von uns ? Sollen wir relevante Teile im Code
> raussuchen oder was ?
>

Das wäre natürlich perfekt wenn jemand die Codestelle findet wo der 
Positionszeiger beschrieben wird.

Jedoch wäre es auch schon hilfreich wenn mir ein erfahrener 
VHDL-Programmierer die Zusammenhänge und Funktion der einzelnen Dateien 
ein wenig beschreiben könnte.
Einen kleinen Teil zu ändern bringt ja nichts, wenn nachher das 
Gesamtkonstrukt nicht mehr funktioniert.

Bei den mehr als 40 Dateien ist es als Anfänger eher schwierig einen 
Überblick zu bekommen...
Gast #1464912
Lesenswert?
• ▲
▼
>Bei den mehr als 40 Dateien ist es als Anfänger eher schwierig einen
>Überblick zu bekommen...

Glaubst du denn wirklich, dass Leute hier im Forum Zeit finden können 
und wollen, sich so viele Dateien anzuschauen ?

Du solltest dich zunächst einmal in Eigenregie mit dem dir vorliegenden 
VHDL-Design beschäftigen und dir einen Überblick verschaffen.

Es könnte durchaus helfen, ein Blockschaltbild zu erstellen, das
grobe Funktionsblöcke identifiziert. Dieses könntest du dann nach und 
nach verfeinern. Beim Verständnis einzelner Module/Strukturen kann dir 
dann mit Sicherheit hier geholfen werden. Abgesehen davon gibt es doch 
eine Art Funktionsbeschreibung des VHDL-Designs oder ?

Alternative: Eigenes Design ist oftmals einfacher als Re-Engineering 
eines fremden Designs.


VG,
SuperWilly
Gast #1464924
Lesenswert?
• ▲
▼
>Bei den mehr als 40 Dateien ist es als Anfänger eher schwierig einen
>Überblick zu bekommen...

Es ist außerdem schwierig, einen Überblick zu bekommen, wenn man in den
Dateien sogut wie keine Kommentare findet ...

SuperWilly
OP #1464984
Lesenswert?
• ▲
▼
Die Karte hat die Bezeichnung 7i43 und stammt von MESA. 
(www.mesanet.com)
Auf der Homepage gibt es eine Beschreibung der SoftDMC-Firmware, mit 
dieser kann zumindest die Funktionsweise ein wenig nachvollzogen werden.

http://www.mesanet.com/pdf/motion/softdmc.pdf

Ich hab mir schon mal einige Seiten ausgedruckt und versuche nun die 
Zusammenhänge zu verstehen.
Jedoch hab ich noch nicht einmal selbst ein VHDL-Projekt programmiert, 
somit komm ich nur sehr langsam vorran...
Gast #1465185
Lesenswert?
• ▲
▼
>d.h. selbst wenn ich den Ausschnitt bzw. die Signale finde, welche ich
>Bearbeiten will, kann ich den Code garnicht compilieren!?

richtig. Hast du nur die Quelldatein oder noch irgendein Projektfile?
Gast #1465203
Lesenswert?
• ▲
▼
ich hab mal reingeschaut. Ist wirklich eine soft-cpu drin. Nennt sich 
sweet16. Ein 16Bit Prozessor... Der ist in der Datei sw16qp.vhd 
vollständig beschrieben. Die Befehle dafür scheinen "hard-coded" in dem 
eigentlichen motioncontroller softdmc.vhd zu sein. Ich schaus mir am 
Wochenende nochmal genau an.

Danke für die Inspiration, an sowas arbeite ich auch gerade :-)
Moderator (Firma: Titel) Persönliche Seite #1465232
Lesenswert?
• ▲
▼
> Die Befehle dafür scheinen "hard-coded" in dem
> eigentlichen motioncontroller softdmc.vhd zu sein.
Nein, der Programmcode für den Regler ist abhängig vom Motortyp in den 
Dateien ph1rom.vhd, ph2rom.vhd und ph3rom.vhd (CPU -> iabus -> ia -> 
ProgROM)

Zur Anpassung ist also der ursprüngliche Sourcecode und ein Assembler 
für den Softcore nötig.
OP #1465251
Lesenswert?
• ▲
▼
> Zur Anpassung ist also der ursprüngliche Sourcecode und ein Assembler
> für den Softcore nötig.

Der Softcore muss für meinen Anwendungszwecks aber ja garnicht angepasst 
werden. Der Regelkreis selbst ist ja wie jetzt schon bekannt im Softcore 
realisiert. Dem Softcore werden wahrscheinlich Ist-Position und 
Soll-Position übergeben und dieser Regelt dann mit den eingestellten 
Regelparametern.

Der Soll-Wert kann über das Terminal-Programm ja ganz einfach 
inkrementiert werden. Dies möchte ich aber durch ein externes 
Signal-ermöglichen...

Das Projekt ist für den Einstieg in die FPGA-Programmierung doch ein 
wenig zu heftig.
Falls mir da jemand helfen könnte würde ich auch kostenlos eine 
Testumgebung zur Verfügung stellen, also ein 7i43-Board mit Endstufe und 
Servo!
OP #1465516
Lesenswert?
• ▲
▼
Ein Monat ist mindestens noch Zeit bis es benötigt wird, wenn 
überhaupt...

Ich möchte an dieser Stelle auch mal den Anwendungszweck erläutern:

Die bei (älteren) CNC Maschinen eingesetzten Endstufen sind 
grundsätzlich nur Drehzahlregler, die Positionsregelung übernahm früher 
die CNC Steuerung.

Da ich jetzt eine neue CNC Steuerung einbauen möchte, welche 
Takt-Richtungs-Signale ausgibt - und somit der Endstufe die 
Positions-Regelung überlässt - müssten auch die Endstufen getauscht 
werden.

Da Endstufen für AC Servos nicht gerade billig zu haben sind, wäre es 
wünschenswert die alten und funktionstüchtigen Drehzahlregler zu nutzen. 
Dafür wird jedoch ein Positionsregler benötigt, der die Encoder 
auswertet und die AC-Endstufen ansteuert (+/-10V).

MESA hat genau die Hardware die benötigt wird, die 7i43 (FPGA-Karte) und 
die 7i33 (4-fach Servo-Interface: PWM zu +/-10V).
In Verbidung mit der SoftDMC-Firmware mit der DC-Motoren Konfiguration 
könnten somit 4 Achsen Problemlos angesteuert werden.

Problem ist wie bereits erwähnt, dass die Soll-Position nur über das 
Terminalprogramm gesetzt werden kann.

Das Manual der SoftDMC habe ich auch schon gründlich studiert, darin 
steht, dass EVENTS in den FPGA hochgeladen werden können. EVENTS können 
Parameter, Flags und Register manipulieren (addieren, subtrahieren, XOR, 
OR, ...) und auf Hardware-Pin-Signale reagieren. Ein paar dieser Events 
könnten natürlich den selben Effekt haben, jedoch würde hier mit Kanonen 
auf Spatzen geschossen. (siehe auch 
http://www.mesanet.com/pdf/motion/softdmc.pdf )

Die Events haben sicherlich eine gewisse Abarbeitungszeit und wenn mit 
einer Taktfrequenz von mehr als 500kHz die Achse bewegt werden soll ist 
es fraglich ob wirklich jeder Takt ein Inkrement des Positionszeigers 
verursacht. (500kHz entspricht 30m/min bei 1µm Auflösung)

Eine direkte Manipulation des Positionszeigers wäre also wünschenswert, 
wenn nicht sogar die einzig sinnvolle Lösung.

Wenn es also für dich ("ich") interesant klingt und machbar erscheint, 
dann würde ich dir ein Entwicklungs-Paket zukommen lassen. Falls es dir 
gelingt kannst du es als Belohnung behalten!
Gast #1465589
Lesenswert?
• ▲
▼
EMC2 hab ich schon benutzt, ist bei Hobby-Spielereien ganz nett, nur 
kannst du ein CNC Bearbeitungszentrum damit nicht mehr verkaufen und der 
Aufwand für den Retrofit ist weitaus größer.
Deswegen wird eine industrielle Steuerung benutztz, die mit den 
aktuellen Endstufen leider nicht kompatibel ist...
#1466322
Lesenswert?
• ▲
▼
Debugging sollte schon zu Projektbeginn eingeplant worden sein. Je 
komplexer ein Projekt, desto mehr Debugkonzepte muss man eingbaut haben. 
Dynamische Projekte, wie eine Regelung debugt man am besten, indem man 
zB einen 8 kanal 8 bit DAC an das FPGA anhaengt und mit gewaehlten 
Parametern aus dem Projekt versorgt. Dann kann man diese Werte in 
Echtzeit mit einem Scope verfolgen.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren