×
单片机 > 单片机程序设计 > 详情

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

发布时间:2020-06-22 发布时间:
|

  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 

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
STM32 USB HID 键盘