基于51单片机的温度采集系统简单应用设计

发布者:科技律动最新更新时间:2014-10-09 来源: dzsc关键字:51单片机  温度采集系统  DS1820 手机看文章 扫描二维码
随时随地手机看文章

  0 引言

  在工业现场,生产环境恶劣,不能长时间停留在现场采集温度数据,而有限传输具有温度检测难、可操作性差。高科技农业现场,采集温度时,布线困难复杂,成本高。为解决以上困难,采用无线方式。常用的无线方式为433 MHz小无线、ZigBee、CDMA/GPRS、3G等方式,考虑到性价比和现场情况,本系统采用JF24D?B完成无线收发。为了采集不同高度的温度,可在不同高度安置无线网络传感器。但考虑到成本和传感器的电源替换问题,采用简易螺旋直升机升降不同高度来采集温度。

  通过控制直升机的升降让它达到测量高度进行温度测量并传送控制单元处理,测量完毕返回便于无线传感器的维护。

  1 总电路设计

  为了采集高空温度,采用了简易螺旋直升机,内置由AT89C51单片机、DS1820数字芯片,可实时采集不同高度的温度。并通过JF24D?B模块将信息送至ARM7开发板,ARM7开发板用于数据显示和数据处理,JF24D?B用于数据获取和命令下达,控制直升机的升降。在ARM开发板上通过μClinux系统进行数据的处理,软件同时在RHEL 4.0上进行编译和处理。本设计选取对业界通用的C语言指令、Shell指令和Python指令。C语言指令主要是用于单片机AT89C51 的驱动编程;Shell指令主要是用于ARM7开发板上的数据处;Python指令主要是用于数据图像显示。采用这几个指令的原因是占用的空间小、执行速度快、兼容性强。

  系统整体框图如图1所示。

  2 基于单片机的温度采集无线传感器模块

  2.1 硬件电路设计

  硬件电路采用AT89C51 单片机进行控制。采用DS18B20进行温度采集。采用JF24D?B[1]进行无线模块的发送和接收,JF24D?B是一款低成本,小体积,高性能的全双工无线通信模块。控制直升飞机的升降采用另外一个无线模块。温度采集模块中,单片机P1.0管脚连接DS18B20 的DQ,用于采集现场温度,P2 口连接无线模块JF24D?B.

  2.2 基于单片机的温度采集系统软件设计

  首先对程序的初始化,完成DS18B20 和JF24D?B无线传输模块的初始化状态的设定。采用定时中断,每隔10 s采集一次温度,并进入发射模式。

  单片机发给JF24D?B 无线发送模块发射指令,同时LED2 闪烁,随之进入接收模式。单片机等待ARM7发来的应答信号20 ms,如果器件收到应答,则LED1闪烁。器件没有收到应答则再发送无线模块发射指令。

  主程序及中断程序设计框图如图2,图3所示。

  3 基于ARM7 的无线接收与控制模块

  3.1 ARM7简介

  ARM7 是32 位通用微处理器ARM(Advanced RISCMachines)家族中的一员,具有比较低的电源消耗和良好的性价比,基于(精简指令)RISC结构,拥有比较高的指令处理能力和实时中断响应能力。ARM指令集由于应用了流水线技术,指令处理和存储系统的各个部分都可以连续运行,提高运行速度。采集到的温度数据通过无线传送模块送至ARM7 处理,提高系统数据处理能力,便于完成与用户友好交互界面显示。[page]

  3.2 JF24D?B无线传输模块的信号解析

  进行数据传输就必须遵循一定的协议,在该设计中使用的JF240?B无线传输模块使用的是Modbus协议来进行数据的传输和解析。Modbus协议规定了消息、数据的结构、命令和应答方式,数据通信采用MASTER/SLAVE方式,MASTER端发出数据请求消息,SLAVE端接收到正确消息后就发送数据到MASTER端也可直接发消息修改SLAVE端的数据,实现双向读写。

  为了将直升机上的JF24D?B和控制器上的JF24D?B相互关联需要将节点映射为Modbus设备及其寄存器,即建立地址映射表。Modbus串行链路PDU提供了地址域,即Modbus地址[2].地址映射表被建立后以链表的形式存在内存中,每个节点定义为相应的结构体类型。

  3.3 μClinux进程调度

  通过进程调度的策略选择下一个要执行的进程:首先对所有进程进行检测,唤醒任何一个得到信号的进程,即改变进程的state属性;然后根据时间片和优先级调度机制来计算处于就绪队列中每个进程的综合优先级,其计算方法由goodness()函数实现;接着选择综合优先级最高的进程作为随后要执行的进程,若就绪队列中没有可调度的,则重新分配时间片,即改变进程的counter属性值,并利用switch_to()函数进行进程切换。

  3.4 μClinux中的socket处理JF24D?B数据通过JF24D?B完成点对点的数据通信,会在两点之间建立一个网络通信机制,当然在这个机制同时还需要Modbus协议的协助。网络的socket数据传输是一种特殊的I/O,socket也是一种文件描述符。socket()函数返回一个整形的socket描述符,随后的连接建立、数据传输等操作都是通过socket实现的。经常用的socket类型有两种:一种是流式socket:SCOK_STREAM;另一种是socket:SOCK_DGRAM.在该设计中,使用的是SOCK_STREAM的类型进行数据连接传输应用。socket在实际应用中的设计流程图如图4所示。

  3.5 Python读取数据并显示

  将socket 处理完成的数据存放在sqlite 中,在此需要对sqlite进行操作,将数据读取出来之后进行数据显示,绘制图表。为了让数据能够完全的同步,需要将Python 与sqlite 数据库进行链接。具体的连接步骤如下:找个Pysqlite,这是Python访问sqlite的接口,网址为http://initd.org/tracker/pysqlit,根据自己的Python版本选用Pysqlite 2.3 或2.4.编写程序,显示图表。在ARM7中显示的当前温度和不同高度温度图表如图5,图6所示。

  @56

  4 结论

  采用基于51 单片机的温度采集系统简单,使用JF24D?B无线传输模块,其协议可共享开放源代码,并解决了315 MHz和433 MHz无法解决的同频干扰问题。控制器采用ARM7 系统,通过无线信号解析和接收,在μClinux下进行进程调度和数据处理,并通过Python完成数据图表的显示。整个系统具有成本低、可靠性高、可读性强,有效地解决了对不同高度的温度采集控制问题。

