FPGA自动售货机设计_第1页
FPGA自动售货机设计_第2页
FPGA自动售货机设计_第3页
FPGA自动售货机设计_第4页
FPGA自动售货机设计_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

i 自动售饮料机自动售饮料机 基于基于 EasyFPGA030 学学 校 校 华南农业大学华南农业大学 作作 者 者 曾康玲曾康玲 卫晓欣卫晓欣 时时 间 间 2009 11 ii 目目 录录 第 1 章 基于 EasyFPGA030 自动售饮料机 3 1 1概述 3 1 2硬件设计 3 1 2 1布局原理 3 1 2 2元器件选择 器件介绍 4 1 2 3EasyFPGA030 开发板简介 4 1 2 4数码管简介 5 1 2 5发光二极管简介 6 1 2 6焊接 6 1 3软件设计 7 1 3 1总体设计原理 7 1 3 2分频模块 8 1 3 3主控模块 10 1 3 4找零控制模块 10 1 3 5译码模块 12 1 4系统测试结果 13 1 4 1仿真波形 13 1 4 2测试结果分析 14 1 5心得体会 14 附录 A 参考文献 15 第第 1 章章 基于基于 EasyFPGA030 自动售饮料机自动售饮料机 摘摘 要要 Verilog 硬件描述语言能够用软件语言的的方式描述硬件特性 并可用仿 真方式完成电路的调试 本文介绍了基于 EasyFPGA030 的自动售饮料机的设计 详细说明 了运用 verilog 语言的设计过程与实现成果 关键词关键词 自动售饮料机 EasyFPGA030 Verilog Abstract Verilog hardware description language HDL specializes in describing hardware in the way of software language and complete circuit simulation available are introduced This thesis include the design of Automatic Beverage Machines which is based on the EasyFPGA030 as well as the details of the design process Verilog language use and achieve results Key words Automatic Beverage Machine EasyFPGA030 verilog 1 1概述概述 本设计是基于 EasyFPGA030 的自动售饮料机的设计 用 EasyFPGA030 开发套件实 现模拟自动售饮料机的操作 本设计中用两个按钮分别代表投入一块或五毛硬币 投下硬 币之后 通过数码管显示已投硬币金额 当达到相应数目时 自动出饮料 出货信号由两 盏灯交替闪烁提醒拿走饮料 最后饮料机的找零均为五毛硬币 由数码管显示已找零的五 毛个数 此外 饮料机还增加了取消信号 只要在出饮料之前按下取消按钮 即可取回投 入的金额 由找零数码管显示退回的五毛钱个数 1 2硬件设计硬件设计 自动售饮料机通过三个按钮分别模拟硬币的投入 取消信号 把信号输入到板中 然 后运用 EasyFPGA030 控制系统 使输出两个显示已投金额的数码管 一个找零数码管 两 个出货灯 1 2 1 布局原理布局原理 由于内部板已经有四个按键了 所以外部电路只需焊接显示和 LED 灯 由系统软件设定 按键信号由 AP030 的 15 16 17 64 口输入 然后经过处理 分别把信号输送给 LED 灯和数码管 总电路原理图如图 1 1 所示 图 1 1 布局原理图 1 2 2 元器件选择元器件选择 器件介绍 器件介绍 根据布局原理 得元件清单如 表 1 1 元件清单 表 1 1 元件清单 器件名称参数数量 开发板EasyFPGA0301 片 1 位共阴数码管1 个 2 位共阴数码管1 个 发光二极管1 个 电阻470 欧姆2 个 单排插针和插座若干 多功能板1 片 杜邦线17 根 1 2 3 EasyFPGA030 开发板简介开发板简介 本设计所用到的 EasyFPGA030 开发板 其中 EasyFPGA030 硬件电路示 主要芯片 采用 Actel 的 A3P030 如图 1 2 EasyFPGA030 外观所示 封装为 VG100 板上的外设包 括四个按键 四个 LED 48MHz 的晶振等 同时板上提供了 FPGA 下载所需要的下载器 直接与 PC 机并口相连 并通过上位机软件 Libero 即可下载 其主要特点 很强的兼容性 主芯片 A3P030 可替换成资源更大的 A3P060 A3P125 A3P250 入以及 AGL 系列 I O 口全部引出 方便进行二次开发 可以通过芯片内部的 FlashROM 进行数据存储 提供注释详尽 简单的入门源程序 图 1 2 EasyFPGA030 外观 1 2 4 数码管简介数码管简介 发光二极管 LED 是将电信号转换成光信号的发光器件 8 段 LED 数码管则是在一 定形状的绝缘材料上 利用单只 LED 组合排列成 8 字型 第八段是小数点 分别引 出它的电极 并点亮相应段来显示出 0 9 的数字 如图 1 3 译码管译码显示所示 图 1 3 译码管译码显示 LED 数码管根据 LED 的接法不同分为共阴和共阳两类 了解这些特性 对编程是很重 要的 不同类型的数码管 除了它们的硬件电路有差异外 编程方法也是不同的 本设计 采用的是共阴极的数码管 即公共端接地 译码时 高电平为显示有效 其主要特点 能在低电压 小电流条件下驱动发光 能与 CMOS TTL 电路兼容 发光响应时间极短 0 1 s 高频特性好 单色性好 亮度高 体积小 重量轻 抗冲击性能好 寿命长 使用寿命在 10 万小时以上 甚至可达 100 万小时 光亮可以由电流控制 所以 LED 数码管被广泛用作数字仪器仪表 数控装置显示 1 2 5 发光二极管简介发光二极管简介 发光二极管简称为 LED LED 是英文 Light Emitting Diode 的缩写 由镓 Ga 与 砷 AS 磷 P 的化合物制成的二极管 当电子与空穴复合时能辐射出可见光 因而可 以用来制成发光二极管 在电路及仪器中作为指示灯 或者组成文字或数字显示 磷砷化 镓二极管发红光 磷化镓二极管发绿光 碳化硅二极管发黄光 发光二极管的核心部分是 由 P 型半导体和 N 型半导体组成的晶片 在 P 型半导体和 N 型半导体之间有一个过渡 层 称为 PN 结 在某些半导体材料的 PN 结中 注入的少数载流子与多数载流子复合时会 把多余的能量以光的形式释放出来 从而把电能直接转换为光能 PN 结加反向电压 少数 载流子难以注入 故不发光 当它处于正向工作状态时 即两端加上正向电压 电流从 LED 阳极流向阴极时 半导体晶体就发出从紫外到红外不同颜色的光线 光的强弱与电流 有关 发光二极管外观如图 1 4 二极管外观所示 图 1 4 二极管外观 发光二极管还可分为普通单色发光二极管 高亮度发光二极管 超高亮度发光二极管 变色发光二极管 闪烁发光二极管 电压控制型发光二极管 红外发光二极管和负阻发光 二 极管等 发光二极管的特点是 工作电压很低 有的仅一点几伏 工作电流很小 有的仅零点几毫安即可发光 抗冲击和抗震性能好 可靠性高 寿命长 通过调制通过的电流强弱可以方便地调制发光的强弱 1 2 6 焊接焊接 经过了布线之后 我们按照原理图安排走线 并尽量减少了跳线 简单美观 正反面 如 所示图 1 5 反面焊接图 图 1 6 完成效果图所示 图 1 5 反面焊接图 图 1 6 完成效果图 1 3软件设计软件设计 1 3 1 总体设计原理总体设计原理 本设计运用了顶层设计思路 通过调用不同功能的模块实现总的功能 此外我们还用 了有限状态机进行状态描述 为了使状态图不至繁琐 以便能够更加清楚模拟饮料机 假定该售货机只出售一种货品 可乐售价 2 5 元 可以接受两种币值的硬币 1 元和 5 毛 最高可接收 3 元 输出端有四个 分别两个数码管显示已投硬币的金额 一个数码管显示 找零 LED 显示售出饮料 此外 如果在出饮料之前按下取消按钮 饮料机会退回 5 毛币 值的硬币 第三个数码管显示退回的 5 毛的个数 本设计利用状态机设计 经过分析状态图 本设计分为四个模块 分频模块 主控模块 找零模块 显示输出 模 块 于是可得出总体设计框架 如图 1 7 设计总框架所示 主主控控模模块块 找找零零显显示示 分分频频模模块块译译码码模模块块 图 1 7 设计总框架 1 3 2 分频模块分频模块 本设计总共包含两个分频 分别是 1S 和 0 25S 1S 分频是用作找零数码管和售出信 号闪烁用的 而 0 25S 是用作与输入按钮的时间匹配 由于人的按键时间是毫秒级的 为 了使一元和五角的信号持续一个时钟周期 所以需要把时钟信号分成 0 25S 现在以 0 25S 为例 分频模块完成了把 48MHz 的系统时钟信号分成频率得到 4Hz 的时钟信号 并作为 主控模块的时钟信号 此处用了divclk cnt1计数器进行计数 复位信号启动 使得输出 为低电平 每当系统时钟上升沿到达时 计数器就进行加 1 计数 输出信号保持原状态 当计数到 6000000 时 输出信号取反 计数器清 0 因而得到一个周期的方波信号 可知 在 1 秒时间内 输出信号有 4 个周期 即输出信号频率为 4Hz 程序流程如图 1 8 分频 设计流程所示 开始 计数器 是否为6000000 计数器清零 分频信号取反 计数器加1 结束 计数器和 分频信号赋值 Y N 图 1 8 分频设计流程 源程序如下程序清单 1 程序清单 2 模块名称 分频模块 功能描述 将 48M 的时钟信号分频 得到 4HZ 和 1HZ 的时钟信号 divclk1 4HZ 的分频 reg 24 0 divclk cnt1 4HZ 的计数变量 always posedge clk 48M begin if divclk cnt1 25 d6000000 begin clk1 clk1 时时钟信号翻一次 divclk cnt1 0 end else begin divclk cnt1 divclk cnt1 1 b1 end end divclk2 1HZ 的分频 reg 26 0 divclk cnt2 1HZ 的计数变量 always posedge clk 48M begin if divclk cnt2 27 d24000000 begin clk2 clk2 时时钟翻一次 divclk cnt2 0 end else begin divclk cnt2 divclk cnt2 1 b1 end end endmodule 1 3 3 主控模块主控模块 主控模块是使用状态机完成 利用时钟信号触发每个状态之间的转换 从而实现显示 已投入的金额 pay dollar1 和 pay dollar2 售出信号提示灯的闪烁 找零金额 change 检测 到复位信号低电平的时候 状态机复位为状态 0 next D 0 整个模块利用分频后的时钟信 号作为时钟输入 使硬币的投入信号控制在一个时钟信号内 根据投入信号 one dollar n 为一元硬币投入 half dollar n 毛硬币投入 判断进行状态转换 当交易成功 售出信号 为 1 或不成功时 按取消键 cancel 退回投入的金额 程序会自动回到状态 0 next D 0 等待下一的交易 全过程分为 9 个状态 各状态的转换关系如下 图 1 9 状态转换流程图所示 图 1 9 状态转换流程图 1 3 4 找零控制模块找零控制模块 找零模块负责判断是否找零和使找零的数码管上的数字闪烁 以提醒顾客提取饮料 此模块根据传输过来的数据 change r 表示要找零的值 clk2 表示 1S 的时钟信号 en 1 代表 找零允许 运用并置符号 end 实现找零显示一明一暗闪烁 else begin dis change change end end endmodule 1 3 5 译码模块译码模块 此模块实现由四位数据转换为数码管的七位输入 通过分别调用这个模块 可以实 现投入金额 找零金额的显示输出 由于模块直接利用四位数据为敏感信号 避免了时间 的延迟 由于我们采用的是共阴数码管 所以译成的码对应 ABCDEFG 是高电平有效 例 如显示 0 的码是 1111110 简要流程图如图 1 11 译码模块设计流程所示 接接受受四四位位 数数据据n nu um m 四四位位数数据据 n nu um m值值是是否否改改变变 把把四四位位译译成成共共阴阴 数数码码管管八八位位输输入入 返返回回八八位位输输出出 Y N 图 1 11 译码模块设计流程 源程序如下程序清单 3 程序清单 3 模块名称 译码模块 always num begin case num 4 b0000 dis 7 b0111111 译码为 0 4 b0001 dis 7 b0000110 译码为 1 4 b0010 dis 7 b1011011 译码为 2 4 b0011 dis 7 b1001111 译码为 3 4 b0100 dis 7 b1100110 译码为 4 4 b0101 dis 7 b1101101 译码为 5 4 b0110 dis 7 b1111100 译码为 6 4 b0111 dis 7 b0000111 译码为 7 4 b1000 dis 7 b1111111 译码为 8 4 b1001 dis 7 b1101111 译码为 9 endcase end endmodule 1 4系统测试结果系统测试结果 1 4 1 仿真波形仿真波形 图 1 12 仿真波形 1 图 1 13 仿真波形 2 1 4 2 测试结果分析测试结果分析 一开始调试时 按硬币键 一元 五角 不能进行触发 原因是新增的按键问题与 信号不匹配问题 经过更改为 Easy 板上自带的按键后 问题就解决了 功能能如期实现 1 5心得体会心得体会 自从参加了周立功的 FPGA DIY 比赛 我们开始接触了解到这个周立功这个企业 也是因为看到周立功博文上一句 他们从一边学习 一边完成参赛题目 能够坚持做到 最后已经非常不错了 最终提交论文的人非常有限 提交作品的人也就更少了 的话 就 是它鞭笞着我们不断克服困难 抱着必死的决心也要把作品完成出来的 因为我们不想成 为那口中的多数人 而更加愿意为那少数人 而实际上 比赛也带给了我们很多难以言语 的激动 第一次写代码的抓狂 第一次编译代码的成功 第一次仿真通过的兴奋 第一次 完成程序下载到板上却执行不了的挫败感 第一次连睡午觉也梦见 LIBERO 也是第一次孜 孜不倦地调试程序到三点多然后早上也是一早起来继续 也许我们的作品过于平庸 但所 谓 不在乎天长地久 只在乎曾经拥有 我们更珍惜这个锻炼的过程 只有真正经历过了 才懂得 我们一开始只把精力放到编程序上面 后来才发现原来从如何学一门新的语言 用软件 选器件 调试连分布引脚和写论文都大有学问在 整个设计过程就是自主学习的 过程 学习 verilog li

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论