IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> HNUST - 复印机逻辑控制电路设计 -> 正文阅读

[嵌入式]HNUST - 复印机逻辑控制电路设计

一、实验题目

题目十九:复印机逻辑控制电路设计★
1)用按键输入复印的次数,用三个数码管显示,最大555,初始为0;(使用六个按键表示0-5数字键);
2)用另外按键开关作为启动复印的“开始”开关,开始后连续复印,每复印一次,数字减1,直到0,停机,回复初始状态;
3)如果发生缺纸,用另外一个拨码开关给出缺纸信号,则立即停止复印,提示缺纸(用LED灯指示),复印暂停,加纸后,缺纸的拨码开关回复,则继续复印;
4)复印过程中可以取消复印,用最后一个按键开关给出取消复印信号,则立即回复到初始状态。

二、实验环境

EPF10K20TC144-3

Quartus II 9.0 (32-Bit)

三、实验目的

  1. 学习VHDL语言
  2. 学习模块化设计思想实现内容
  3. 学习利用开发板进行板载测试

四、总体设计

  • 设计思路:通过六个按键来接收用户输入的复印的数量,再利用剩下两个按键来接收重置信号和开始信号。最后利用一个拨码开关实现缺纸信号的输入。

  • 设计方案:通过VHDL语言实现题目所述功能,设计四个低层次元件,并通过一个高层次元件安装四个低层次元件到设计实体内部。

  • 低层次元件的功能介绍:

    1. 分频器(driver):接收一个开发板的时钟信号(1000hz),输出一个500hz的时钟信号,再输出一个4hz的时钟信号
    2. 输入模块(input):对按键进行防抖处理,输出防抖后的结果 —— 一个整型信号代表用户输入的复印数量,两个逻辑位分别代表开始和重置状态
    3. 递减模块(degression):获取input模块的输出与拨码开关的缺纸信号,通过时钟信号实现递减功能,最后输出递减后的结果与给缺纸信号灯的缺纸信号
    4. 输出模块(output):将从degression获取的数字通过数码管输出

五、详细设计

① - 分频器(driver)

entity driver is
    generic(freq: integer:=1000);  
    port(
        clk_1000hz:in std_logic;        -- 板载信号:1000hz
        clk_4hz:out std_logic;          -- 输出信号:4hz
        clk_500hz:out std_logic         -- 输出信号:500hz
    );
end entity driver;

通过接收系统的clk信号,利用计数信号计数,当计数达到某一个定值时,清零计数信号并输出对应的clk信号,从而达到分频的效果

② - 输入模块(input)

entity input is
    port(
        clk_500hz:in std_logic;                       -- 时钟信号
        num_btn:in std_logic_vector(5 downto 0);         -- 数字按键信号
        start_btn:in std_logic;                         -- 开始按键信号
        init_btn:in std_logic;                          -- 置0按键信号
        start_signal:out std_logic;                      -- 开始信号
        init_signal:out std_logic;                       -- 置0信号
        number:out integer range 0 to 555:=0             -- 数字按键读取的输入
    );
end entity input;

防抖处理:因为输入的信号会因为物理原因产生毛刺,所以需要过滤信号 —— 当且仅当按键按压信号(低电平)持续时间达到20ms时,看作一次按压处理,输出对应信号

输入到input模块的按键信号,经过防抖处理,将数字信号以integer的方式输出,将置0信号和开始信号以std_logic的方式输出。通过时钟信号启用进程,每当收到一个按压的脉冲信号,将其经过防抖处理后,将输出信号实时更新,这里需要注意的点是,收到置0信号的同时将开始信号设置为低电平,即置0;同理,收到开始信号的同时,将置0信号改为低电平,而数字按键信号的输入直接实时更新输出的数字信号,使按键时的数据实时显示

③ - 递减模块(degression)

entity degression is
    port(
        number:in integer range 0 to 555:=0;                  -- 递减的数据
        lack:in std_logic;                                  -- 缺纸信号
        clk_4hz:in std_logic;                               -- 递减时钟信号
        start_signal:in std_logic;                            -- 开始信号
        init_signal:in std_logic;                             -- 置0信号
        print_signal:out integer range 0 to 555:=0;              -- 输出信号
        print_position:out std_logic;						    -- 输出位置信号
        lack_light:out std_logic                             -- 缺纸亮灯的信号
    );
end entity degression;

使用进程同时监听多个信号

  1. 当读取到时钟信号的时候,递减复印的剩余次数
  2. 当读取到缺纸信号的时候,暂停递减,并亮起缺纸信号灯
  3. 当读取到开始信号的时候,因为输入模块的信号是恒定的高电平,而不是一个脉冲,所以需要使用一个辅助变量来记录是否已经开始,若已经开始,则不做处理;若尚未开始,则将接收到的数据来更新数据
  4. 当读取到重置信号的时候,因为开始信号的缺闲,所以重置信号需要改变记录是否开始的信号的值,从而导致之后在开始信号重新置为1时,才可以更新数据的值,即除第一次赋值之外,重新赋值需要在重置处理之后

在所有信号处理完毕后,通过判断开始信号的变量判断是否已经开始递减,若已经递减,则传输递减的数据与为1的位置信号;若没有开始递减,则将input模块的输入通过数码管实时显示出来,位置信号置0

④ - 输出信号(output)

entity output is
    port(
        input_signal:in integer range 0 to 555:=0;
        input_position:in std_logic;
        clk_500hz:in std_logic;
        pos:out std_logic_vector(7 downto 0);
        num:out std_logic_vector(7 downto 0)
    );
end entity output;

通过扫描模块控制刷新的位置,通过刷新模块刷新对应数码管显示的数字,通过位置信息搭配扫描模块可以控制数码管显示位置的信息,通过编码函数实现编码转换


顶层文件设计

architecture work of printer is
signal t1,t2,s1,s2,s3: std_logic;  -- t:时间信号 -- s:控制信号
signal n1,n2: integer range 0 to 555;  -- n:数字信号
begin
    dri: driver port map(clk_1000hz=>clk, clk_500hz=>t1, clk_4hz=>t2);
    ipt: input port map(clk_500hz=>t1,num_btn=>amount,start_btn=>start,
                        start_signal=>s1,init_signal=>s2,init_btn=>initial,number=>n1);
    deg: degression port map(number=>n1,lack=>lack_signal,clk_4hz=>t2,
							start_signal=>s1,init_signal=>s2,print_position=>s3,
							print_signal=>n2,lack_light=>light_signal);
							opt: output port map(input_signal=>n2,input_position=>s3,
							clk_500hz=>t1,pos=>position,num=>number);
end architecture work;

六、实验结果分析

  • 针脚连接如下:

针脚链接图

  • 编译图:

EDA编译图

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2022-01-16 13:13:51  更:2022-01-16 13:14:57 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 12:24:57-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码