Pコントローラー(および後でPID)を使用してモーターを制御したい。Pコントローラーに使用しているVHDLコードは次のとおりです。
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
USE ieee.numeric_std.ALL;
USE ieee.STD_LOGIC_ARITH.ALL;
USE ieee.std_logic_signed.ALL;
entity P is
Port ( e : in STD_LOGIC_VECTOR (8 downto 0);
PWM : out STD_LOGIC_VECTOR (8 downto 0));
end P;
architecture Behavioral of P is
signal eInt : integer := 0;
signal PWMInt : integer := 0;
--min/max
signal borne : integer := 255;
--Gain
signal Ku : integer := 1;
--saturation
component saturation is
Port ( entier : in integer;
borne : in integer;
sotie : out STD_LOGIC_VECTOR (8 downto 0));
end component;
begin
eInt <= conv_integer(e);
PWMInt <= Ku*eInt;
sat : saturation port map(PWMInt, borne, PWM);
end Behavioral;
ここで、飽和はPWMの量を「負担」に制限します(PWMがバイナリで最大255になるように)、eはエラーです(コマンド-測定)。
このブロックの出力は、モーターに直接送られるPWMです(これは別のファイルで行われます)。開ループは問題なく機能し、閉ループはひどいものです。テストベンチは正常に機能しているので、整数の処理方法に何か問題があるのではないかと強く思いますが、物理的な実装はまったく正しくありません。