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
Und was willst du jetzt von uns ? Sollen wir relevante Teile im Code raussuchen oder was ? Harry
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...
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!
> wo bekommt man ise 6 her ?
Xilinx -> Downloads -> ISE-Classics
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!
>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
Hallo. Klingt sehr interessant. Welche Karte ist das genau? Spontan konnte ich dort nichts finden
>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
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...
> 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.
d.h. selbst wenn ich den Ausschnitt bzw. die Signale finde, welche ich Bearbeiten will, kann ich den Code garnicht compilieren!?
>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?
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)
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 :-)
> 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.
>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
> 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!
>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?
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!
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...
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.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.