You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

pwm_test.vhd 2.8KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. ----------------------------------------------------------------------------------
  2. -- Company:
  3. -- Engineer:
  4. --
  5. -- Create Date: 16.03.2022 19:12:30
  6. -- Design Name:
  7. -- Module Name: pwm_test - Behavioral
  8. -- Project Name:
  9. -- Target Devices:
  10. -- Tool Versions:
  11. -- Description:
  12. --
  13. -- Dependencies:
  14. --
  15. -- Revision:
  16. -- Revision 0.01 - File Created
  17. -- Additional Comments:
  18. --
  19. ----------------------------------------------------------------------------------
  20. library IEEE;
  21. use IEEE.STD_LOGIC_1164.ALL;
  22. --use IEEE.MATH_REAL.ALL;
  23. --use IEEE.float_pkg.ALL;
  24. -- Uncomment the following library declaration if using
  25. -- arithmetic functions with Signed or Unsigned values
  26. --use IEEE.NUMERIC_STD.ALL;
  27. -- Uncomment the following library declaration if instantiating
  28. -- any Xilinx leaf cells in this code.
  29. --library UNISIM;
  30. --use UNISIM.VComponents.all;
  31. entity regler is
  32. Port ( clk : in STD_LOGIC; --Clk -> Gibt abtastzeit vor
  33. w : in integer := 0; --Sollwert
  34. y : in integer := 0; --Istwert
  35. u : inout integer := 0); --Stellgöße
  36. end regler;
  37. architecture Behavioral of regler is
  38. --signal stepWidth : integer := 1; -- 10 us später berechnet aus Clk und Prescaler
  39. -- Parameter aus Sprungantwort etc.
  40. signal KR : integer := 1; -- Verstärkung
  41. signal T : integer := 1; -- Abtastzeit in ns = 1ms = 1000000ns
  42. signal TV : integer := 0; -- Vorhaltezeit für Differenzierer interesannt
  43. signal TN : integer := 10; -- Nachstellzeit
  44. -- Konstanten Reglerparameter
  45. --signal a1 : integer ;
  46. --signal b0 : integer;
  47. --signal b1 : integer;
  48. --signal b2 : integer;
  49. signal a1 : integer := 1;
  50. signal b0 : integer := KR*(1+TV/T);
  51. signal b1 : integer := -KR *(1 - T / TN + 2 * TV / T );
  52. signal b2 : integer := KR * TV/T;
  53. --interne Signale signal
  54. --signal u_k1 : integer := 0; -- = uk-1 = u (wurde nicht geändert)
  55. --signal e_k : integer := 0; -- aktuelle Reglerdiffferenz
  56. signal e_k1 : integer := 0; -- letzte ""
  57. signal e_k2 : integer := 0; -- vorletzte ""
  58. -- signal u : integer := 100000; -- Eingangswert Strecke
  59. --signal x : integer := 0; -- Ausgangssignal Strecke -> Stellgröße
  60. begin
  61. process(clk)
  62. variable e_k : integer;
  63. begin
  64. if rising_edge(clk) then
  65. -- Konstanten Reglerparameter
  66. -- a1 <= 1;
  67. -- b0 <= KR*(1+TV/T);
  68. -- b1 <= -KR *(1 - T / TN + 2 * TV / T );
  69. -- b2 <= KR * TV/T;
  70. --u <= e; -- Regler überbrücken!
  71. e_k := w - y; --Reglerdifferenzbilden
  72. u <= (a1*u+b0*e_k+b1*e_k1+b2*e_k2)/1000; --Stellgröße u berechnen
  73. e_k2 <= e_k1;
  74. e_k1 <= e_k;
  75. end if;
  76. end process;
  77. --test
  78. end Behavioral;