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 3.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  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. KR : in integer := 1; -- Verstärkung
  37. T : in integer := 1000; -- Abtastzeit in us
  38. TV : integer := 0; -- Vorhaltezeit für Differenzierer interesannt
  39. TN : in integer := 1); -- Nachstellzeit
  40. end regler;
  41. architecture Behavioral of regler is
  42. --signal stepWidth : integer := 1; -- 10 us später berechnet aus Clk und Prescaler
  43. signal prescaler : integer :=1000000; -- prescaler für Zeit
  44. -- Parameter aus Sprungantwort etc.
  45. --signal KR : integer := 1; -- Verstärkung
  46. --signal T : integer := 1000; -- Abtastzeit in ns = 1ms = 1000000ns
  47. --signal TV : integer := 0; -- Vorhaltezeit für Differenzierer interesannt
  48. --signal TN : integer := 10; -- Nachstellzeit
  49. -- Konstanten Reglerparameter
  50. --signal a1 : integer ;
  51. --signal b0 : integer;
  52. --signal b1 : integer;
  53. --signal b2 : integer;
  54. signal a1 : integer := 1;
  55. signal b0 : integer := KR*(1+TV/T);
  56. signal b1 : integer := -KR *(1 - T / TN + 2 * TV / T );
  57. signal b2 : integer := KR * TV/T;
  58. --interne Signale signal
  59. --signal u_k1 : integer := 0; -- = uk-1 = u (wurde nicht geändert)
  60. --signal e_k : integer := 0; -- aktuelle Reglerdiffferenz
  61. signal e_k1 : integer := 0; -- letzte ""
  62. signal e_k2 : integer := 0; -- vorletzte ""
  63. signal I_k : integer := 0; -- I-Anteil
  64. -- signal u : integer := 100000; -- Eingangswert Strecke
  65. --signal x : integer := 0; -- Ausgangssignal Strecke -> Stellgröße
  66. begin
  67. process(clk)
  68. variable e_k : integer := 0; -- aktuelle Reglerabweichung
  69. --variable I_k : integer := 0; -- I-Anteil
  70. --variable I_k1 : integer := 0; -- letzer I-Anteil
  71. begin
  72. if rising_edge(clk) then
  73. -- Konstanten Reglerparameter
  74. -- a1 <= 1;
  75. -- b0 <= KR*(1+TV/T);
  76. -- b1 <= -KR *(1 - T / TN + 2 * TV / T );
  77. -- b2 <= KR * TV/T;
  78. e_k := w - y; --Reglerdifferenzbilden
  79. -- PID-Regler ---------------------------------------
  80. --u <= (a1*u+b0*e_k+b1*e_k1+b2*e_k2)/1000; --Stellgröße u berechnen, PID-Regler
  81. --e_k2 <= e_k1;
  82. --e_k1 <= e_k;
  83. -- PI-Regler ----------------------------------------
  84. I_k <= I_k + T * 1 / TN * prescaler * e_k / prescaler; -- I-Anteil berechnen
  85. u <= KR * e_k + I_k;
  86. -----------------------------------------------------
  87. --u <= w; -- Regler überbrücken!
  88. end if;
  89. end process;
  90. --test
  91. end Behavioral;