时钟芯片RS5C372A/B在无功补偿节能系统中的应用
2009-08-10
作者:黄 鑫 林在荣 周 明
摘 要:具有串行传输总线I2C接口的实时时钟/日历芯片RS5C372A/B在以微处理器PIC16F877为核心的无功补偿节能控制系统中的应用实例,并对其与主控CPU PIC16F877的硬件接口电路、软件编程设计中的关键问题作了阐述。
关键词:串口I2C BUS 实时时钟/日历芯片 RS5C372A/B PIC16F877
随着微处理器构成的控制系统在工业领域的广泛应用,一些控制系统需要掌握日期和年份信息或更精确的时间显示及固定时间的报警。一个控制系统需要高性能、低功耗、带RAM的专用芯片来完成其体积、功耗、功能、精确性及可靠性等因素的控制,而利用实时时钟/日历芯片就能很好地解决这些问题。本文主要介绍串行I2C实时时钟/日历芯片RS5C372A/B作为控制系统时钟单元模块的使用特点、操作方式及与主CPU的硬件电路接口和软件编程设计技术。
1 无功补偿节能系统结构简介
由微处理器组成的微控制系统在某些场合需要精确的时间、日期、日历显示和预定时间报警功能。准确地记录设备事故发生的时间或在预定时间内给主系统报警,以便提醒工作人员监测机器的工作状态和及时发现故障,对避免设备的损坏具有重要作用。如电饭锅、洗衣机、空调等家用电器需要时间的监控和报警。专用实时时钟/日历芯片组成的时钟模块单元就能很好地完成这些功能。图1是笔者开发电力系统无功补偿节能系统的结构框图。该系统主要功能:三相交流电压、电流经过谐波电压、电流信号检测、采样,经A/D转换后传送到主CPU处理后算出无功补偿量,发出指令投切电容器补偿无功功率以达到节能效果;时钟模块单元可以记录控制系统的运行时间,并通过液晶显示器显示;如果控制系统发生故障,可以记录故障发生的时间,以便监测人员查清事故发生的具体时间和原因。
在该控制系统中,主CPU选用PIC系列的16F877型号的单片机,该芯片采用双列直插、40pin封装形式。主要特征:工作频率DC20MHz,片内有8KBFlash程序存储器(ROM)、368B数据存储器(RAM)、256B E2PROM程序存储器(ROM)、14个中断源、I/O端口(A、B、C、D、E)、3个定时器/计数器、同步串行通信口MSSP模块、异步串行通信口USART、并行通信口PSP、8个通道的10位模数转换模块。由于PIC16F877片内资源比较丰富,能很好地满足系统的要求。时钟模块单元选用日本RICOH公司的RS5C372A/B实时时钟/日历芯片,该芯片具有自动识别闰年到2099年,有12小时制或24小时制时间显示,同时还可以通过输出引脚向主CPU定时报警(可以设定为分钟、小时、一星期中的某天)和定时中断请求(从秒到月份的中断)等功能。RS5C372A/B芯片的主要特点是:高性能、低价格、低功耗和小体积。
2 硬件接口电路
在本系统中,由于主控CPU16F877有串行MSSP模块,具有硬件I2C功能,因此它和RS5C372A/B时钟芯片之间的通信可以用主控硬件I2C方式实现,也可以用其2个普通的I/O端口作为SCL/SDA,按照I2C的时序编写模拟I2C通信软件。模拟I2C灵活方便,移植性强。PIC16F877和RS5C372硬件电路接口示意图如图2所示。
为了方便讨论,在图2中,主CPU16F877只画出和时钟系统有关的引脚。RS5C372A/B实时时钟/日历芯片内部带有I2C总线协议,遵循PHILIPS公司的I2C总线协议进行通信,并通过SCL、SDA二引脚和主控芯片相通信,且连线简单。I2C总线和主CPU的电源及时钟芯片可以由同一个电源供电,但应尽可能用独立的电源独自供电,如果是独立供电,原则上要求向SCL、SDA供电的电源电压大小不能小于各供电电源。最好RS5C372A/B芯片有一个独立的电源,以防系统电源出故障后仍能正常运行。图2中,RB4、RB5为PIC16F877外部中断请求I/O口,接RS5C372A/B芯片的中断输出引脚。由于SCL、SDA、引脚是开漏极输出,在实际应用电路中,SCL、SDA、引脚都应该接上拉电阻,其阻值约为10kΩ,以保证信号传输的稳定。而时钟芯片必须接0.1μF的普通电容和22μF的电解电容或4.7μF的钽电容各1个,以消除毛刺、噪声信号的干扰;6、7脚可以接32.768kHz或32.000kHz的外部时钟,并通过设定片内寄存器值控制。
3 软件程序设计
RS5C372A/B芯片总共有16个计数器和寄存器,其内部器件地址为0H~FH。这些计数器和寄存器在缺省状态、起始状态和读写状态都各不相同,上电后必须对芯片进行初始化操作,使芯片工作正常后才能对其进行正常的读写。RS5C372A/B芯片上电后约要1~2秒才进入开始状态,然后调用一个初始化RS5C372A时钟芯片子程序,读控制寄存器2中XSTP位的状态,如果XSTP=0,则可以进入正常的操作程序;若XSTP=1,则把初值赋给控制寄存器2和各个时钟日历计数器。当成功写入控制寄存器2时,则XSTP=0。在这个过程中主CPU如没有ACK回应或刚在开始时读出数据为FFH值,则说明主CPU和RS5C372A/B之间的通信没有成功。RS5C372A/B芯片的监测振荡器停止振荡功能也是用控制寄存器2所存储的振荡器停止标志位XSTP的状态信息,来检测RS5C372A/B芯片是不是从0伏起供电或已经上电。这一功能对判断时钟芯片内部数据是否有效极其有用。
RS5C372A/B芯片上电初始化流程图如图3所示。XSTP位的状态很关键,它是在控制寄存器2(内部地址为FH)的第4位。因此在时钟通信模块程序中必须编写一个读XSTP位的状态子程序,以便在通信过程中可以随时监控XSTP位的状态。如果XSTP=1,说明芯片运行一段时间后,晶振曾发生过停振,时钟芯片数字已经不准确,需要重新调整。
在程序调试阶段,为了最后确认时钟芯片是不是正常工作,可以在上电后读出16个寄存器的值和它的缺省值(默认值)进行比较,如二值相同则为正常通信。例如:时间微调寄存器(07H)和控制寄存器1(0EH)的系统默认值都为0,若读出数据不为0,则认为工作不正常,应重新检查程序。RS5C372A/B芯片还有一个内部振荡器(具有高精度的时间微调电路),通过内部的寄存器配置可以方便地调整因晶体振荡起伏过宽、季节变化或温度变化而造成的时钟精确性的变化,其调整精度可达到189ppm(在32.000kHz时可以近似到±194ppm)。
RS5C372A/B器件地址为0110010,虽然遵循I2C协议进行通信,但因为芯片只有16个寄存器,读写数据方式和一般的具有I2C的E2PROM和其他的时钟芯片相比,更灵活且多样。RS5C372A/B芯片读数据有以下3种方式。
(1)指定地址读
指定地址读I2C的E2PROM和其他时钟芯片操作方式相同,其区别是:它通过操作内部的地址指针寄存器和组织寄存器来设定读写数据的起始地址和字节数。
(2)非I2C方式读
非I2C方式读是指写完后不用重新启动起始位,可直接读。虽然不遵循I2C的协议,但RS5C372A/B芯片允许这样的读法,以提高读数据的速度。
(3)从指针起始处(FH)读的方式
RS5C372A/B芯片在缺省下指针指向内部地址FH起始处,在这种情况下主CPU可以直接读时钟芯片的数据。特别要注意的是:在读时间数据时要一次连续读完,才能得到正确的时间。一个读/写周期应该在0.5秒内完成,否则容易造成错误,即读出的数据是错误的却认为是对的。
RS5C372A/B芯片在I2C模式下,以7位地址方式传送数据,最高速率可以达到400kHz。不过据笔者的经验,在200kHz速率下,RS5C372A/B芯片和主控芯片之间的通信更稳定。
以下是笔者用模拟I2C的方式和通过PIC系列单片机汇编语言编写的PIC16F877和RS5C372A/B实时时钟/日历芯片的通信子程序模块(但也可以用硬件MSSP模块中的I2C功能来实现),已经通过调试。模拟I2C的关键在于按硬件电路时序图的要求来编写。在这个通信程序模块里又可以分为读/写N个字节子程序、初始化RS5C372A时钟芯片子程序,监测XSTP位状态子程序、读秒/分/小时子程序、读星期几/日/月/年子程序。读写子程序又可以分为编写通用的启动起始位子程序、停止位子程序、位接收(位发送)子程序、发送和接收(8位)数据子程序。限于篇幅,不能写出所有源代码。读的方式可以采用上面三种方式中的一种。主程序流程图如图4所示,读子程序流程图如图5所示(读子程序采用第1种方式)。
4 结 论
本文介绍了实时时钟/日历芯片RS5C372A/B在无功补偿控制系统中的具体应用,并给出了硬件电路接口和程序设计。RS5C372A/B芯片编程方便、灵活、价格低廉,广泛应用于便携式仪器(如数码相机、远程控制器、摄像机)及家用电器等。相对于其他的时钟芯片,RS5C372A/B芯片有着很高的性能价格比,不失为一种系统时钟单元的首选芯片。
参考文献
1 何立民.I2C总线应用系统设计.北京:北京航空航天大学出版社,1995
2 刘和平,黄开长,严利平等译.PIC16F877X数据手册——28/40脚8位FLASH单片机.北京:北京航空航天大学出版社,2001
3 Philips Semiconductor.The I2C-BUS Specification Version 2.1.2000
4 RICOH.I2C Bus Serial Interface Real-time Clock ICs RS5C372A/B Application Manual.1995