andy
Registrierter Benutzer
Beiträge: 1
|
Erstellt: 17.05.08, 19:42 Betreff: Veränderbares PWM Signal in VHDL
drucken
Thema drucken weiterempfehlen
|
|
|
Hi Leute. Bin total am verzweifeln. Versuchen seit Tagen ein Programm zu schreiben, womit ich mit einem Tastendruck die Pulsbreite eines PWM-Signals vergrößern bzw verkleinern kann bei gleich bleibender Periodendauer. Das PWM Signal ist kein Problem, das funks. Nur soblad ich was programmieren womit ich es ändern möchte, bricht es zusammen. wenn ich es mir am Oszi anschaue. Vielleicht kann mir jemand einen Tip gehen. Wäre super. Quelltext von meiner Realisierung PWM(Puls 1,2ms Periode 20ms) hänge ich dran. Danke
-- STANDARD LIBRARIES -- LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_ARITH.ALL;
-- BEGIN OF ENTITY -- ENTITY PWM_TEST IS -- GLOBAL VARIABLE MAX-COUNT (Periodendauer 20 ms) -- GENERIC (period : INTEGER := 2000); PORT ( -- GLOBAL CLOCK OF MAX II ALTERA -- glb_clk: IN BIT; -- CLOCK FOR DISTANCE MEASUREMENT 100 KHz -- en: IN STD_LOGIC; -- GLOBAL RESET USER PUSH BUTTON S1 -- nReset: IN BIT; -- CLOCK FOR PWM-MODULATOR 50 Hz -- pwm_clk: OUT STD_LOGIC ); END PWM_TEST; -- END OF ENTITY --
-- BEGIN OF ARCHITECTURE -- ARCHITECTURE SCALER OF PWM_TEST IS TYPE STATE_TYPE IS (START, MOTOR_ON, MOTOR_OFF); SIGNAL state : STATE_TYPE; BEGIN PROCESS (glb_clk, en, nReset) -- TEMPORARY VARIABLE FOR TIMING -- VARIABLE cnt : INTEGER := 0; -- GLOBAL RESET -- BEGIN IF (nReset = '0') THEN cnt := 0; state <= START; -- GENERATING NEW CLOCK -- ELSIF (glb_clk'EVENT AND glb_clk='1') THEN IF en = '1' THEN IF cnt < period THEN cnt := cnt + 1; ELSE cnt := 0; END IF; CASE state IS WHEN START => IF cnt = 1 THEN state <= MOTOR_ON; ELSE state <= state; END IF; WHEN MOTOR_ON => IF cnt = 122 THEN state <= MOTOR_OFF; ELSE state <= state; END IF; WHEN MOTOR_OFF => state <= START; END CASE; END IF; END IF; END PROCESS; pwm_clk <= '1' WHEN state = MOTOR_ON ELSE '0'; END SCALER; -- END OF ARCHITECTURE --
|
|