Hallo Ich möchte eine PWM mit Phasenverschiebung machen (ansteuerung einer Vollbrücke) dazu möchte ich in VHLD das einstrechende Programm schreiben. Das Problem ist, dass ich ein Anfänger auf dem Gebiet bin. Kann mir jemand Tipps für gute Literaur geben?
Wie wäre es mit dem PWM-Core? Oder zwei klitzekleinen Zählern? "d.c" = Z1 : Z2 wobei Z1+Z2 = Periode.
Ja es klingt nicht schlecht. Ich bin gerade dabei mich in VHDL einzuarbeiten. Weiß noch nicht genau was sich einfacher realisieren lässt. Was meinst du mit PWM-Core?
Xilinx hat doch einen PWM-Generator als Core im -> "Coregen", oder täusche ich micht da? (Irgendwo hatte ich den gesehen). Was Du machen musst ist aber eigentich nur dies : Anhand der Sollvorgabe das PWM-Verhältnis errechnen und dann zwei Zählerwerte setzen, die abgearbeitet werden.
PWM ist nichts anderes, als ein Zähler. Etwas sowas: signal cnt : integer range 0 to 64; signal PWM : std_logic; if rising_edge(clk) then if cnt<64 then cnt <= cnt + 1; else cnt <= 0; end if; if cnt < 16 then PWM <= '1'; else PWM <= '0'; end if; end if; p.s.: die Zahlen wurden willkürlich gewählt Kest
danke für den Code ich brauche allerdings eine Variable (2 Taster für das erhöhen bzw. herabsetzen der Variable ) um meine PWM "steuerbar" zu machen. Hast du eine ahnung wie ich eine schleife ablaufen lassen kann, die mir meine variable abhängig vom Eingang verändert und dann das PWM ausführt? das ganze in einer Schleife bis ich einen weiteren Taster fürs Anhalten betätige. Wenn du Ideeen hast bin ich dir sehr dankbar dafür. (In C wäre die Aufgabe kein Problem aber in VHDL bin ich ein blutiger Anfänger deswegen die Fragerei :-) )
Okay, etwas ausführlicher library bla bla bla use ... entity pwm_entity is port ( clk : in std_logic; Taste1 : in std_logic; Taste2 : in std_logic; pwm : out std_logic); end pwm_entity; architecture arch of pwm_entity is constant cMAX_PWM : integefr := 64; constant cMAX_PWM_RANGE : integefr := 32; signal cnt : integer range 0 to cMAX_PWM; signal pwm_range : integer range 0 to cMAX_PWM_RANGE; signal PWM : std_logic; begin process(clk) begin if clk = '1' and clk'event then -- PWM Counter if cnt < cMAX_PWM then cnt <= cnt + 1; else cnt <= 0; end if; -- PWM ausgeben if cnt < pwm_range then PWM <= '1'; else PWM <= '0'; end if; -- Tasten abfragen / Tastverhältnis verändern if Taste1 = '1' and pwm_range < cMAX_PWM_RANGE then pwm_range <= pwm_range + 1; elsif Taste2 = '1' and pwm_range > 0 then pwm_range <= pwm_range - 1; end if; end if; end process; ich übernehme keine Garantie, dass alles richtig ist. Aber so, oder so ähnlich funktioniert es Kest
Super Danke Dir. Ich arbeite mich gerade durch die Schleifen in einem VHDL Buch und werde gleich anfangen den Code von dir zu "überprüfen". Kannst du mir ein VHDL Buch oder andere Quelle für Einsteiger empfehlen
Was oft genannt wird ist "Hamburg VHDL Archive". Einfach mit Google suchen. Viel Spaß beim Stöbern! :-) Kest
Nachtrag zum PWM Core von offizieller Seite Hatte mir damals die Bücher für die Systemrealisierung(en) mit dem SOPC-Builder von Altera bestellt. Dort war unter anderem ein einfaches PWM beispiel angeführt, was aber mittlerweile nicht mehr zum download auf <www.altera.com/literature/quartus2/lit-qts-sopc.jsp> angeboten wird. Ich stelle es jedem interessierten Neuling hier mal rein, der sich noch dafür interessieren dürfte. Ich fand es als lehrreiches Beispiel um mit dem SOPC Builder erste eigene Komponenten 'zusammenzubasteln'. Der Originalcode ist aber in Verilog, sollte aber leicht auf VHDL modifiziert werden können.. liebe grüsse
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.