2021寒假在家练项目4 – 陈国钊
2021寒假在家练项目4-基于小脚丫FPGA的综合技能训练板制作一个可以定时、测温、报警、控制的系统
标签
FPGA
小脚丫
逻辑编程
AZhao
更新2021-02-26
1181

 

 

项目背景

      FPGA(Field Programmable Gate Array)是在PAL、GAL等可编程器件的基础上进一步发展的产物。它是作为专用集成电路(ASIC)领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点。FPGA设计不是简单的芯片研究,主要是利用 FPGA 的模式进行其他行业产品的设计。与传统模式的芯片设计进行对比,FPGA 芯片并非单纯局限于研究以及设计芯片,而是针对较多领域产品都能借助特定芯片模型予以优化设计。从芯片器件的角度讲,FPGA 本身构成 了半定制电路中的典型集成电路,其中含有数字管理模块、内嵌式单元、输出单元以及输入单元等。本项目便是利用FPGA来完成一个可以定时、测温、报警、控制的系统。

 

 

项目目标成果

1.实现一个可定时时钟的功能,用小脚丫FPGA核心模块的4个按键设置当前的时间,OLED显示数字钟的当前时间,精确到分钟即可,到整点的时候比如8:00,蜂鸣器报警,播放音频信号,最长可持续30秒;

2.实现温度计的功能,小脚丫通过板上的温度传感器实时测量环境温度,并同时间一起显示在OLED的屏幕上;

3.定时时钟整点报警的同时,将温度信息通过UART传递到电脑上,电脑上能够显示当前板子上的温度信息(任何显示形式都可以),要与OLED显示的温度值一致;

4.PC收到报警的温度信号以后,将一段音频文件(自己制作,持续10秒钟左右)通过UART发送给小脚丫FPGA,蜂鸣器播放收到的这段音频文件,OLED屏幕上显示的时间信息和温度信息都停住不再更新;

5.音频文件播放完毕,OLED开始更新时间信息和当前的温度信息。

 

 

项目所用资源

1.核心板:基于LatticeXO2-4000HC的STEP-MXO2小脚丫

2.核心板板载资源:

       4路拨码开关(使用1个);

       4路按键开关(使用4个);

3.扩展板所用资源:

       SSD1306驱动的128*32分辨率的OLED屏幕;

       DS18B20Z单总线温度传感器;

       无源蜂鸣器;

       micro-usb端口的UART数据传输模块;

 

 

项目实现

1.整体设计

      整个项目的代码实现可以分为如下五个模块:温度传感器模块、时间模块、UART数据传输模块、OLED显示屏模块、蜂鸣器模块。

      总体来看,项目代码需要输入(INPUT)如下:时钟CLK、温度总线DS_wire、UART数据接收线RxD、时间调节按键、重置信号(因为按键外设不够用,只能将一个拨码开关当作重置信号来源)。

      需要输出(OUTPUT)如下:UART数据传输线TxD、OLED五路控制信号、蜂鸣器输出。

      整体模块连接示意图如下:

FrT62Q8QP9m5S4jOILAZHlvRNTUM

 

2.OLED显示屏

      OLED显示屏模块完成温度数据和时间数据的显示,并在温度报警信号来临时暂停OLED显示屏的刷新。本项目使用的OLED显示屏代码主要来自于电子森林的案例分享,通过稍加修改使得其能够接收温度数据以及时间数据并将其显示在显示屏上,并能够接收温度报警信号实现显示屏停止刷新的功能。具体见附件。

 

3.DS18B20Z温度传感器

      温度传感器模块通过温度总线DS_wire与温度传感器外设进行数据交互,得到外界温度数据,并将其分发到UART数据传输模块和OLED显示屏模块。本项目使用的DS18B20Z温度传感器代码主要来自于电子森林的案例分享,通过修改使得其输出数据从纯2进制表达变化为温度数据百位、十位、个位、小数位的BCD码表达,而后再将该BCD码数据接入OLED显示屏,或是通过UART传输给上位机,从而实现不同模块接口对接。具体见附件。

 

4.Uart通信

      UART数据传输模块负责与上位机进行通信。不仅要把来自温度传感器的温度数据传输给上位机,还要接收来自上位机的报警信号以及报警音乐数据,并将它们送至蜂鸣器。本项目使用的UART通信代码主要来自于电子森林的案例分享,通过深入分析钻研该案例的代码,了解如何使用该模块的输入输出接口,完成了与上位机的通信。具体见附件。

 

