电机驱动之降速<?xml:namespace prefix="o" ns="urn:schemas-microsoft-com:office:office"></?xml:namespace>
作者:VHDL大神
QQ:742875810(有问题可以问)
原理:将分频比增大。但分频比不能过大,过大会造成低电平期间,电机停转。分频比也不能太小,太小导致转速过快,不易控制。
--分频系数=500*1000=500000分频,将电机转速降低。
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
use ieee.std_logic_arith.all;
entity DC_MOTOR is
generic(rate:integer range 0 to 100:=0);
port(
reset:in std_logic;
clk :in std_logic;
pwm1 :out std_logic;
pwm2 :out std_logic
);
end entity;
architecture behave of DC_MOTOR is
------------分频元件声明-------------
component fenpin is
generic(rate:integer range 0 to 1000:=0);
port(
rst :in std_logic;
clock :in std_logic;
clkout:out std_logic
);
end component;
signal clk_temp:std_logic;--定义分频输出信号
begin
------------分频元件例化-------------
U1:--这个标志不能去
fenpin generic map(500)
port map(
rst =>reset,
clock =>clk,
clkout=>clk_temp
);
process(clk_temp,reset)
variable cnt :integer range 0 to 1000;
begin
if reset='0' then
cnt:=0;
else
if rising_edge(clk_temp) then
cnt:=cnt+1;
if cnt=1000 then
cnt:=0;
elsif cnt<500 then
pwm1<='0';
pwm2<='1';--PWM2=0禁止反转
else
pwm1<='0';
pwm2<='0';--PWM2=0禁止反转
end if;
end if;
end if;
end process;
end behave;