《基于FPGA的远程温度检测系统说明书》由会员分享,可在线阅读,更多相关《基于FPGA的远程温度检测系统说明书(45页珍藏版)》请在金锄头文库上搜索。
1、评阅老师分 数数字系统课程设计 班 级 13级信息过程1班 组 长 麦锐杰 组 员 刘清斌、方加鹏 一、 题目要求基于FPGA和ZigBee的远程温度检测系统:终端进行环境温度的检测,数据返回至控制端 ,实时显示检测到的温度。若温度超过阀值,LED灯闪烁报警。二、 设计方案系统整体思路:温度传感器检测获取温度信息,通过ZigBee协议与FPGA控制板进行数据传输。ZigBee模块1 + 温度传感器ZigBee模块2串行接口FPGA 图1 系统整体框图三、 模块实现(一) ZigBee模块实现1. zigbee介绍:Zigbee是基于IEEE802.15.4标准的低功耗局域网协议,又称为紫蜂协议
2、,其特点是近距离、低复杂度、自组织、低功耗、低数据速率。Zigbee协议从下到上分别分为物理层PHY、媒体访问控制层MAC、传输层TL、网络层NWK与应用层APL。本课程设计中zigbee模块采用的是TI公司生产的CC2530F256芯片,符合2.4G_Hz IEEE802.15.4应用。协议栈使用的是TI公司搭建的Zstack,这是当前业界领先、应用面很广的协议栈,结合OSAL操作系统,使得用户在搭建系统、进行多任务分配方面有很大的便利性。其他协议栈还有freakz、msstatePan等。2. DS18B20温度传感器:DS18B20是当前市场主要的温度传感器之一,主要特性有以下几点:1)
3、 适应电压范围广,电压范围在3.0V5.5V,是多数单片机的供电电压,因此大多数在单片机上使用。2) 它具有一线总线的特点,在于微处理器连接时仅需要一条口线即可实现微处理器与DS18B20之间的双向通讯。3) DS18B20在使用中不需要任何外围元件,全部传感元件及转换电路集成在形如一只三极管的集成电路类。4) 温度测量范围在-55 125,精度约为0.5。DS18B20温度采集部分:定义DS18B20在CC2530上的输入脚为P0.7:P0DIR &= 0x7f;温度读取主函数如下:unsigned char ReadDs18B20(void) unsigned char V1,V2; /定
4、义高低8位 缓冲 unsigned char temp; /定义温度缓冲寄存器 Ds18b20Initial(); Ds18b20Write(0xcc); / 跳过读序号列号的操作 Ds18b20Write(0x44); / 启动温度转换 Ds18b20Initial(); Ds18b20Write(0xcc); /跳过读序号列号的操作 Ds18b20Write(0xbe); /读取温度寄存器等(共可读9个寄存器) 前两个就是温度 V1 = Ds18b20Read(); /低位 V2 = Ds18b20Read(); /高位 temp = (V1 4)+(V2 & 0x07)*16); /转换
5、数据 return temp;我们从DS1B20读取到用字符串表示的温度值temp,将其送入cc2530模块准备进行发送。3. Zigbee发送部分:1) Zigbee工作模式选取:采用点播方式,给zigbee协调器定义短地址为0x0000:SampleApp_P2P_DstAddr.addr.shortAddr = 0x0000; /协调器短地址给zigbee终端定义短地址为0xFFFF:SampleApp_Periodic_DstAddr.addr.shortAddr = 0xFFFF;/终端短地址2) 串口模式修改:我们在FPGA开发板设计的串口规格是:9600波特率、8位数据位、1位停
6、止位、无奇偶校验位。因此zigbee的串口规格应该也改为与其相同,因此在stack的串口定义函数MT_UART.c进行相应的修改:#define MT_UART_DEFAULT_BAUDRATE HAL_UART_BR_9600/波特率定为9600.uartConfig.callBackFunc = NULL;/关闭zigbee串口的回调。3) zigbee终端与协调器网络搭建过程:图2 ZigBee终端与协调器网络搭建过程4) 终端数据发送过程:当zigbee终端模块从DS18B20接收到数据时,便开始发送模块,触发数据发送任务。点对点发送函数:Void SampleApp_Send_P2P
7、_Message( void )if ( AF_DataRequest( &SampleApp_P2P_DstAddr, &SampleApp_epDesc, SAMPLEAPP_P2P_CLUSTERID, 1, str, &SampleApp_TransID, AF_DISCV_ROUTE, AF_DEFAULT_RADIUS ) = afStatus_SUCCESS ) else / Error occurred in request to send. AF_DataRequest中DstAddr、epDesc为目标地址的属性,SAMPLEAPP_P2P_CLUSTERID为发送任务的I
8、D,触发此ID则进行发送命令。str为我们要发送的数据,我们在此设计中发送的是八位二进制数的温度,因此长度设定为1,str存放的是温度值。 图3 温度数据发送框图实验过程中,设置数据发送的周期SAMPLEAPP_SEND_PERIODIC_MSG_TIMEOUT为300ms,即0.3秒更新一次温度值。4. ZigBee与FPGA的物理连接zigbee底板通过PL2303芯片与电脑串口进行连接,PL2303芯片是将数字电平信号进行打包,转化成usb协议包,由电脑进行解包。而FPGA底板则是通过MAX232进行连接,max232直接将数字信号转化为RS232模拟电平。因此无法通过USB线将zigb
9、ee模块与FPGA开发板直接相连解决办法是在zigbee底板拉出异步传输线TX与RX,直接与cycloneii芯片上的RX和TX对应连接。(二) 基于FPGA的串行接口模块1. 模块概述该串行接口电路用于实现cc2530F256芯片与FPGA的通信,把收到的串行数据转换成并行数据进行输出。由于FPGA只需接收数据,不需要向cc2530F256芯片发送数据,故该接口只由波特率发生器和接收模块组成。2. 波特率发生器图4波特率发生器引脚图波特率发生器即分频器。clk:FPGA提供的系统时钟接入resetb:复位bclk:时钟信号输出,接收模块的时钟输入波特率发生器的VHDL代码:LIBRARY I
10、EEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;entity baud is Port (clk,resetb:in std_logic; bclk:out std_logic);end baud;architecture behave of baud isbeginprocess(clk,resetb)variable cnt:integer;begin if resetb=1 then cnt:=0; bclk=330 thencnt:=0; bclk=
11、1; -设置分频系数 elsecnt:=cnt+1;bclk=0; end if; end if;end process;end behave;3. 接收模块1) 接收模块的作用是把收到的串行数据转换成并行数据进行输出 图5 接收器引脚图resetr(输入):复位信号;bclkr(输入):输入时钟;rxdr(输入):串行数据输入信号;rbuf7.0(输出):并行数据输出总线;r_ready(输出):数据接收完毕信号。串行接收模块框图如图6,程序在检测到起始位后(rxdr由1跳变到0),计数连续8个接收时钟采样仍然是低电平后,开始接收串行数据,当采样计数器计数结束后,所以数据已移位输入RSR。最
12、后对高电平进行检测,检测到正确的停止位后说明本帧数据接收完毕。将数据转存在数据寄存器RBR中,串/并转换后,输出8位并行数据rbuf7.0。其中,RBR的状态可通过引脚r_ready来表示。r_ready输出高电平1表示数据接收有效。 图6 接收模块工作框图2) 接收模块状态机接收状态机一共有5个状态:等待起始位R_START、求中点R_CENTER、等待采样R_WAIT、采样R_SAMPLE、停止位接收R_STOP。Rxd_sync=0r_startrxd_sync=0xd_syncr_centerr_stopCount=“1110”rcnt=framlenrCount=“0100”r_sa
13、mpler_waitcount=“1110”rcntframlenr 图7 接收器状态机ASM图3) 接收模块VHDL代码:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;entity reciever isGeneric(framlenr: integer :=8);port(rxdr: in std_logic;bclkr: in std_logic;resetr: in std_logic;r_ready:out std_logic;rbuf:out std_logic_vector(7 downto 0);end entit