林方盛 江 磊 刘木清
(复旦大学电光源研究所,上海 200433)
随着经济的发展,节能减排和低碳经济已成为当今全球关注的热点。而在照明领域,LED作为第四代照明光源,以其高效节能长寿命等诸多优点脱颖而出。近几年在道路照明领域中LED的应用越来越多。在路灯应用上,大部分城市在零点之后道路几乎空无一人,此时在低交通流量的道路上保持高亮度显然没有必要[1]。因此对路灯亮度进行调节尤为重要,对节能减排也十分关键。
目前在LED路灯控制中,主要还是采用定时控制。这种方式,按照定时器设定固定的时间对LED路灯实现定时自动开关和分时PWM调光控制,既节省了人力成本,又达到节能减排的目的。目前的市场上的定时器方案良莠不齐,大部分随着使用时间的增长,同步性变差。而好的经纬度定时器则价格昂贵,不太适合在路灯上大规模使用。
本文设计了一款基于DS1302和Attiny13的LED定时器来改进这些问题。本文主要介绍了定时器的软硬件设计以及和上位机通讯的时间烧写模块的软硬件设计。
整个定时器系统结构如图1所示,主要包括上位机 (PC),与PC通过串口连接的实时时钟烧写模块,与烧写模块通过SPI口连接的定时器以及带PWM调光驱动的LED路灯。
图1 LED路灯定时控制系统结构图Fig.1 LED streetlight timer control system structure
用户通过操作PC界面上的程序将时间写入时间烧写模块,保存好。然后用户操作时间烧写模块通过SPI接口将时间写入定时器中DS1302,这样就完成定时器的设置。定时器中Attiny13不断读取DS1302的时间,定时动作,发出PWM信号控制LED驱动,实现定时控制。
本设计主要关注定时器和时间烧写模块的软硬件设计。
定时器主要由实时时钟部分和MCU电路组成。实时时钟部分采用的芯片是DS1302。DS1302是美国DALLAS公司推出的一款高性能、低功耗、带RAM的低功耗实时时钟芯片,它可以对年、月、日、周、时、分和秒进行计时,并能够对每月的天数和闰年的天数进行自动调整[2]。时钟既可以采用24小时制,也可以采用12时制。DS1302功耗很低,保持数据和时钟信息时功率小于1mW,在没有主电源的情况下,采用副电源3V锂电池供电可以工作长达10年。
MCU采用的是AVR系列8位单片机Attiny13。Attiny13是一款高性能、低功耗的8位AVR微处理器,其结构简单,引脚少,价格便宜,适合在路灯控制系统中大批量使用,以节约成本。
如图2所示,整个定时模块采用外部和LED驱动一样的48V DC供电,利用齐纳二极管和电容组成的稳压电路将电压稳定在4.7V,作为DS1302的主电源和Attiny13的电源,DS1302备份电源由3V的锂纽扣电池供电。
实时时钟芯片DS1302靠32.768kHz的晶振提供计时脉冲,实现时分秒的计时。通过SPI三线接口与MCU进行同步通信,分别为CE引脚、SCLK串行时钟引脚、I O串行数据引脚3线。
图2 定时器电路原理图Fig.2 Timer electrical principle
Attiny13以其功能简单,低价等优势成为定时器的MCU,利用3个IO口读取DS1302的时间。内部T C0是通用8位定时器 计数器模块,有两个独立的输出比较单元,且支持PWM功能。它提供精确的执行时序与波形产生,在PB0上产生PWM信号实现调光[3]。
在软件上的设计主要是Attiny13单片机上的程序编写,在AVR Studio 4环境下编写调试。流程图如图3所示,程序工作流程如下:
1)宏定义,如自定义定时调光时间和调光占空比;
2)端口初始化,包括IO口的输入输出配置,看门狗配置和定时器Timer0配置为快速PWM模式;
3)针对DS1302初始化函数,定义1个字节读写函数和时分秒读写函数;
4)主函数,循环调用DS1302时间读取函数获取DS1302上的实时时间,判断是否开关灯,调节调光占空比,实现定时控制。
图3 定时器程序流程图Fig.3 Timer process graph
在程序中用户可根据实际情况对程序进行改造,添加不同占空比和不同的调光时间节点,自主地实现灵活的定时控制。
考虑到实际使用中,在LED路灯系统里定时器是批量使用,为了保证调光的同步性一致,因此实际生产过程中每个定时器各自的初始时间必须各不相同,但和实时时间必须保持一致。
整个模块实现的功能是将PC的当前时间保存到烧写模块中并可实现走时,显示到LCD屏幕上,按下按钮,可将当前动态时间发送给定时器,并反馈到LCD屏幕上。
时间烧写模块的结构图如图4所示。
图4 时间烧写模块结构图Fig.4 Timer module structure
其中核心MCU为8位AVR单片机Atmega16,Atmega16通过串口和PC通讯,和DS1302通过3线SPI连接。用户通过操作PC上的界面,将PC当前的时间通过Atmega16赋予内部DS1302并保存于其中,用户可以通过LCD屏幕看到内部DS1302的时间正常。至此时间烧写模块已将实时时间保存至其中。
接下来用户只需操作时间烧写模块即可实现功能。通过按键,用户可将当前时间发送给定时器,同时将定时器时间显示在LCD上。这样保证每个定时器之间时间的同步性,均与PC的系统时间保持一致。
在软件上的设计主要是Atmega16单片机上的程序编写,在ICCAVR环境下编写调试。整个程序完成的工作是流程图如图5所示。
程序工作流程如下:
1)整个程序采用模块化编程思路,编写4个头文件:延时函数,LCD12864操作函数,DS1302读写函数,UART串口读写函数;
2)主程序,Atmega13端口配置函数,串行接收中断服务函数,外部中断服务函数;
3)功能1:实现通过串口将时间数据写入内部DS1302,显示在LCD上;
4)功能2:通过按键将内部DS1302时间数据发送给外部定时器中的DS1302,显示在LCD上。
图5 时间烧写模块程序流程图Fig.5 Timer module process
如图6所示,是使用VB编写的PC端系统人机界面程序。
图6 时间烧写模块人机界面图Fig.6 Timer module interface diagram
1)采用Timer控件读取系统时间,将时分秒数据取出显示在对应的Hour,Minute,Second框内;
2)采用MSComm控件实现串口通讯,设置端口、波特率等项目,以十六进制形式发送时分秒数据,并将返回值显示在Returned Time框内。
用户可在上面看到PC系统时钟,选择合适的串口参数,点击“Open Port”,显示“OK”说明成功打开串口。点击“Send Time”发送,这样就将PC的当前时间成功写入时间烧写模块。
实验室中按照图1连接,实物图如图7所示。
图7 实验室测试实物图Fig.7 Testing object in the experiment
设计一个调光方案进行实地调试。在定时器软件设计中,在程序的宏定义中定制3个时间点为18∶00、0∶00 和 6∶00,调光占空比为 50%。在主函数的if语句中仅仅对小时位进行判断并动作。对应的调光时间段:6∶00~18∶00 关灯,18∶00 ~0∶00 开灯 (100%),0∶00~6∶00开灯 (50%)。
先将编写好的程序写入定时器中,再将计算机的系统时间写入时间烧写模块并能实现自主走时,最后通过时间烧写模块将实时时间写入定时器。
经过1个月的观察,LED灯每天傍晚18∶00开灯,到午夜0∶00PWM调光50%占空比,凌晨6∶00关灯,能够完全实现该功能,时间误差在1s以内。
目前已将定时器集成进LED驱动电源中,在路灯上进行实地使用中,观测下来目前效果良好。
整套定时器系统通过将PC的当前时间赋给DS1302,解决了批量生产定时器过程中对其初始时间的赋值误差问题,并能够在以后的使用中修正时间,使得传统定时器使用过程中引起的不同步问题得到解决,使LED路灯定时控制保持同步。另外其较低的成本也在路灯大批量使用中具有一定的优势。
对于LED而言,由于其极易调光的特性,使得我们可以对LED路灯进行灵活的调光。例如在每天固定时间开关路灯,在车流量大的时段提高光输出,深夜车流量小的时段可以降低光输出。这样既节省了人力资源的浪费,又达到节约能源的目的在实际使用中,用户可根据不同的情况,对定时器的内部程序进行灵活自由的修改,如添加不同的调光时间节点和PWM调光不同的占空比,甚至可以加入光敏元件检测外界光照度实现实时自动调光等等,均具有较高的实用价值。
[1]李旭亮,邓国强.基于Zigbee+GPRS智能控制的LED路灯绿色照明低碳经济新技术 [J].照明工程学报,2010,21(z1):78~81.
[2]金春林,邱慧芳,张皆喜.AVR系列单片机C语言编程与应用实例[M].北京:清华大学出版社,2003:277~283.
[3]丁化成,耿德根,李君凯.AVR单片机应用设计[M].北京:北京航空航天大学出版社,2002:131~132.