论文导读:选用的温度传感器是DALLAS公司生产的单总线可组网的数字式温度传感器DS18B20。该系统具有硬件电路简单、实时性好、可扩展性好等优点。
关键词:温度传感器DS18B20,实时性
1、前言
一直以来,温度都是人类生存、物品存储的必要考虑条件。随着科技的发展,温度控制也越来越要求精确化、智能化、网络化和大型化,比如大型库房仓储系统和楼宇火警智能化系统,还有一些对温度要求较高的生产流程也需要对温度进行多点采集和实时控制等。采用单任务循环编程模式设计的温度监测系统已经不能满足这种需要。本文提出并设计了一个以μC/OS-II为操作系统,由多片DS18B20组成的多点温度巡回监测系统有实时性好、硬件电路简单、可扩展性好等优点。
2 方案选择
该系统要完成的基本功能是对多点温度的实时监测。从降低系统功耗集简化线路方面考虑,选用的温度传感器是DALLAS公司生产的单总线可组网的数字式温度传感器DS18B20。相比于最多8片级联的AD7416,DS18B20可扩展的测温点就多的多。每片DS18B20具有唯一的64位序列号,可以多片同时挂接在同一根总线上。DS18B20可以采用寄生电源方式,从数据线上获取能源,降低了系统功耗。DS18B20与单片机的连接如图1所示。免费论文网。

DS18B20在进行温度转换时,首先要主控制器选定传感器,然后发温度转换指令。在温度转换结束后,DS18B20会将所测的温度与预先设置的报警温度相比较。如果超限,就设置报警标志。在收到主控制器发出的报警搜索指令后,该DS18B20就会响应。这整个过程,对于监测点较多的巡回监测系统,所花费的时间不容忽视。因而,要是找到一种方法,只让系统监测可能超限的点,就可以减少时间,同时降低系统的功耗了。采用模糊推理决策方法,设立8个监测点,每个监测点放3片DS18B20。免费论文网。这样的话,可以根据每片DS18B20每次测得的温度计算出温度偏差和一个采样间隔内的温度变化,然后根据一个双输入单输出的模糊控制器得到一个控制决策量。根据这个控制决策量,就可以来设置报警级数、增加搜索频率等。故障检测和这个过程差不多,当这个监测点及周围的监测点的温度都有变化时,可以发出报警搜索指令,而只有这片DS18B20异样时,就可能是故障了。
可以说,这个系统的软件代码较复杂,而这个正好可以交给μC/OS-II来实现多任务管理。
3、μC/OS-II在Ateml89c52上的移植
μC/OS-II在Atmel89c52上移植必须满足5个条件,89c52的硬件资源:8051 CPU 32 I/O 口, 3 个定时/计数器, 8个中断源,8 K Flash , 256 BytesRAM。μC/OS-II内核代码最小可以达到2k,使用外扩RAM,在Keil C编译器支持下,89c52完全满足 C/OS-II移植及多任务运行要求。免费论文网。μC/OS-II的移植工作主要包括以下几个内容:
(1)用#define设置一个常量的值 OS_TASK_GROWTH
(2)声明几个数据类型(编译器相关)
(3)用#define声明三个宏
OS_ENTER_CRITICAL OS_EXIT_CRITICAL OSCtxSw
(4)用C语言改写OS_CPU.C中六个简单的函数
主要是任务堆栈初始化函数OSTaskStkInit(),用来初始化任务的堆栈结构,返回的堆栈指针保存在一个全局变量中,最后存储到任务的任务控制块(OS_TCB)。其它5个扩展函数OSTaskCreateHook()、OSTaskDelHook()、OSTaskSwHook()、OSTaskStatHool()、OSTaskTickHook()必须得声明但没必要包含代码。
(5)改写OS_CPU_A.ASM中四个汇编语言函数
分别是OSStartHighRdy()、OSCtxSw()、OSIntCtxSw()和OSTickISR()。这几个函数主要目的是运行任务和执行任务切换,在任务进入运行态或者退出运行态时,将任务的当前状态值从任务堆栈中恢复或者保存到任务堆栈中。
4、μC/OS-II具体功能的实现
根据本温度巡回监测系统所要实现的功能及工作原理,将应用程序划成6个不同的任务:
1.DS18B20序列号搜索任务
2.DS18B20报警温度设置任务
3.PC机单片机通信任务
4.温度转换任务
5.模糊决策控制任务
6.DS18B20报警故障搜索任务
根据任务的优先级以及完成功能的逻辑顺序,确定任务状态切换如图2所示:
图中六个任务由用户所建,括号内的数字对应的是任务的优先级,箭头所示为可能的任务切换顺序。
μC/OS-II初始化后,通过调用OSStart()启动多任务,七个任务(包括六个用户建立的任务和一个OS定义的优先级最低的空闲任务)都处于就绪态,此时任务就绪表中任务1优先级最高,进入运行态。搜索完所有在线传感器序列号后,调用OSTaskSuspend(),挂起任务自己,进入等待挂起状态。时钟节拍中断时,OS判断此时就绪表中任务2优先级最高,切换,任务2进入运行态。任务2主要设置报警温度限,同样,设置完毕后调用OSTaskSuspend(),挂起任务自己,进入等待挂起状态。时钟节拍中断时,OS判断此时就绪表中任务3优先级最高,切换,任务3进入运行态。任务3、任务4与任务5时本系统的主要工作,同时为保证温度转换过程和模糊决策的连贯性,这3个任务使用同一个信号量。通过调用OSSemPost()来引起任务切换。同时,任务5还可以通过调用OSTaskResume()来恢复任务1的运行。

图2 任务状态切换图
四、结论
基于此设计方案,笔者成功地在μC/OS-II内核上设计完成了温度巡回监测系统,准确实现了序列号搜索、温度转换、报警温度设置、报警、与PC机通信、模糊决策控制等功能。该系统具有硬件电路简单、实时性好、可扩展性好等优点。
参考文献:
1.《嵌入式系统设计与实例开发――基于ARM微处理器和μC/OS-II实时操作系统》,作者:魏洪兴,周亦敏。清华大学出版社,2005.9出版。
2.《 单片机实验与实践教程(一)(第2版)》,作者:万光毅严义 邢春香。北京航空航天大学出版社,2006.07出版。
|