Datum:
Hallo zusammen, Ich bekommem einen 8Bit Wert geliefert der sich zu jeder Zeit ändern kann. Aufgrund dieses Wertes soll die Leistung z.B. einer Led eines Lüfters oder was auch immer angepasst werden. Ich hab das schon mal mit einem festen Wert gemacht:
architecture Behavioral of blink is constant max_count : natural := 50000000; -- 50M um auf 50 Hz zu kommen signal count : natural range 0 to max_count; --der Zähler von 0 bis 50M begin blink : process (clk,a,b) --wird ausgeführt bei Änderung des Taktes, der beides Schalter begin if a = '1' and b = '0' then --wenn schalter a 1 ist und b 0, soll die LED mit 1Hz blinken if rising_edge (clk) then --rising_edge --> Bei Takt wird 1 count <= count+1; --count +1 if count < max_count/2 then --so lange count kleiner als 25M ist mach die LED an c <= '0'; elsif count > max_count/2 then --sobald >25M aus c <= '1'; elsif count > max_count then --wenn count 50M übersteigt dann wird der Zähler zurück gesetzt und es geht von vorn los count <= 0; end if; end if; end if; if a = '0' and b = '1' then --wenn b aktiviert ist wird die led um 50% gedimmt. c <= clk; end if; if (a = '1' and b='1') or (a='0' and b='0') then -- sont bleibt c aus c <= '1'; end if; end process blink; end Behavioral; |
jetzt hoffe ich dass ich das wieder so machen kann, es ändert sich ja eigendlich nur der max_count Wert (der bisher fest eingestellt ist). Nur binn ich momentan noch mit den gegebenen 8bit Wreten überfordert. Mein Ansatz:
constant max_count : std_logic_vector(7 downto 0) := PWM1FanInsideValue; signal count : std_logic_vector(7 downto 0) range "00000000" to max_count; |
So gehts nicht. geht das villeicht nur wenn ich den Binärwert zuvor in Dez umwandle? Danke schon mal :-)
Datum:
Florian M. schrieb: > begin > > > > if a = '1' and b = '0' then --wenn schalter a 1 ist und b 0, soll die LED mit 1Hz blinken > > if rising_edge (clk) then bitte das IF hinter den rising-Konstrukt
Datum:
Ich habe den Eindruck, dass da was ganz einfaches ziemlich kompliziert umgesetzt werden soll... Und dieser "kombinatorischgetaktetkombinierte" Prozess ist da nur die Spitze des Eisbergs. Eine PWM braucht idR zwei Zähler und einen Komparator: einen Zähler zum Herunterzeilen des Quarztaktes und einen PWM-Zähler, der dann zusammen mit einem Vergleicher das PWM-Signal macht. BTW: Was hast du für einen Quarz, wenn dessen Frequenz geteilt durch 50 Millionen immer noch 50 Hz ergibt? BTW2: Ein Zähler von 0 bis 50000000 zählt 50000001 Takte!
Datum:
Was du brauchst ist einen Counter mit n Bits und Overflow, einen Comperator mit n Bits un "kleiner als" Output, 2 Register mit enable und Takteingang, sowie inputs laden des registers, das 2. Register wir jeweils beim Overflow neu aus dem ersten geladen damit keine Glitches etstehen, der Comperator vergleicht Counter und das 2. Register und gibt einen Output bei "Counter < Register 2" auf High. Nun wäre noch ein Prescaler für den Counter angebracht. Man könnte mit ein paar weiteren Gattern und FlipFlops noch weitere PWM-Modi implementieren. Zeichne dir das mal auf und poste es hier. Dann versuchst du daraus ein VHDL zu machen und guckst dir das Ergebnis mal auf RTL an. ( oder RTL2 =:) ).
Datum:
Lothar Miller schrieb: > Und dieser "kombinatorischgetaktetkombinierte" Prozess ist da nur die > > Spitze des Eisbergs. Aber ein schicker :-) Eine solche schnell ändernde PWM geht am Besten nach dem Delta-Sigma-Prinzip.
Datum:
Was soll sich denn da schnell ändern sollen? Zeig doch mal ein Beispiel für die Delta-Sigma PWM. BTW: im Quelltext oben ist noch ein eklatanter Fehler. Was passiert, wenn count = max_count ist?
Datum:
Wenn es keine echte PWM sein muss (d.h. a '1' Takte und b '0' Takte und gar noch Periode a+b=const) sind binary rate multiplier einfacher. Die verteilen die 0/1-Pulse in der Gesamtperiode. Damit filtert sich das ganze auch einfacher, wenn man es analog braucht. Ist quasi die Vorstufe zum delta-sigma-Wandler... Ein Beispiel wäre der 7497, das geht auch im FPGA ganz simpel...
Datum:
Georg A. schrieb: > Damit filtert sich das > ganze auch einfacher, wenn man es analog braucht. Da wäre noch was im Beitrag "Re: optimale PWM erzeugen"
Datum:
Georg A. schrieb: > binary rate multiplier Ui, ein neuer Begriff für ein bekanntes Werk. Man lernt nie aus.
Datum:
Neu? Schau mal, von wann das Originaldatenblatt des SN7497 ist ;)
