基于FPGA的自动售货机

时间:2022-05-17 03:55:50

基于FPGA的自动售货机

[摘 要]本文介绍了基于Verilog HDL的自动售货机,本设计主要利用ISE平台,采用Verilog HDL设计系统核心电路,并外接了一个RS232模块,采用RS232串行通讯协议,实现串行数据的接收和发送,将数据通过电脑发送到Basys2开发板上并让其接收,并可结合芯片上的数码管进行具体的数字显示,最终完成的自动售货机系统具有投币处理、商品选择、找零、异常退币等功能。

[关键词]自动售货机 Verilog HDL 现场可编程门阵列(FPGA)

中图分类号:TH692.62 文献标识码:A 文章编号:1009-914X(2015)48-0132-02

一、引言

随着社会的发展,自动售货机在人们日常生活中越来越普遍,透过这种智能售货系统不仅可以存货、销售,还可将物流信息准确、及时地反馈给客户和管理人员,前景非常广阔。

Verilog HDL是一种技术性、应用性很强的硬件描述语言,主要用于从算法级、门级到开关级的多种抽象设计层次的数字系统建模,由于这种语言简捷、高效、易学易用、功能强,因此逐渐为众多设计者所接受。

二、设计方案

在已有的自动售货机控制模块中,通过控制开关来表示投入的币值和所选的商品,本次设计用四个开关表示可选的四种商品,通过在电脑上输入aa、bb、cc分别表示投入0.5元、1元、5元币值,该方案可以通过电脑来传输数据,并且易于对数据的处理,具有更大的便捷性。

自动售货机的问题实际就是状态转换的问题,不同的状态对应不同的输出。我们设计的自动售货机有四个状态,即初始、选择商品、投币、找零状态。

1、初始状态

各变量都设置为零,按下 rst 键后,一切恢复到初始状态。

2、投币状态

投币口只接受三种面值的钱币0.5元、1元和5元,可以同时投入多种面值钱币,但总币值不能超过9.5元。投完币后,数码管显示投币金额。

3、选择商品状态

四个按键开关分别表示四种价格的商品,售货时可选择四种商品的任意组合。

4、找零状态

将所投的金额与所选商品的价格做比较,若所投金额小于商品价格,则退回钱币,警示灯亮;若大于等于商品价格,则两者做差,得到需要找零的钱,数码管显示找零金额。

三、模块划分

1、主控模块程序

主控模块程序通过对输入的信号进行处理,完成自动售货的售货功能,pri_5, pri_10,pri_15,pri_20分别代表四种价格的商品,rs232_rx、rs232_tx分别为接收、发送数据信号,bps_start2波特率时钟启动信号,接收到数据后,该信号置位,clk_bps为高电平为接收数据位的中间采样点,rx_data为接收数据寄存器,rx_int为接收数据中断信号,程序主要流程如下:

input clk;

input rst;

input pri_5,pri_10,pri_15,pri_20;

input rs232_rx;

output rs232_tx;

wire bps_start1,bps_start2;

wire clk_bps1,clk_bps2;

wire[7:0] rx_data;

wire rx_int;

wire [7:0] out1,out2;

begin

* 波特率发生模块

* 数据接收模块

* 波特率发生模块

* 数据发送模块

* 自动售货机功能实现与显示模块

end

endmodule

2、波特率发生模块

波特率发生器实际上就是分频器,可以根据给定的系统时钟频率和要求的波特率算出波特率分频因子,把算出的波特率分频因子作为分频器的分频系数,具体程序流程如下:

input clk;

input rst;

input bps_start;

output clk_bps;

reg [12:0] cnt;

reg clk_bps_r;

begin

* 一个脉宽完成或者波特率不需要产生时,波特率计数清零

* 当clk_bps_r高电平为接收数据位的中间采样点,同时也作为发送数据的数据改变点

end

endmodule

3、数据接收模块

变量rs232_rx0,rs232_rx1,rs232_rx2,rs232_rx3为接收数据寄存器,滤波时用,neg_rs232_rx为下降沿标志位,为1表明数据线接收到下降沿开始接收起始位,程序主要流程如下:

input clk;

input rst;

input rs232_rx;

input clk_bps;

reg rs232_rx0,rs232_rx1,rs232_rx2,rs232_rx3;

wire neg_rs232_rx;

begin

* 当系统接收到串口接收线rs232_rx的下降沿标志信号, 开始接收起始位,

启动串口准备数据接收

* 接收数据中断信号,使能置位表示数据正在接收

* 数据接收完毕后释放波特率启动信号

* 关闭波特率使能

* 接收数据中断信号关闭,不再接收数据

end

Endmodule

4、数据发送模块

rx_int为信号寄存器,捕捉下降沿滤波用,neg_rx_int为rx_int下降沿标志用来捕捉下降沿,程序具体流程如下:

input rx_int;

output rs232_tx;

output bps_start;

reg rx_int0,rx_int1,rx_int2;

wire neg_rx_int;

begin

* 若捕捉到下降沿,开始准备把接收到的数据发送回去

* 产生波特率

* 把接收到的数据存入发送数据寄存器

* 进入发送数据状态中,打开发送使能

* 数据发送完成,重新复位

end

endmodule

5、自动售货机功能实现模块

程序主要流程如下:

bengin

* 从电脑输入所投钱币

* 选择要购买的商品

* 找零

* 数码管显示找零金额

end

Endmodule

四、总结

基于FPGA的自动售货机具有极大的实用性和商业价值,若能将其投入使用,必然会有很好的效果,veriloge HDL语言有限状态机设计控制电路,可大大降低设计难度和时间,提高设计效率和可靠性,利用语言的灵活性及功能强大的EDA工具,可以轻松完成硬件的功能扩充与升级,还可以实现更复杂的数字系统,整个设计过程相对于普通的设计方法,有较大的突破。

参考文献

[1] 王雯隽.基于Verilong-HDL自动售货机的设计与实现[J].微型电脑应用,2005,21(5):19-20,62.DOI:10.3969/j.issn.1007-757X.2005.05.007.

[2] 陈涛.货币识别器的原理与设计[J].甘肃科技纵横,

2006,35(6):82,181.DOI:10.3969/j.issn.1672-6375.2006.06.062.

[3] 梁雪梅,钟建权,谷斌等.基于TRIZ理论应用的校园刷卡式自动售货机研制[J].广东科技,2010,19(14):66-68.DOI:10.3969/j.issn.1006-5423.2010.14.037

上一篇:变电检修中常见问题分析及处理方法 下一篇:大余县金边瑞香栽培与气候相关分析研究