罗 江
(四川文理学院 物理与机电工程学院,达州 635000)
罗江
(四川文理学院 物理与机电工程学院,达州 635000)
摘要:以AT89S51单片机为例,使用分时共享的方法实现系统多任务控制,使用PCF8591实现A/D和D/A转换,通过采集的环境变量与预存数据比较,确定主照明灯的工作状态,同时设计了副照明灯控制电路辅助系统。此系统应用于路灯灯光控制,达到了智能处理、节能控制的目的。
关键词:微控制器;多任务;时间片;节能控制
引言
在智能灯光控制系统中,来自外界声、光、温度等多种信息,反映了当时的环境状态,系统捕捉到这些数据后进行分析,根据预设的规则进行实时处理,达到对灯光节能控制的目的。环境信息随机性强,可能同时产生,也可能顺序产生和变化,这就要求系统能够及时处理数据并产生准确判断,控制灯光的亮灭和明暗,以适应环境要求。
1单片机多路多任务控制的原理
单片机一般都有多个外部中断源和并行I/O端口,可以通过外部中断(或扩充的多级外部中断)来感知外界多路传感器的信息,经CPU处理后,通过并行I/O口驱动效应器,以实时感知和处理外部事件,实现多路控制。若能合理地配合使用定时器,就可以实现多路多任务控制。
2多任务控制调度算法设计
分时多任务控制的关键在于时间片的选取和调度算法的设计[4-5]。假设一个智能控制系统,有n路设备需要实时控制,系统轮询时间在tmin~tmax之间变化。设n个设备的管理程序对应优先级分别为P1,P2,…,Pn,则设计如下时间片分配和任务调度算法。
2.1平均分配、顺序调度
这种方法计算时间片和任务调度算法都最简单,每个设备获得CPU的机会均等,比较适合设备单一、任务相近的简单控制系统。
2.2平均分配、优先调度
时间片长度平均分配,按设备运行时的优先级来确定调度任务的先后顺序,任务调度与优先级处理遵照规则进行处理(具体规则略——编者注)。
该方法比较好地体现设备运行的紧急程度,算法也比较简单,但是增加了系统访问设备的开销,降低了系统效率。
2.3变长分配、优先调度
这种算法设备在处理紧急情况时可以充分占有CPU,执行效率较高,实时性较强,但是调度算法设计较为复杂,还需占用大量空间来存储时间表、临时数据。
3智能灯光控制系统的硬件设计
照明灯光的强弱由环境决定,外界诸多因素都是控制所需的信息,其中环境光强弱、声音(噪声)大小和温度等是主要因素[6]。环境光强,则照明灯照度减弱或熄灭;噪声强而持久说明人员较多,则照明灯光照度适当增强或照明时间延长;温度高,则应适当降低照度以减少发热,保护灯具。
3.1系统工作流程
来自外界光(W)、声(S)、温度(T)等多种数据反映了当时的环境状态,系统捕捉到这些数据进行分析,根据设计的规则进行处理并实时控制照明驱动电路,达到对灯光节能控制的目的。控制系统结构框图如图1所示。
图1 智能灯光控制系统结构框图
其中,传感器用于感知和采集环境数据,它们是多路同时工作的。
多路A/D转换将传感器采集到的环境信号转换的数字信号供单片机(MCU)处理。
MCU是系统的核心,执行分时复用的多任务调度算法,读取各路A/D转换器的值并存储,然后与内存中预设的各参数的临界值进行比较,决定输出的控制数据。
D/ A转换及控制器将MCU处理结果转换为输出电压的大小,从而控制照明灯的状态。
看门狗复位电路防止程序运行时可能进入混乱或死循环状态,在异常情况下,发出系统复位信号并记录当时的照明灯状态数据,使系统恢复工作。
时钟发生器用于预设控制的时间,与预存的季节和正常天气下亮暗的时间数据对比,供MCU参考[7]。为了时钟能正常运行和校准,需要安装电池供电和增设一个简单的键盘,以供时钟消耗和设置当前时间。
主照明灯需要一个调压电路,副照明灯使用继电器控制工作,以便深夜人员稀少、主灯停止工作时开启。照明灯的亮灭和功率输出大小,均由MCU控制。
3.2系统硬件选择
由于路灯照明控制并不需要太高的精度和速度,控制系统应小巧、功耗少、成本低、稳定性好。因此,可以选用以下2种方案:
① A/D 转换采用带有高阻抗缓冲输入的低功耗4路8位串行数/模转换器TLC5620,实现4路模拟信号独立采集。D/A转换采用经典8位并行的DAC0832芯片,或者精度较高的12位串行数/模转换芯片AD7543。
② 直接使用单电源、低功耗8位CMOS型A/D、D/A转换芯片PCF8591,其有4路模拟量输入通道、1路模拟量输出通道以及1个I2C总线接口[8]。
环境因素中光和温度随季节、天气和时间变化,声音在白天(除了阴雨天外)对系统没太大影响,夜晚随机产生噪声可能激发路灯照明。这些因素若能够独立采集,则可以使用功能特有、参数不同的传感器来探知。但实际情况是,路灯照明的控制并不需要太精确,各路信号也不必同时采集,只要选用工作电压一致的传感器,用程序对采集的各路数据进行修正处理,再利用中断即可实时采集各路数据。因此选用第2种方案,使用芯片少,电路简单,功耗和成本较低。
3.3控制系统的硬件设计
根据以上分析,照明灯智能控制系统的硬件原理如图2所示。
系统初始化后,AT89S51即分时对PCF8591的3路输入AIN0~2采集数据,并将数据转换成环境变量W、S、T进行存储。采集一定时间后,统计数据得到较为准确的环境变量值,然后通过控制算法判断环境状态和变化趋势,从而确定对照明灯的控制。若需开启主照明灯,则启动PCF8591的D/A模式,根据计算出的数据按8位精度步进调整输出电压,再通过调压模块控制主照明灯开关和亮度增减。如在深夜无人时只需开启副照明灯,则将AT89S51的P1.0清0,继电器吸合,副照明灯工作,此时系统按一个较长周期探测AIN1端(声音输入端),以减少系统开销,最大限度降低能耗。
PCF8591作为A/D转换元件,体积小、耗电低,很适合微型化批量生产。传感器采用常见的光敏电路、热敏电阻和拾音器,外围电路简单,成本较低。电源由市电直接提供,方便统一控制。
4系统软件设计
图2 系统原理图
系统采用模块化设计,由主程序和采集模块、控制模块、保护模块等构成。系统初始化后,调度时间片分配程序,分别为数据采集端和控制端分配时间片,然后等待响应。由于系统所处环境因素随机性较强,为简化程序,采用“平均分配、顺序调度”的多任务调度算法。响应后调用处理模块进行数据处理和系统控制。系统可以使用Keil μVision编程,利用Proteus设计硬件和仿真。
4.1主程序流程
主程序的流程图如图3所示。首先进行系统初始化,完成内部环境变量存储单元清0,定时器T、PCF8591的初始值设置等;然后启动定时器T1定时(如50 ms),依次采集光、声、温度等外界环境变量,将多次采集数据的平均值计算出来,存储在对应单元中。一轮时间调度完成后,调用数据分析与处理模块,根据反馈的数据判定系统有没有故障,进而调用照明灯控制模块或进行故障处理。
以下是通过时间片顺序轮换算法实现多路多任务控制的部分C源程序:
#include
#define uchar unsigned char
ucharmode=0; //设备编号,初始值为0,表示从第1号设备
//开始分配时间片
uchar s[3];//存储环境采集到的光W、声音S、温度T数据
voidA2D8591 (uchar mode);//采集处理函数
uchar analysis (uchar s[]);
//数据分析函数,返回值是照明灯控制数据
void ligcontrol(uchar k);
//照明灯控制函数(含D/A转换),k为主、副灯控制标志
图3 主程序流程图
定时器/中断服务函数略——编者注。
4.2A/D和D/A处理模块
PCF8591采用典型的I2C总线接口,由内部地址选择字和转换控制字来设置,且高4位地址规定为1001,低3位A2、A1、A0为引脚地址。由于PCF8591同时承担A/D、D/A转换,因此必须对其工作方式(即读/写操作)进行选择,将其地址选择字最低位D0设置成1或0(即读与写)。在总线操作时,MCU先发送由器件地址、引脚地址和方向位组成的第1字节,然后发出第二个字节即控制字,其中:D1、D0是A/D通道编号,D2是自动增益选择(设为1,不自动转换通道),D4、D5是模拟量输入方式(设为00,4路单端输入),D6是模拟输出允许位(A/D和D/A转换时分别设置为0和1)。
A/D和D/A处理模块主要是对PCF8591进行初始化、启动、传送数据等操作。A/D的通道由定时中断来切换,D/A转换在数据分析后启动。A/D和D/A转换模块的程序流程图分别如图4和图5所示。需注意的是,A/D转换结束后,需要先发送一个非应答信号位A后,再发送结束信号位P。A/D转换的输出是上一次的转换结果,因此需两次读取,第二次读出的数据即为当前转换的数据[8]。由于本系统仅对时间片内多次转换的数据进行平均处理,因此并不需要读取第二次。
图4 A/D转换流程图
图5 D/A转换流程图
4.3照明灯控制模块
系统分为主照明灯与副照明灯两个控制子系统,程序由3个主要判断构成:
① 环境亮度超过高临界值wmax时,说明环境光照环境好,关闭所有照明灯以节省电力,小于低临界值wmin时启动主照明灯。
② 接着判断环境温度,超过某个临界值tmax时说明温度过高,MCU将通过D/A转换输出值0,关闭主照明电路,防止消耗过大、温度过高损坏设备。
③ 最后判断环境亮度w在基一个区间内时,或者环境噪声低于某个值smin时,则说明当时是凌晨(黄昏)光线较好,或者是深夜人车稀少时,仅需要辅助灯光即可,此时关闭主照明灯,启动副照明灯(让MCU的P1.0清0)。
这里的临界值需要在实际环境下通过测试系统测试,然后写入系统ROM中。
4.4其他程序
看门狗使用典型的AT89S51片内看门狗程序。数据处理程序采集数据平均值,算出即时的环境变量值,程序比较简单。系统预先设计了实时时钟为系统提供时间,以便处理季节变换对4.3节提及的各数据临界值的影响。
结语
本文设计了灯光控制系统,用单片机时间片轮换算法,实现了多任务控制,应用在灯光控制中达到智能、节能控制的目的。如果再设计出单片机与单片机之间、单片机与PC之间的通信协议,即可通过串口实现对单片机的远距离通信与控制,系统在实际控制应用中将具有更高的实用价值。
编者注:本文为期刊缩略版,全文见本刊网站www.mesnet.com.cn。
参考文献
[1] 罗江,户永清.51单片机多任务机制的实现策略研究[J].四川文理学院学报,2008,18(2):447-448.
[2] 肖建明,张向利.一种改进的时间片轮转调度算法[J].计算机应用,2005,25(12):447-448.
[3] 胡赛,赵碧海,熊慧军.一种公平的动态轮转算法[J].湖南师范大学:自然科学学报,2012,35(5):30-36.
[4] 陈宏伟,黄永明,章国宝.单片机多任务的时间片方式实现[J].单片机与嵌入式系统应用,2012,12(8):73-75.
[5] 莫国民,王艳.分时操作系统在多单片机系统中的应用[J].计算机应用,2012,32(s1):161-163.
[6] 张运诗,仲兆准,钟胜奎,等.雾化干燥仪温度检测与控制系统[J].仪表技术与传感器,2014(9):19-22.
[7] 李雪峰.简易环境测试仪[J].微型机与应用,2014,33(9):85-88.
[8] 陈柱峰,沈治国.基于PCF8591的I2C总线A/D、D/A转换[J].企业技术开发,2009,28(5):18-21.
Luo Jiang
(Department of Physics and Engineering,Sichuan University of Arts and Science,Dazhou 635000,China)
Abstract:Taking the AT89S51 as an example,the system realizes multi-task control by using the method of time-sharing.The PCF8591 is used to achieve the A/D and D/A conversion.The working state of the main lighting lamp is determined by comparing the environmental variables with the pre stored data,at the same time,the assistant lighting control system is designed.The system is applied to control the light of street lamp,which can achieve the purpose of intelligent processing and energy-saving control.
Key words:microcontroller;multi-task;time slice;energy-saving control
收稿日期:(责任编辑:杨迪娜2015-10-03)
中图分类号:TP368.1
文献标识码:A
* 基金项目:四川省教育厅自然科学项目(项目编号:15ZB0315、13ZA0102)阶段性成果之一。