一款基于FPGA的温度检测报警系统设计与实现

温度是现代化工业生产、实验室研发需要控制的最重要参数之一。温度检测的准确性可以直接影响到工作的安全、产品的质量、操作的成功。现在许多厂家研制的温度检测设备在精准和速度的基础上开始发展功能的多样化。本系统设计的温度检测和报警系统可广泛的应用于各种温度控制领域,为加快工业的生产、推进科研的脚步。新型温度检测系统的研发将给社会带来更多的便利。

本次设计是基于FPGA的温度检测及报警系统,通过与DS18B20温度传感器进行连接可以实现将周围环境温度显示到动态数码管上并传递给PC端,并可以设定报警阈值,在超出温度阈值时实现报警,在温度继续上升时根据设定阈值频率发生变化,可以对忘记观察温度的使用者做出提醒。本次课题是基于Altera开发软件Quartus软件下使用Verilog硬件描述语言编程的设计方法,完成对整个温度检测报警系统程序的编写和仿真调试。

1章 绪  ............................................................................................................... 1

1.1 论文研究的意义与目的.............................................................................................. 1

1.2论文研究的内容与方法.............................................................................................. 1

1.2.1研究内容................................................................................................................... 1

1.2.2研究方法................................................................................................................... 1

1.3预期目标.......................................................................................................................... 1

1.4课题研究现状................................................................................................................. 2

2章 关键技术介绍............................................................................................... 3

2.1串口协议.......................................................................................................................... 3

2.2DS18B20操作命令........................................................................................................ 4

2.3PWM发生电路设计...................................................................................................... 6

3 系统设计............................................................................................................ 7

3.1设计所用工具介绍........................................................................................................ 7

3.2整体架构.......................................................................................................................... 8

3.3温度检测.......................................................................................................................... 9

3.4 DS18B20_dri模块...................................................................................................... 10

3.5串口接收........................................................................................................................ 13

3.6串口发送........................................................................................................................ 14

3.7报警模块........................................................................................................................ 15

3.8数码管模块.................................................................................................................... 15

4 仿真结果分析............................................................................................... 17

4.1模块仿真........................................................................................................................ 17

4.1.1 串口接收(uart_rx)模块..................................................................................... 17

4.1.3 串口发送(uart_tx)模块..................................................................................... 18

4.1.4 数码管显示模块.................................................................................................... 18

4.1.5 报警模块................................................................................................................ 19

4.1.6 整体仿真................................................................................................................ 19

4.2 下载验证........................................................................................................................ 19

4.2.1 温度显示................................................................................................................ 19

4.2.2 报警........................................................................................................................ 21

5 结论..................................................................................................................... 24

串行通信通常分为两种:同步串行通信和异步串行通信。同步串行通信需要通信双方在同一时钟的控制下,同步传输数据;异步串行通信是指通信双方使用各自的时钟控制数据的发送和接收过程。UART是一种采用异步串行通信方式的通用异步收发传输器(universal asynchronousreceiver- transmitter),它在发送数据时将并行数据转换成串行数据来传输,在接收数据时将接收到的串行数据转换成并行数据。

UART串口通信需要两根信号线来实现,一根用于串口发送,另外一根负责串口接收。UART在发送或接收过程中的一帧数据由4部分组成,起始位、数据位、奇偶校验位和停止位,如图所示。其中,起始位标志着一帧数据的开始,停止位标志着一帧数据的结束,数据位是,一帧数据中的有效数据。校验位分为奇校验和偶校验,用于检验数据在传输过程中是否出错。奇校验时,发送方应使数据位中1的个数与校验位中1的个数之和为奇数;接收方在接收数据时,对1的个数进行检查,若不为奇数,则说明数据在传输过程中出了差错。同样,偶校验则检查1的个数是否为偶数。

20.png

UART通信过程中的数据格式及传输速率是可设置的,为了正确的通信,收发双方应约定并遵循同样的设置。数据位可选择为5678位,其中8位数据位是最常用的,在实际应用中一-般都选择8位数据位;校验位可选择奇校验、偶校验或者无校验位;停止位可选择1(默认)1.52位。串口通信的速率用波特率表示,它表示每秒传输二进制数据的位数,单位是bps(/),常用的波特率有9600192003840057600以及115200等。

根据本次设计,可以大致规划出系统的工作流程:FPGA控制DS18B20采集温度数据,并将收到的温度数据转换成十进制显示在数码管上。由此画出的功能框图,程序中各模块端口及信号连接如下图

21.png

Ds18b20_dri:本模块的功能是通过命令实现对温度传感器工作状态的控制,最终实现对检测到的温度进行读写。

Uart_rx:本模块功能是负责接收串口的数据,将串行数据转换为并行数据。将数据传送给temp_store模块来进行对报警温度的设置。

Seg_disp:本模块的功能是将din通过数码管显示出来。

Beep:当温度达到设置阈值实现报警功能。

Temp_store:通过串口设置温度值。

Uart_tx:本模块功能是将输入din转换为串口数据dout发送出去,同时将数据发送给PC端显示出来。

DS18B20温度传感器可以测量从-55摄氏度到+125摄氏度范围内的温度,可以说测量温度的范围很大满足了许多特殊工作环境中的需求,精准度为正负0.5摄氏度。也是相当精准了。采集到的温度直接以数字方式通过总线传输,很大程度上提高了外接对系统的干扰。测量出来的温度同意通过简单的编程达到以9-12数字的形式读取出来。只需给它提供一个3-5.5V的电压就可以显示正常工作,采用了很多种封装形式,使其在达到设定的报警温度后如果电源断掉数据然仍会保存在EEPROW中。图DS18B20内部结构图。

22.png

DS18B20驱动模块使用三段式状态机来实现温度的读取,从图3.6可以比较直观的看到每个状态实现的功能以及跳转到下一个状态的条件。首先初始化,初始化完成后,先滤过单总线上的DS18B20身份识别,这时发送跳过ROM的命令,直接进入写字节状态,发送命令给DS18B20;在完成该命令之后发送温度转换命令完成温度转换,状态机再次进入写字节状态;写完温度转换命令后,为了兼容寄生电源供电,进入延时状态产生一定的延时,延时结束后再次进入初始化状态,初始化完成后发送跳过ROM命令,进入写字节状态;写完跳过ROM命令后,发送读取温度命令,从DS18B20中读取温度数据,读取完温度数据后,再次进入初始化状态以循环操作。

DS18B20驱动模块的状态跳转图。

23.png


24.png

Din输入数据,dout输出数据,dout_vld为输出数据的指示信号Cnt1接收了几个bitflag_add为正在读UART帧的标志,如图din为串口的输入数据,在无数据时保持为高电平,有数据发送时,首先发送一个为低电平的起始信号,接着发8bit的有效数据,先发低位再发高位,按上图所示,发送的数据分别为“10101010”,当din输出停止位的同时din_vld=1 dout在接收到起始位信号后将有效数据分别放在相应的位置,在接收到8个比特后得到的数据为01010101,也就是十六进制的55,此时,输入数据变为高电平,代表停止位,那么接收一个字节数据完成,产生一个有效信号dout_vld,为高电平窄脉冲信号。


  • 微信
  • 赶快加我聊天吧
  • 开发交流群
  • 海纳百川,大家来水
  • weinxin
微义工作室

发表评论 取消回复