该程序中有三个输入端,分别是clock_48M、key[2..0]、pwm_in,其中clock_48M是接系统时钟端;key[2..0]是开关控制输入端,其中开关1控制电机的加速,开关2控制电机的启动或停止,开关3控制电机的正反转;pwm_in是PWM产生的波形在这一模块的输入,接在脉宽调制模块的pwm_out端。该程序还有五个输出端,即pwm_en、duty_cycle[3..0]、motora、motorb、led[4..0],其中pwm_en是输出使能信号,以便控制电机的启动和停止,接在脉宽调制模块的使能端,从而达到控制pwm_out的波形信号,进而控制本模块的motora、motorb输出信号,也就控制了电机的启动和停止;duty_cycle[3..0]是由开关1直接控制的,当开关1打开时,duty_cycle的值依次加1,从而控制脉宽调制模块的输出占空比;motora、motorb是输出信号电平信号加载到直流电机两端的控制端口;led[4..0]是输出显示。
(4)仿真波形及分析
 
图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。
		
- 上一篇:基于FPGA的线阵CCD驱动设计+源代码 
 
- 下一篇:视频深度图像的产生和编码+文献综述 
 
		
	
- 
 
- 
 
- 
 
- 
 
- 
 
- 
 
- 
 
 
电站锅炉暖风器设计任务书
 
当代大学生慈善意识研究+文献综述
 
乳业同业并购式全产业链...
 
杂拟谷盗体内共生菌沃尔...
 
河岸冲刷和泥沙淤积的监测国内外研究现状
 
java+mysql车辆管理系统的设计+源代码
 
酸性水汽提装置总汽提塔设计+CAD图纸
 
大众媒体对公共政策制定的影响
 
十二层带中心支撑钢结构...
 
中考体育项目与体育教学合理结合的研究