mikrocontroller.net

Forum: FPGA, VHDL & Co. FPGA Motorregelung (Positionsregelung)


Autor: Daniel A. (insanity)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Harry (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Und was willst du jetzt von uns ? Sollen wir relevante Teile im Code 
raussuchen oder was ?

Harry

Autor: Daniel A. (insanity)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Gerald (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wieder ein Beispiel, wo der Herr Chef Geld sparen will und einen 
Anfänger eingestellt hat, der keine Ahnung hat und nun die Foren 
ausnuckelt. Früher hätte das nicht gegeben!

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> wo bekommt man ise 6 her ?
Xilinx -> Downloads -> ISE-Classics

Autor: Daniel A. (insanity)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
bekommt man hier nur blöde meldungen oder auch hilfe?

ich dachte das wäre ein forum??

nebenbei bemerkt, ich bin selbst der chef und nukkle keine mitarbeiter 
aus!

Autor: SuperWilly (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: ich (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo.
Klingt sehr interessant.
Welche Karte ist das genau? Spontan konnte ich dort nichts finden

Autor: SuperWilly (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Daniel A. (insanity)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> und versuche nun die Zusammenhänge zu verstehen.
Der VHDL-Code ist recht schwer verdaulich :-(
So wie es aussieht, ist die gesamte Regelung in einem Softcore-uC 
realisiert. Für den bräuchtest du also ebenfalls den Sourcecode und den 
Assembler/Compiler.

Autor: Daniel A. (insanity)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
d.h. selbst wenn ich den Ausschnitt bzw. die Signale finde, welche ich 
Bearbeiten will, kann ich den Code garnicht compilieren!?

Autor: ich (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Daniel A. (insanity)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
beim unten angeführten link sind alle konfigurationen inkl. der softdmc 
enthalten.

http://www.mesanet.com/software/parallel/7i43.zip

darin hab ich zwar ein ASM-File gefunden, jedoch ist das anscheinend nur 
für die USB-Anbindung. (Im Ordner ./7i43/Source/ASM)

Autor: ich (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 :-)

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: ich (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Zur Anpassung ist also der ursprüngliche Sourcecode und ein Assembler
>für den Softcore nötig.

Ich meine in dem oben genannten Link war das nötige Handwerkszeug drin

Autor: Daniel A. (insanity)
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: ich (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>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!

Wie sieht der zeitliche Rahmen aus?

Autor: Daniel A. (insanity)
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nimm halt EMC Linux..

Autor: Daniel (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Christian K. (christian-k)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Daniel.
Ich hab mich mal angemeldet. Ich bin "ich".
Ich halte das für machbar. Bevor ich dir jedoch endgültig zusage, schau 
ich mir das Material das du geschickt hast nochmal genau an. Ich werd 
dir dann morgen bescheit geben.

Autor: Zwölf Mal Acht (hacky)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.