□袁家兵 汪金成 杨 瑞 于玉亭
可编程逻辑器件自20世纪70年代以来,经历了PAL、GAL、CPLD、FPGA几个发展阶段,目前CPLD/FPGA器件已成为现代高层次电子设计方法的实现载体[1]。VHDL是一种全方位的硬件描述语言,包括系统行为级、寄存器传输级和逻辑门级多个设计层次,支持结构、数据流和行为3种描述形式的混合描述,因此VHDL几乎覆盖了以往各种硬件描述语言的功能,整个自顶向下或自底向上的电路设计过程都可以用VHDL来完成[2]。本文通过QuartusII软件运用VHDL语言编程实现在以FPGA为核心的硬件平台上的出租车计费模拟系统的设计。
本设计主要实现以下要求,并运用QuartusⅡ软件对各个模块及顶层电路的功能进行仿真分析,将所设计的系统写入FPGA器件中,在实验箱上实现系统的硬件测试:一是设计一个电机驱动模块。实现电机的加速、减速、匀速、暂停、正转和反转等功能。二是设计一个出租车计费模块。要求出租车有4种车型可选,4种起步价可选,起步里程可设置1到8公里。等待时间满一分钟加一元。最终在6位七段数码管上显示行驶里程和计费值;三是设计红外遥控模块,以此来控制电机的各个功能以及设置计价器的各项设置。
根据以上系统要求,本系统总体设计方案如图1所示,分为时钟模块、电机控制模块、出租车计费模块、红外遥控模块和显示模块等模块。其中时钟模块和显示模块比较简单,时钟模块采用PLL模块和分频模块产生所需的不同频率;显示模块为七段数码管和数码管显示;这两个模块比较简单,此处不再展开介绍设计实现过程。
图1 系统总体设计方案
(一)电机控制模块设计。电机控制模块主要分为调速模块和正反转模块。调速模块的作用就是用来调节直流电机的转速,核心就是通过改变PWM的占空比。此处通过定值计数器来控制周期大小,可变计数器调整占空比,数值比较器完成高低电平的变化。正反转控制模块则是实现通过按键来控制电机的转向。电机控制模块的设计原理图如图2所示。
图2 电机控制模块原理图
(二)出租车计费模块设计。现代出租车车轮直径大概有4种,起步价各个城市都有自己的定价,这里设置4种,起步里程设置从1到8公里。出租车计费模块由车型选择模块、里程计算模块、计费模块等模块组成。
1.车型选择模块。电机转一圈进过光敏传感器会产生一个脉冲信号,一圈周长为C,圈数为N,里程为S,则S=C*N。车型选择模块输出的脉冲信号一个脉冲代表100米,由上述公式可算出圈数N,即为分频数。
4种车轮直径(d)为52.21cm,53.98cm,55.87cm,57.90cm。经公式N=100/(3.14*d),可得分频数为60,58,56,54,如表1所示。
表1 车型选择
2.里程计算模块。车型选择模块输出百米脉冲到里程计算模块,里程计算模块在脉冲上升沿到来时计数一次,计数满10次即为一公里。输入”DIP”为设置起步里程,超过起步里程每计数满10次,起步里程加一,同时输出一个公里脉冲给计费模块。
3.计费模块。计费模块接收到一公里脉冲信号后,再其上升沿到来时计费一次,当计费小于设置的起步价时数码管显示起步价,超过起步价时上升沿到来一次按2元或3元加价一次。当出租车停止等待时,由红外控制输出等待信号waite为高电平,此时进入等待计费,满一分钟加一元。
4.出租车计费模块设计。出租车计费模块的设计原理图如图3所示。
图3 出租车计费模块原理图
5.出租车计费模块仿真。起步价输入为“00”即5元,当计费超过5元时,price输入为“0”则按2元计价,price输入为“1”则按3元加价,如图4所示。
图4 出租车计费模块仿真结果
(三)红外遥控模块设计。红外控制模块设计分为红外解码和红外控制两个模块。开发板板载的红外接收头,其型号为HS0038B。红外控制模块用于控制电机及计价器的设置,以此模拟出租车从打火启动到乘客上下车最后熄火的过程。
将所设计的代码下载到FPGA上进行系统功能测试,可以实现在遥控器控制下系统的正常工作,其中S6状态载客计费的硬件测试结果如图5所示。
图5 S6状态,载客计费