1、自动饮料售货机 目录1. 前言。.。.。.。.。.。.。.。.。.。.。.。.。12. 设计流程图。.。.。.。.。.。.。.。.。.。.。.。.。23. 源代码编写。.。.。.。.。.。.。.。.。.。.。.。34. 仿真时序图。.。.。.。.。.。.。.。.。.。.。.。.。.。65. 分析与总结。.。.。.。.。.。.。.。.。.。.。76. 参考文献。.。.。.。.。.。.。.。.。.。.。.。.7I1. 前言本人在本科阶段自学了一部分PLC,并运用PLC完成了本科的毕业设计,同在毕业设计课题组的同学选做基于PLC自动饮料售货机的设计,当时对自动饮料售货机的控制系统了解仅限于基于单片机
2、与PLC的控制没有亲自动手去尝试设计.在本学期,全新的接触和学习了FPGA课程,正处于一个FPGA的入门阶段,基于以前的兴趣,该次尝试基于FPGA简单设计自动饮料售货机的一部分控制。本次是采用Quartus II 13。0sp1 进行了程序源代码的编写和时序仿真。图1-1自动饮料售货机内部结构图图1-2自动饮料售货机内部结构图2. 设计流程图3。源代码编写/信号定义: clk: 表示时钟输入; rst_n: 为系统复位信号; half_yuan: 代表投入5角钱币; one_yuan: 代表投入1元钱币; half_out: 代表找零信号; dispense: 代表机器售出一瓶饮料; coll
3、ect: 用于提示投币者取走饮料. seg1: LCDA数码管显示; seg2: LCDB数码管显示; seg3: LCDC数码管显示;/ module SCD(half_yuan ,one_yuan,half_out,collect,dispense,rst_n,clk,seg1,seg2,seg3); parameter idle=0,half=1,one=2,two=3,three=4; / idle,half,one,two,three代表投入钱币的几种状态 input half_yuan,one_yuan,rst_n,clk; output collect,half_out,disp
4、ense,seg1,seg2,seg3; reg2:0D; /D代表当前时刻投币的状态 reg temp1,temp2; reg collect,half_out,dispense; reg 3:0seg1; reg3:0seg2; reg7:0seg3; always (posedge clk or negedge rst_n) begin if (!rst_n) begin dispense=0;collect=0; half_out=0;D=idle; temp1=0;temp2=0; seg1,seg2=8b0000_0000;seg3=8b11111101;end else begi
5、n temp1=half_yuan;temp2=one_yuan; /初始状态赋值 case(D) idle: if (temp1,half_yuan=2b10) /0元状态下检测下降沿 begin D=half; seg1,seg2=8b0000_0101;seg3=8b1111_1101; /数码管显示 dispense=0;collect=0;half_out=0;end /循环时输出置0else if (temp2,one_yuan=2b10) begin D=one; seg1,seg2=8b0001_0000;seg3=8b1111_1101; dispense =0;collec
6、t=0;half_out=0;endhalf: if (temp1,half_yuan=2b10) /0。5元状态下检测下降沿 begin D=one; seg1,seg2=8b0001_0000;seg3=8b11111101;end else if (temp2,one_yuan=2b10) begin D=two; seg1,seg2=8b0001_0101;seg3=8b11111101;end one: if (temp1,half_yuan=2b10) /1元状态下检测下降沿 begin D=two; seg1,seg2=8b0001_0101;seg3=8b11111101;en
7、delse if (temp2,one_yuan=2b10) begin D=three; seg1,seg2=8b0010_0000;seg3=8b11111101;end two: if (temp1,half_yuan=2b10) /1。5元状态下检测下降沿 begin D=three; seg1,seg2=8b0010_0000;seg3=8b11111101;end else if (temp2,one_yuan=2b10) begin dispense=1;collect=1;D=idle; seg1,seg2=8b0010_0101;seg3=8b11111101;end /售出
8、饮料 three: if (temp1,half_yuan=2b10) /2元状态下检测下降沿 begin dispense=1;collect=1;D=idle; seg1,seg2=8b0010_0101;seg3=8b11111101;end /售出饮料 else if (temp2,one_yuan=2b10) begin dispense=1;collect=1;half_out=1;D=idle seg1,seg2=8b0011_0000;seg3=8b10110110;end /售出饮料 endcase end end endmodule图31Verilog HDL设计图3-2
9、Verilog HDL设计4。仿真时序图 图41仿真时序图图42仿真时序图5. 分析与总结 首先对该控制系统基于PLC和FPGA软件控制方面做简单比较,PLC采用的梯形图的编程,个人认为PLC的类似“积木式的电路结构图”梯形图较简单明了,对程序的调试也方便了些,FPGA的Verilog HDL也可以认为是对象电路的实现的描述,虽然是基于C语言,大部分人有C语言的基础,但是一般人调试很困难。 该课程设计只完成了一部分的程序控制,可作为主程序源代码的一部分,主要功能是投币显示取饮料找零.虽然参考了几本书和网上的资料,多数的不够完善,该设计虽然也可以完成一部分的功能,但是很粗糙,在找零数码管显示设计中虽然在源代码中可以通过测试分析,但是对于功能的实现是未实现。 由衷的感谢莫老师的教导,基于本人现在处于的入门阶段,能独立尽可能的完善一个设计,还需要一定的时间,需深入思考,再接再励。6. 参考文献1 潘松主编。EDA技术实用教程第四版M。北京:科学出版社,2010,66-962 王金明主编。EDA技术与Verilog设计M。北京:科学出版社,2008,265-2683 夏宇闻编。Verilog数字系统设计教程M。北京:北京航空航天大学出版社,2008,3958 学 号:1708201018 班 级:1716学生姓名:李有强3