5.蜂鸣器模块

      蜂鸣器模块接收来自OLED显示屏的整点信号来达到整点报时功能,并要接收来自UART的报警音乐数据,转发来自UART的温度报警信号给OLED显示屏。本项目使用的蜂鸣器代码小部分来自于电子森林的案例分享。电子森林的案例给出了想要蜂鸣器发出对应声音所需的数据表。而我自己通过编写一个状态机,实现了音乐数据装载、随时钟逐步读取音乐数据并发送到蜂鸣器等功能。具体见附件。

 

6.时间模块

      时间模块用于产生时间数据发送到OLED显示屏,并可以被四个按键来修改当前时间。该模块全部由自己完成。模块输出时钟十位、时钟个位、分钟十位、分钟个位的BCD码到OLED显示屏,也可以通过长按按钮来修改时间。为了防止“一次短时间按下按键触发多次时间修改”情况的出现,我还编写了一个可重复触发的单稳态负脉冲触发器,达到了按钮每被按下超过0.5秒,则产生一次时间修改的功能。具体见附件。

 

 

项目完成情况

      本项目完整的完成了项目目标要求即:

      1.温度和时间显示在OLED显示屏上。

      2.时间可以通过四个按键进行修改(长按进行连续修改)。

      3.时间到达整点时,蜂鸣器进行整点报时。

      4.当与上位机进行连接时,温度数据可以在上位机中显示,且与OLED显示屏上温度数据保持一致。

      5.当上位机发送报警信号(音乐数据文件)时,板子接收音乐数据并通过蜂鸣器播放该音乐,且OLED显示屏停止刷新,即时间与温度保持不变。音乐播放完毕后,OLED重新开始刷新。

 

      项目占用核心板资源图如下:

FtDKTLuvKHhEXH460DzDZ3K41J9u

 

      板子上电后图像:

FseGnHbdL9kAq3IovjNa3YqkHlDs

 

      与上位机进行温度数据通信图:

Ftmc6HkOZUilUMBjJ-am7dvL_JFf

 

项目总结以及改进计划

      在本次项目开始之前,我并没有接触过FPGA的相关知识,也没有学习过Verilog语言,可以说是没有什么基础。因此,在开始整个系统的设计前,我先在B站上寻找了视频课程对Verilog语言进行了简单的学习,视频内容来自于西安电子科技大学的蔡觉平老师。

       学习了Verilog语言的基本知识以后,我通过回顾硬禾学堂的直播课,以及电子森林上关于点亮LED的教程,完成了我的第一个FPGA项目---点亮一颗LED灯。这个程序虽然仅有短短的几行,但是让我基本了解了如何利用Lattice Diamond来写一个FPGA项目,包括如何创建与板子对应的项目、编写Verilog代码、如何进行综合、如何分配或修改管脚、如何将程序写入板子中等等。

       有了对编写FPGA项目的基本流程的了解,我开始了整个项目的编写。首先学习的是OLED显示屏的驱动。通过钻研电子森林上分享的OLED显示屏驱动代码,我对如何编写一个状态机有了初步的了解,并尝试修改代码,举一反三的来更改显示屏的内容。这一部分是我花费最多时间的地方,也为我后面的工作打下了基础。例如,想要让温度数据显示在OLED显示屏上,只需要做好数据接口对接工作便可以了。

       在之后的工作中,我也遇到了许多困难如蜂鸣器不工作、UART通信失败,上位机程序不会用等等,但都通过上网查询资料、借鉴学习别人已经分享的项目等等方法一一克服,最终完成了整个项目。总体来说,我认为还是较为满意的。

       项目也有许多可以改进的地方,如:蜂鸣器在整点报时时,能否在不同的时间播报不同铃声?能不能设置一个按键,使得人在听到蜂鸣器铃声后,可以直接掐掉铃声?项目占用的核心板资源,能不能通过优化再少一点?

 

附件下载
project-STEP-MOX2.zip
团队介绍
北京理工大学-信息与电子学院
团队成员
陈国钊
北京理工大学-信息与电子学院-好好学习天天向上的普通大三学生
评论
0 / 100
查看更多
目录
硬禾服务号
关注最新动态
0512-67862536
info@eetree.cn
江苏省苏州市苏州工业园区新平街388号腾飞创新园A2幢815室
苏州硬禾信息科技有限公司
Copyright © 2023 苏州硬禾信息科技有限公司 All Rights Reserved 苏ICP备19040198号