Широтно-импульсная модуляция (ШИМ, также PWM – Pulse-WidthModulation) является эффективным способом цифрового управления силовыми системами. При этом регулирование мощности осуществляется путем управления отношением времени, в течение которого сигнал включен, ко времени, в течение которого он выключен. Такой способ управления обладает как минимум двумя достоинствами – он удобен для реализации в цифровой системе, и является энергоэффективным, поскольку в ключевом режиме работы управляющий элемент потребляет минимальную мощность (в закрытом состоянии ток через него стремится к нулю, а в открытом стремится к нулю падение напряжения, поскольку сопротивление переключающих элементов стремятся уменьшить).
Модуль ШИМ разрабатывается следующим образом. Входной сигнал d задает число тактов, в течение которых следует удерживать высокий логический уровень на выходе модуля. Внутренний сигнал cnt циклически перебирает состояния от 0 до максимального значения, которое может быть подано в качестве входного. Допустим, что внутренний счетчик является 8-разрядным (т.е. полный цикл счета содержит 256 тактов). Тогда при подаче на вход числа 10 на выходе такого модуля будет логическая единица в течение 10 тактов, а в течение остальных 246 – логический ноль. Увеличивая значение числа, поданного на вход d, можно увеличивать отношение времени включения выходного сигнала к общему времени цикла счета.
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
entitypwm is
Port ( clk : in STD_LOGIC;
d : in STD_LOGIC_VECTOR(7 downto 0);
pwm_out : out STD_LOGIC);
endpwm;
architecture Behavioral of timer is
signalcnt : std_logic_vector(7 downto 0) := x”00”;
begin
process(clk)
begin
ifrising_edge(clk) then
cnt<= cnt + 1;
end if;
end process;
pwm_out<= '1' when d >cnt else '0';
endBehavioral;