汪思远
(天津大学,天津 300072)
我国人口众多,资源长期不足,随着对于节能环保的要求日益提高,且人们对于良好生活环境的需求逐渐增加,室内灯光需要得到重视,在不同用途的房间有其合适的光照度。在能满足正常需求的情况下,尽可能使用更少的电能是节能环保的最有效手段。因此,通过一个智能照明系统,对房间的灯光加以合理设置,从而可实现以上需求。其中,该系统既可以实现自主控制,也可以通过其他计算机作为上位机进行监督控制。
智能照明系统采用8086微处理器作为控制器,其中,选择光敏电阻作为光线传感器,通过步进电机调节百叶窗的开合,利用光电耦合器[1]实现控制电路与生活用电隔离。其工作原理如图1所示。
图1 智能家居照明系统工作原理
控制器电路:采用8086微处理器为控制系统的核心。
数据存储器电路:采用E2PROM。本系统中选用了采用I2C接口的AT24C512存储芯片。
传感器电路:选择光敏电阻作为光线传感器[2],通过其电阻和照度的关系可以获得电压与照度的对应关系,从而通过A/D转换器将其数字化,使CPU可以读取。
A/D传感器电路:采用ADC0808芯片将传感器采集到的模拟量数据转换为数字量,并输入到8086微处理器。该转换器的输出为并行输出。在此装置中,仅使用一个输入通道即可满足输入要求[3]。
电机及其驱动电路:采用步进电机,并利用ULN2003A进行驱动。采用该驱动模块可以改善处理器直接驱动电机的性能[4]。
LCD及按键电路:LCD选择JHD-2X16-I2C。按键部分采用三键控制,功能分别为加(+)、减(-)和OK键。由于该设备用于家庭或者办公场所等处,对于照度的需求相对固定,因此没有经常调整参数的需求,所以减少按键设计也可以缩小设备体积[5]。
RSR232通信接口电路:选用RS 232总线与上位机连接,用MAX232将数据从接口传出,上位机通过数据线接收数据。
看门狗电路:采用硬件看门狗电路,选择使用MAX1232芯片。
报警电路:报警电路采用一个发光二极管与一个蜂鸣器,在系统自检不通过的时候,二极管亮起,蜂鸣器发出报警音。
8086拥有16根数据总线,20根地址总线,但其中有16根地址线与数据线复用,因此无法同时进行数据和地址的传输。但地址和数据在CPU工作时不是同时发送,因此可以采用地址锁存的方式进行同时访问和传输数据。地址锁存采用74LS273。考虑到CPU的总线负载能力有限,在连接部分设备时会出现驱动能力不足,因此需要增加双向数据缓冲器74245作为驱动器。对于外部的器件连接,由于部分外设的数据引脚较多,因此采用8255A作为外部接口电路。由于8255需要片选信号才能正常工作,因此需要搭建地址译码电路。再次选择常用的74LS138译码器,配合逻辑门电路,实现对特定芯片的片选,如图2所示。
图2 8086及其接口搭建电路
硬件连线如图3、图4所示,对8255芯片来说,复位操作十分关键,因此需要将看门狗复位信号同时与8086和8255相连,从而保证每次按下复位后8255也进行复位,确保系统正常运行。
图3 8086硬件电路的搭建
图4 外围设备的搭建
通过A/D采集的数据均为模拟电压的值,需要将其转化为照度值。根据资料可知光敏电阻的电压-照度函数并非线性相关,且没有实际的数学模型描述。对于此问题的解决,需要找到合适的数学模型描述此关系。常用的方式有两种,第一种为拟合,第二种为插值。这两种方式从理论上均可解决该问题,但在工程实际应用中,由于分段线性插值计算量较小,且原理简单,因此在此方案中采取线性插值的方式。线性插值的公式为:
通过该公式可以看出,实现线性插值的条件是要进行取点操作。取点操作可以利用标准的照度检测装置与亮度可调的光源以及电压表进行测量。实现插值计算后,可以得出电压-照度近似函数,据此可以进行标度转换。可以寻找模数转换器输出为0时的照度值以及模数转换器信号恰好达到FFH,即采集到的电压值恰好为5 V时的照度值。采用分段函数的思想,将标度转换按照取点情况进行分段,在每一段采用不同的标度转换算法,从而实现照度的转换。线性情况下标度转换的公式为:
在每个线性化的区间均采用此公式,可以算出不同的参数,从而获得一个较为准确的分段函数。事实上,如果光敏电阻的阻值非线性程度并不显著,可以将其简化为一个简单的一次函数,但鉴于检测效果,仍决定采用分段线性插值。
常用的模拟PID的计算公式为:
式中:e(t)为输入的误差信号;Kp为比例系数;Ti为积分时间常数;Td为微分时间常数;u(t)为控制器输出。
系统框图如图5所示。
图5 PID控制系统框图
实际上,计算机为数字系统,因此需要对该公式进行转化,使其适用于数字控制。采用离散化的方法将式(4)进行近似,可得到k采样时刻的离散PID表达式为:
式中:T为采样周期;k为采样序号,k=1, 2, ...;e(k-1),e(k)为第k-1和第k时刻所得到的系统偏差信号。该式需要累计偏差e(j),不仅要占用较多存储空间,而且不利于编程,因此一般采用增量型算式[8],如下:
式中:T为采样周期;k为采样序号,k=1, 2, ...;e(k-2),e(k-1)及e(k)分别为第k-2和第k-1和第k时刻所得到的系统偏差信号。
在本案例中,抗干扰选用复合数字滤波,将一阶滞后滤波与算术平均值滤波复合。其中,算术平均值滤波计算公式为:
一阶滞后滤波的计算公式为:
在每次测量值中,均使用一阶滞后滤波,但在第10次时,用10次测量值的算术平均值代替当前次的一阶滞后滤波值。复合滤波[9]的程序流程如图6所示。
图6 复合滤波的程序流程
在程序开始前已经存在关于参数调整的设定,已经定义好首先需要调整的参数及其对应步长,并从E2PROM中读取已保存的参数,其按键调整参数如图7所示。
图7 按键调整参数程序流程
ADD子程序:按照步长,对参数进行加法操作,操作结束后返回。
SUB子程序:按照步长,对参数进行减法操作,操作结束后返回。
保存和跳转子程序:将参数保存到AT24C512中,然后跳转至另一参数的调整,并定义该参数调整步长。
显示子程序:由于采用1602显示屏,因此在第二行实时显示当前的参数值及参数类型。
从A/D中读取数据,对读取的数据进行数字滤波操作。在CPU中通过线性插值与标度转换,实现读取数据到照度值的转换。利用显示屏,在第一行实时显示每次检测到的照度值,将照度保存到E2PROM中。
比较照度与设定值大小关系:设定值大,则向电机发送多个脉冲,向开启百叶窗的方向旋转,在每个脉冲结束时都进行第一步照度判断;设定值小,则向另一个控制端发送多个脉冲,向关闭百叶窗的方向旋转,在每个脉冲结束时都进行第一步照度判断。在误差范围内相等,结束程序。在设定脉冲数内,若光照度未达到设定值,继续执行以下程序,再次判断与设定值的大小关系:设定值大,调整PWM波的脉宽,提高灯具亮度,调用PID算法;设定值小,减小脉宽,使灯具变暗,调用PID算法。在误差范围内相等,结束程序。
根据看门狗电路硬件设定的定时时间,确定“喂狗”时间(该时间需要明显短于定时时间)。在规定时间给予看门狗信号,使其计数清零[9]。
利用PID控制PWM波的产生流程如图8所示。
图8 利用PID控制PWM波的产生流程
通过串口通信,实现与上位机进行数据的交换以及上位机对系统的实时监控,形成监督控制系统。对于上位机,也需要专门的RS 232相关驱动来读取数据,并将数据传送至专用的软件。通过该软件还可以实现参数的修改,其原理与串口通信[2]完全一致。由于该软件内容并不属于本设计内容,在此不加以赘述。RS 232串口通信流程如图9所示。
图9 RS 232串口通信流程
在上电过程中,需要对整个系统进行复位,使其处于初始状态。然后,系统从存储器中读取程序到内存中,之后展开自检工作,确定各模块的状态。如果此时有模块损坏导致系统自检无法通过,跳转至报警,待修复完成后重新上电。自检完成后,开始键盘输入参数的环节,并在此环节开始调用传感器,读取传感器数据,之后把所调整的参数与传感器数据均显示在LCD上。参数设定完成后,电机开始工作,首先通过百叶窗的开合调整房间光线亮度。如果该方法未完成调节,在灯光调节子程序中开始利用PID控制的PWM波调节灯光亮度。在照度调整结束后,需要对看门狗进行喂狗操作,使其计数复位,然后返回到键盘输入部分。如果程序运行失常,看门狗计时器计时结束输出复位电平,使整个系统全部复位,从程序起始处重新开始运行。整个系统流程如图10所示。
图10 系统运行流程
本文设计一种智能控制的家居照明系统。该系统综合运用了计算机控制技术中的过程通道、抗干扰、总线、数据处理、控制策略等技术,可以满足实际需求。目前,该设计方案基本正确完成了电路的搭建以及程序流程的设计,后期可以通过串口附加网络连接设备,实现在线控制。