关键字:51单片机  温度采集系统  DS1820 引用地址:基于51单片机的温度采集系统简单应用设计

上一篇:基于单片机的电梯控制系统的应用设计
下一篇:基于AT89C51和AT89C2051的红外遥控系统应用研究

推荐阅读最新更新时间:2024-03-16 13:42

MCS51单片机边沿触发中断响应时刻的测量
MCS51单片机系列属于8位单片机,它是Intel公司继MCS48系列的成功设计之后,于1980年推出的产品。由于MCS51系列具有很强的片内功能和指令系统,因而使单片机的应用发生了一个飞跃,这个系列的产品也很快成为世界上第二代的标准控制器。51系列单片机有5个中断源,其中有2个是外部输入中断源INT0和INT1。可由中断控制寄存器TCON的IT1(TCON.2)和IT0(TCON.1)分别控制外部输入中断1和中断0的中断触发方式。若为0,则外部输入中断控制为电平触发方式;若为1,则控制为边沿触发方式。这里是下降沿触发中断。    1 问题的引出    几乎国内所有的单片机资料对单片机边沿触发中断的响应时刻方面的定义都是不明确的或
[单片机]
MCS<font color='red'>51单片机</font>边沿触发中断响应时刻的测量
51单片机【四】蜂鸣器 晶振 单片机频率
莫名想起小时候电脑开机自检时的声音 当然平时洗衣机空调什么的也有 蜂鸣器原理就是两个铁片让其中一个的一端正负极不停的变换从而拍击另一个产生声音 蜂鸣器分有源和无源蜂鸣器 有源指的是外部只需要供电即可响 无源指的是外部必须给一个变化的供电 ULN2003D 是类似于74HC573的一个放大器 蜂鸣器的BZ接在它的OUT5上 而CPU一端接在P15 因此使用P15控制 void BuzzerOnOff(void) { gBuz = 1; delay1ms(); gBuz = 0; delay1ms(); } 文末有晶振很具体的原理介绍,简要来说就是利用石英给它外部电压它能向表一样来计时给处理器参考
[单片机]
<font color='red'>51单片机</font>【四】蜂鸣器 晶振 单片机频率
基于51单片机的数码管动态显示
#include reg52.h #include intrins.h #define uchar unsigned char #define uint unsigned int sbit P2_6=P2^6; //数码管位选74HC573锁存端 sbit P2_7=P2^7; //数码段位选74HC573锁存端 oid delay(uchar xms); //声明函数delay()原型,延时函数 void display(char *ptr); uchar code seg = {0x3f,0x06,0x5b,0x4f,0x66, //段码表:0,1,2,3,4 0x6d,0x7d,0x07,0x7f,0x6f, //段码表
[单片机]
51单片机红外遥控点阵贪食蛇程序
完整的 源码 和 制作 资料下载: http://www.51hei.com/bbs/dpj-20623-1.html /****************工程包含的头文件*************************/ #include stc12c5a.h #include intrins.h #include define.h #include delay.h #include zm.h #include 32x12matrix.h #include menu.h #include MySnake.h #include ds1302.h #include ds18b20.h #include i
[单片机]
<font color='red'>51单片机</font>红外遥控点阵贪食蛇程序
基于C51单片机的通信测试仪器设计
随着现代通信技术的发展,通信测试仪器不断推陈出新。各种新型设备对系统的实时响应能力的要求越来越高,一种通信测试仪器的实时响应性能,就成为系统设计能否成功的关键因素之一。笔者曾在多个通信测试仪器项目中,成功地应用ARM处理器、C51单片机等为主控芯片的嵌入式系统,实现了对仪器相关模块的实时控制功能。因此提出一种在某通信测试仪器中使用C51单片机来实现实时控制的设计方案。 1 硬件设计与实现 1.1 总体方案设计 在该通信测试仪器中,实时控制模块主要实现对射频接收频综、射频发生频综、滤波器组件、射频输入模块、射频输出模块等实时控制作用。对射频检波信号进行A/D转换以获取数据。与上位计算机进行通信等功能。 根据待实现的系统功能要
[单片机]
基于C<font color='red'>51单片机</font>的通信测试仪器设计
51单片机IO口模拟串口通讯的设计
#include sbit BT_SND =P1^0; sbit BT_REC =P1^1; IO 口模拟232通讯程序 使用两种方式的C程序 占用定时器0 #define MODE_QUICK #define F_TM F0 #define TIMER0_ENABLE TL0=TH0; TR0=1; #define TIMER0_DISABLE TR0=0; sbit ACC0= ACC^0; sbit ACC1= ACC^1; sbit ACC2= ACC^2; sbit ACC3= ACC^3; sbit ACC4= ACC^4; sbit ACC5= ACC^5; sbit ACC6= ACC^6; sbit AC
[单片机]
51单片机与递归的问题
在C51中,中断和非中断函数调用同一个函数报警就是RECURSIVE CALL TO FUNCTION。 标准C语言是在堆栈中动态生成局部变量空间,所以可以递归的。 51单片机太弱了,为了提高运行效率,C51采用静态分配局部变量的方式,所以不可递归。 被中断和非中断函数调用的函数,如果在非中断状态运行,发生中断后,局部变量被破坏,中断结束后再执行就完全错误了,这个跟不能递归的原理是一样的,所以Keil也把他列为RECURSIVE CALL TO FUNCTION。 解决方式:在这个公用的函数加reentrant修饰为可重入的。
[单片机]
51单片机快速入门指南】6.3.1:使用1-WIRE搜索算法搜索单总线上所有DS18B20的ID
普中51-单核-A2 STC89C52 Keil uVision V5.29.0.0 PK51 Prof.Developers Kit Version:9.60.0.0 移植自1-WIRE搜索算法 串口部分见【51单片机快速入门指南】3.3:USART 串口通信 DS18B20驱动程序见【51单片机快速入门指南】6.3:DS18B20 单总线数字温度计的多路读取 源码 OWSearch.c #include DS18B20.h #include stdio.h // TMEX API TEST BUILD DECLARATIONS // long session_handle; // END
[单片机]
【<font color='red'>51单片机</font>快速入门指南】6.3.1:使用1-WIRE搜索算法搜索单总线上所有DS18B20的ID
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved