From ec04aea839eaf69fd788d8fbeb606f685df1d157 Mon Sep 17 00:00:00 2001 From: Martin Prudek Date: Thu, 7 May 2015 14:41:05 +0200 Subject: [PATCH 1/1] Bug fix: unconsistent changes of match signal caused twitches im motor movement. The match signal is now changed only at the end ow pwm cycle. --- pmsm-control/rpi_pmsm_control.vhdl | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/pmsm-control/rpi_pmsm_control.vhdl b/pmsm-control/rpi_pmsm_control.vhdl index 27ca4d8..beb4b9c 100644 --- a/pmsm-control/rpi_pmsm_control.vhdl +++ b/pmsm-control/rpi_pmsm_control.vhdl @@ -197,6 +197,7 @@ architecture behavioral of rpi_pmsm_control is signal pwm_match: pwm_res_type; --point of reversion of pwm output, 0 to 2047 signal pwm_count: std_logic_vector (pwm_width-1 downto 0); --counter, 0 to 2047 + signal pwm_sync_at_next: std_logic; signal pwm_sync: std_logic; signal pwm_en_p: std_logic_vector(1 to 3); signal pwm_en_n: std_logic_vector(1 to 3); @@ -261,7 +262,7 @@ begin port map ( clock => gpio_clk, --50 Mhz clk from gpclk on raspberry sync => pwm_sync, --counter restarts - data_valid => income_data_valid, + data_valid => pwm_sync_at_next, failsafe => failsafe, -- -- pwm config bits & match word @@ -344,8 +345,16 @@ begin process begin wait until (gpio_clk'event and gpio_clk='1'); - IF(pwm_count = pwm_period) THEN - --end of period reached + IF pwm_count = std_logic_vector(unsigned(pwm_period) - 1) THEN + --end of period nearly reached + --fetch new pwm match data + pwm_sync_at_next <= '1'; + else + pwm_sync_at_next <= '0'; + end if; + + if pwm_sync_at_next='1' then + --end of period reached pwm_count <= (others=>'0'); --reset counter pwm_sync <= '1'; -- inform PWM logic about new period start ELSE --end of period not reached -- 2.39.2