图4.5 电机控制仿真波形
Fig.4.5 Motor control simulation waveform
由仿真波形可以看出,在给定pwm_in固定输入的情况下,当开关3打开、开关1和开关2关闭时,duty_cycle不变,且pwm_en输出为0;当开关1和开关3打开、开关2关闭时,duty_cycle依次增加,pwm_en输出仍为0;当开关1、开关2、开关3同时打开时,此时,duty_cycle依次增加,pwm_en输出为1。因为设计满足了开关1控制电机的加速,开关2控制电机的启动或停止,开关3控制电机的正反转。
4.4.3 消抖模块
(1)生成的功能模块图
图4.6 消抖功能模块图
Fig.4.6 Debounce function module chart
(2)消抖模块的VHDL编程
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_Arith.ALL;
USE IEEE.STD_LOGIC_Unsigned.ALL;
ENTITY filter_200us IS
PORT(
clk,in_bit: IN STD_LOGIC;
out_bit: OUT STD_LOGIC
);
END;
ARCHITECTURE one OF filter_200us IS
SIGNAL cnt:STD_LOGIC_VECTOR(19 DOWNTO 0);
SIGNAL out_bit_r:STD_LOGIC;
BEGIN
out_bit<=out_bit_r;
PROCESS(clk)
BEGIN
IF RISING_EDGE(clk) THEN
IF in_bit ='1' THEN --一旦出现高电平即复位计数器
cnt <=X"00000"; --清0计数器
out_bit_r <='1'; --输出置1
ELSE
IF cnt>=9600 THEN --clk=48M 约为200us
out_bit_r<='0'; --低电平宽度大于200us时输出低电平.
ELSE --低电平宽度小于200us时输出高电平.
cnt<=cnt+1; --计数器累加
out_bit_r<='1';
END IF;
END IF;
END IF;
END PROCESS;
END;
(3)VHDL程序分析
该程序主要实现消抖功能,原因是红外光电电路测得的转速脉冲信号没经过整形,所以存在很多干扰脉冲,如果直接对其计数,则测得的结果不正确,因此在本设计中加入了消抖模块filter_200us。