您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 基于单片机的无线温度计设计报告
1五邑大学信息工程学院课程设计报告课程名称:无线温度检测器专业:电子信息工程班级:学号:姓名:指导教师:设计时间:2016年10月评定成绩:2无线温度监测器一、设计任务与要求1.实时获取被测对象温度,温度测量范围:-10℃~+45℃;测量精度:0.1℃。2.无线传输实时获取的温度值,传输距离10m。3.实时显示接收到的温度值。4.基于单片机实现。二、课题分析与方案选择在日常生活及工业生产过程中,经常要用到温度的检测及控制,温度是生产过程和科学实验中普遍而且重要的物理参数之一。无线系统具有不借助外部网络、不受布线限制的优点。本次课程设计把这两部分结合起来,用无线数据传输技术来实现温度传感器的温度数据采集。方案一:传统的测温元件有热电偶和热电阻。而热电偶和热电阻测出的一般都是电压,再转换成对应的温度,这些方法的缺点是硬件电路相对复杂,需要比较多的外部硬件支持。方案二:采用DS18B20作为温度监测元件,并且基于STC89C52单片机设计温度测量及报警电路。本次设计采用方案二,采用无线收发模块NRF24L01来实现无线传输功能,温度测量范围-55℃~+125℃,使用LCD液晶显示,并且能设置温度报警上下限。三、单元电路分析与设计1.原理分析单片机STC89C52具有低电压供电和体积小等特点,晶振采用12MHz。复位电路采用上电加按钮复位。晶振电路复位电路显示电路:显示电路采用LCD1602,滑动电阻R6用来调节背光亮度。3显示电路报警电路当单片机通电后,进入温度报警上下限调节,此时显示软件设置的温度报警上线,按s2对报警温度进行加一,按s3对报警温度进行减一。当实际温度超过所设温度上下限时,单片机P3.0口会输出高电平,红色led灯会亮起。温度传感器:DS18B20温度传感器是美国DALLAS半导体公司最新推出的一种改进型智能温度传感器,与传统的热敏电阻等测温元件相比,它能直接读出被测温度,并且可根据实际要求通过简单的编程实现9~12位的数字值读数方式。DS18B20的性能特点如下:1、独特的单线接口仅需要一个端口引脚进行通信;2、多个DS18B20可以并联在惟一的三线上,实现多点组网功能3、无须外部器件;4、可通过数据线供电,电压范围为3.0~5.5V;5、零待机功耗;6、温度以9或12位数字;7、用户可定义报警设置;8、报警搜索命令识别并标志超过程序限定温度(温度报警条件)的器件;9、负电压特性,电源极性接反时,温度计不会因发热而烧毁,但不能正常工作;DS18B20采用寄生电源供电方式,此时DS18B20的1脚接地,2脚作为信号线,3脚接电源。由于单线制只有一根线,因此发送接口必须是三态的。4温度传感器无线收发模块nrf24l01输出功率频道选择和协议的设置可以通过SPI接口进行设置,单片机可通过IRQ引脚快判断是否完成数据接收和数据发送。四、总原理图及元器件清单发送端:5接收端:2.元件清单序号元器件名称型号主要参数数量备注1无线收发模块NRF24L0122智能温度传感器DS18B2013单片机STC89C5224显示器LCD160215电容22nf46排阻10K27晶振12MHZ28稳压器az1117t-3.329按键开关310LED111蜂鸣器112电阻10K26五、安装与调试1.调试过程描述一开始接收端单片机通电后显示屏背光亮,内容无显示,经检测电路后发现信号控制线断裂。修复后显示屏能显示学号、字母信息,但是无法显示温度数字。初步判断是程序出问题,导致无线模块没有正确接收信号。之后更改程序,编程控制端口收发信号,最终调试成功。2.实物照片六、性能测试与分析在本次设计中,利用单片机实现了温度测量,测量精度为0.1℃,在发送端温度传感器的数据能实时发送到接收端,无线传输距离达到10m以上,符合设计要求。七、结论与心得从确定题目,研究原理图,制作电路板,到焊接调试,当中出现不少问题,但是我迎难而上,把问题逐个解决,最终完成课程设计,我从中积累了很多解决问题的宝贵经验。其中最大的问题是无线接收模块在接收温度信息时延迟比较大,后来通过查阅资料修改信道,问题得以解决。另一个问题是当温度计一通上电后,LED灯就会一直亮。在确定电路连接和原理图7正确后依然不能解决,于是我跟同学讨论,发现是程序出错,使得单片机与LED相连的I/O口一直输出高电平,修改程序后温度计才正常工作!在排查问题过程中我的耐心得到了锻炼,并且与同学们的讨论更是让我受益匪浅!通过这次课程设计我进一步熟悉了单片机的内部结构和工作原理,了解到无线收发模块的使用方法,掌握了单片机应用系统设计的基本方法和步骤,让自己的理论水平和实践能力上升到一个新的台阶,同时我也认识到实践的重要性。程序(程序本身没问题,只是排版乱了,大家下载回来注意修改一下双斜杠,双斜杠后面的内容会变成注释,不需要删减内容,只需要修正好回车键,都是行数的问题)发送端:#includereg51.h#includeintrins.h//#includeapi.h#defineucharunsignedchar#defineTX_ADR_WIDTH5//发射地址的字节个数#defineTX_PLOAD_WIDTH2//发射字节ucharconstTX_ADDRESS[TX_ADR_WIDTH]={0x34,0x55,0x10,0x10,0x01};ucharrx_buf[TX_PLOAD_WIDTH];uchartx_buf[TX_PLOAD_WIDTH];uchardistance_data[2];ucharflag;//标志sbitCE=P1^0;//发射高电平大于10MS接收高电平sbitCSN=P1^1;//低电平ISP使能8sbitSCK=P1^2;//下降沿sbitMOSI=P1^3;//MCU出sbitMISO=P1^4;//MCU入sbitIRQ=P1^5;//中断ucharbdatasta;sbitRX_DR=sta^6;//接收数据准备就绪sbitTX_DS=sta^5;//已发送数据sbitMAX_RT=sta^4;sbitDQ=P3^0;unsignedchartime;//设置全局变量,专门用于严格延时//*********************************************NRF24L01***********************//***************************************NRF24L01寄存器指令#defineREAD_REG0x00//读寄存器指令#defineWRITE_REG0x20//写寄存器指令#defineRD_RX_PLOAD0x61//读取接收数据指令#defineWR_TX_PLOAD0xA0//写待发数据指令#defineFLUSH_TX0xE1//冲洗发送FIFO指令#defineFLUSH_RX0xE2//冲洗接收FIFO指令#defineREUSE_TX_PL0xE3//定义重复装载数据指令9#defineNOP0xFF//保留//*************************************SPI(nRF24L01)寄存器地址#defineCONFIG0x00//配置收发状态,CRC校验模式以及收发状态响应方式#defineEN_AA0x01//自动应答功能设置#defineEN_RXADDR0x02//可用信道设置#defineSETUP_AW0x03//收发地址宽度设置#defineSETUP_RETR0x04//自动重发功能设置#defineRF_CH0x05//工作频率设置#defineRF_SETUP0x06//发射速率、功耗功能设置#defineSTATUS0x07//状态寄存器#defineOBSERVE_TX0x08//发送监测功能#defineCD0x09//地址检测#defineRX_ADDR_P00x0A//频道0接收数据地址#defineRX_ADDR_P10x0B//频道1接收数据地址#defineRX_ADDR_P20x0C//频道2接收数据地址#defineRX_ADDR_P30x0D//频道3接收数据地址#defineRX_ADDR_P40x0E//频道4接收数据地址#defineRX_ADDR_P50x0F//频道5接收数据地址#defineTX_ADDR0x10//发送地址寄存器10#defineRX_PW_P00x11//接收频道0接收数据长度#defineRX_PW_P10x12//接收频道0接收数据长度#defineRX_PW_P20x13//接收频道0接收数据长度#defineRX_PW_P30x14//接收频道0接收数据长度#defineRX_PW_P40x15//接收频道0接收数据长度#defineRX_PW_P50x16//接收频道0接收数据长度#defineFIFO_STATUS0x17//FIFO栈入栈出状态寄存器设置//*****************************************************************************voidinit_io(void){CE=0;CSN=1;SCK=0;}voiddelay_ms(unsignedintx){unsignedinti,j;for(i=0;ix;i++){j=108;while(j--);11}}ucharSPI_RW(ucharbyte)//发送指令,接受状态,返回值为状态值{ucharbit_ctr;for(bit_ctr=0;bit_ctr8;bit_ctr++){MOSI=(byte&0x80);byte=(byte1);SCK=1;byte|=MISO;SCK=0;}return(byte);}ucharSPI_RW_Reg(ucharreg,ucharvalue){ucharstatus;CSN=0;status=SPI_RW(reg);SPI_RW(value);CSN=1;12return(status);}ucharSPI_Read(ucharreg){ucharreg_val;CSN=0;SPI_RW(reg);//写指令reg_val=SPI_RW(0);//读reg的内容CSN=1;return(reg_val);}ucharSPI_Read_Buf(ucharreg,uchar*pBuf,ucharbytes){ucharstatus,byte_ctr;CSN=0;status=SPI_RW(reg);for(byte_ctr=0;byte_ctrbytes;byte_ctr++)pBuf[byte_ctr]=SPI_RW(0);CSN=1;return(status);}ucharSPI_Write_Buf(ucharreg,uchar*pBuf,ucharbytes){13ucharstatus,byte_ctr;CSN=0;status=SPI_RW(reg);for(byte_ctr=0;byte_ctrbytes;byte_ctr++)SPI_RW(*pBuf++);CSN=1;return(status);}voidTX_Mode(void){CE=0;SPI_Write_Buf(WRITE_REG+TX_ADDR,TX_ADDRESS/*接收模块的地址*/,TX_ADR_WIDTH/*地址宽度5*/);SPI_Write_Buf(WRITE_REG+RX_ADDR_P0/*通道0接收数据地址*/,TX_ADDRESS,TX_ADR_WIDTH);SPI_Write_Buf(WR_TX_PLOAD,/*写待发数据指令a0*/tx_buf,TX_PLOAD_WIDTH/*20*/);SPI_RW_Reg(WRITE_REG+EN_AA,0x01);//数据通道0应答允许SPI_RW_Reg(WRITE_REG+EN_RXADDR,0x01);//接
本文标题:基于单片机的无线温度计设计报告
链接地址:https://www.777doc.com/doc-4316849 .html