Hallo zusammen Für eine Projektarbeit im Bereich FPGA/VHDL habe ich das Thema "DC Motor Ansteuerung mittels PWM" erhalten. Das Ziel wäre es, den DC Motor anhand eines PWM Signals auf verschiedenen Drehzahlen laufen zu lassen. Diese Drehzahlen werden mittels Kippschaltern auf dem Board ausgegeben. Ebenso wird die Drehrichtung anhand eines Kippschalters hin und her geschalten. Da ich aber nicht viel Erfahrung in diesem Bereich habe, stiess ich schnell auf Probleme. Zurzeit wäre ich froh wenn mir jemand helfen könnte, das entsprechende PWM Signal für die Drehzahl ausgeben kann an den Motor. Im Code ersichtlich habe ich die Signale speed und treshold definiert, ich denke irgendwie sollte es damit gehen aber die richtige Lösung habe ich noch nicht gefunden. Vielen Dank für eure Hilfe
Code als Bild ist so ziemlich die schlechteste Idee. Hänge es doch als .vhd hier an deinen Beitrag.
Und auch hier: use IEEE.numeric_std.all; use ieee.std_logic_unsigned.all; Verwende nur die obere Zeile der Beiden. Was für Ports sind das? PWM_Value : in integer range 0 to 255; PWM : out std_logic; Out2 : out std_logic); Also wofür sind die da und was ist daran angeschlossen?
scarabrutto schrieb: > hier das vhd file Seltsam formatiert. Warum rutscht der Zeilenanfang bei jedem if nochmal weiter rein? Das macht den Code irgendwie extrem unleserlich. Indention hilft, Klammereben zu erfassen. Das funktioniert nicht, wenn gleichwertige if-Abfragen immer weiter reinrutschen. Woher kommt PWM_Value? Wie wird der Wert eingegeben? Nimm keinen integer sondern nur std_logic(_vector) als Port, wenn du damit direkt auf Hardware rausgehst: PWM_Value : in integer range 0 to 255; Out2 ist auch irgendwie umständlich gemacht, weil er sowieso nur dem SW1 folgt. Das könntest du also auch einfach nebenläufig als Out2 <= SW0; schreiben... Gustl B. schrieb: > use IEEE.numeric_std.all; > use ieee.std_logic_unsigned.all; > Verwende nur die obere Zeile der Beiden. Lies dazu den Thread hier: Beitrag "IEEE.STD_LOGIC_ARITH.ALL obsolete" Und beachte besonders auch die Links darin. scarabrutto schrieb: > ich denke irgendwie sollte es damit gehen Der Simulator ist der VHDL-Debugger. Was sagt denn die Simulation deines Codes? Irgendwas tut sich ja schon... > aber die richtige Lösung habe ich noch nicht gefunden. Was ist denn die Aufgabe? Welche Taktfrequenz hat dein FPGA (das wird ja wohl was im 50..100MHz-Bereich sein)? Welche Taktfrequenz soll die PWM haben (wohl was im kHz-Bereich)? Oder kurz: welche Hardware hast du? > Da ich aber nicht viel Erfahrung in diesem Bereich habe, stiess ich > schnell auf Probleme. Hast du einfach mal mit der blinkenden LED angefangen? Natürlich auch erst mit der Simulation davon... http://www.lothar-miller.de/s9y/archives/80-Hello-World!.html
Danke für die Antwort >seltsam vormatiert Haben wir so beigebracht bekommen, sollte angeblich das lesen vereinfachen und verhindern dass kein end if vergessen geht. > out2, pwm Dies wären beide Ausgänge die an den Motor Driver gehen für je eine Drehrichtung. Als Motordriver wird ein L298-H Brückentreiber verwendet. > Aufgabe DC Motor mit 2 Drehrichtungen, verschiedene Drehzahlen mittels PWM Hardware: Terasic DE0 FPGA, L298-H Brückentreiber, 12V DC Motor Takt FPGA 50MHz, Takt PWM weiss ich nicht genau wie der zu wählen wäre. >Simulation Versuche ich im Moment noch zu erstellen mittels Modelsim Die Drehrichtungen konnte ich bereits erfolgreich ausgeben. Komme aber nicht weiter mit der PWM Ausgabe. PWM_Value hab ich aus einem Beispiel entnommen, soweit ich verstehe sollte hier der PWM Wert angegeben werden, mit welchem sich die Drehzahl ändern soll. Dies wäre die Idee mittels Kippschalter einen vordefinierten Wert zuzuweisen.
Wenn die PWM-Steuerung einen Nulldurchgang hat, kann man sowohl Drehzahl als auch die PWM-Vorgabe vorzeichenbehaftet betrachten. Gegebenenfalls vereinfacht sich die Logik, wenn man sich um die Richtung nicht mehr explizit kümmern muss. Das Vorzeichen der PWM könnte auch für einen separaten Umschalter ausgewertet werden. Ansonsten baut man unnötige Fallunterscheidungen ein, die die Mathematik von selbst liefert.
scarabrutto schrieb: > kt PWM weiss ich nicht genau wie der zu wählen wäre. Hoch genug, damit man einen glatten Wert bekommt und niedrig genug, damit die Brücke wenige Verluste hat. Braucht 2 Randbedingungen, nämlich die Filterwirkung des anlagen Zweigs Vollbrücke - Motorwicklung und die Schaltzeiten des Treibers, sowie gfs Wärmeentwicklung. Wahrscheinlich wird man das mit einigen 100kHz treiben.
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.