一、硬件电路及工作原理
该电路包括普通电子电能表电路和单片机电路两大块(见附图)。
下面主要说一下单片机电路。
ADE7755芯片把电量脉冲通过光耦Ul0送给单片机P3.2口。当单片机采样到32个脉冲时执行中断程序.在中断程序中执行给电量内存加1的操作。当最低两位满时,清最低两位,再给高两位内存加1,依此类推。
P3.3为手动清零口,在程序上是一开始检测到此脚为低,则清当前电量和表号全为零。这样做是为了调试通讯程序和以后维护时的方便。
数据的断电保存用了24C02芯片。通信SCL、SDA脚和单片机P3.6、P3.7口相连接。IIC协议用软件模拟实现。
PCF8563为时钟芯片。断电后,此芯片用纽扣电池供电。芯片工作电流很小,时钟很长时间都不会掉。
8563也是IIC协议.SCL、SDA脚和单片机P3.6、P3.7口相连。通信时,软件发出地址来区别24C02芯片。
485通讯通过光耦和单片机串口连接,保证了程序不受通讯回路的电干扰。485是经典电路,有兴趣的朋友可以在网上查查这方面的资料。
红外通讯的关键是载波从哪里来。本电表用单片机Pl.0口来实现。
Pl.0口为52单片机特有的定时/计数器2。用软件使此口不停地发出38.4kHz载波。两只PNP三极管调制了发射信号。接收采用红外载波芯片。232通讯为通用电路,这里不细说了。
显示电路,笔者开始用NL液晶屏显示,在调试程序时,为了更了解程序的一些参数,又用了两位共阳数码管。两位数码管直接和52单片机PO、P2口连接。液晶屏1602芯片也是用软件来驱动的.液晶屏软件驱动很简单,用P1.4口控制背景灯,P1.5为1602芯片数据通讯线.P1.6为时钟线,P1.7为片选线。
电源分三路,即485电源、普通电子电能表,52单片机。这样做增加了一点成本.但对保证程序的稳定有利。变压器的选择很关键,因为三路都使用同一个变压器。稳压用的是7805。
二、软件部分
程序采用汇编语富编写,包括主程序、中断程序(电量数据、串行通讯)、费率切换程序、显示程序、通讯程序、IIC协议驱动程序。
1.主租序
52单片机初始化。包括堆栈的分配、标志位初始化,电量、时段、表号从24C20读取,中断的参数设置、载波参数设置等。
主程序的运行需调用显示程序、电量数据存储IIc芯片程序(需标志位变换),读取PCF8563芯片时间数据程序、费率切换程序、自动抄表日程序等。主程序就是一个循环。
当有中断发生时,执行中断程序。
2.中断程序
电量数据、串行通讯。每当P3,2口收到32个脉冲,就执行中断电量数据程序,此中断程序优先级别最高.首先给总电量数据内存加l,然后检测当前费率工作状态,确定该给哪个费率(尖、峰、平、谷)电量数据加1,最后置电量数据标志位为零。串行通讯程序检测通讯数据是否是国标645规约电能表通信格式。
若不是放弃此次通讯,每字节数据为偶效验。
3、费率切换程序
费率切换主要是找到当前时间电表应该工作在什么状态,是尖峰平还是谷。要通过从时钟芯片读出当前年、月、日、时、分、秒,然后和时段数据比较来确定。可难的是,这个时段数据是变化的,时段设置是可以通过上位机软件来修改的,所以费率切换实际上是很多的变量比较。也许用C语言就简单多了,但用汇编,那个CJNE指令用来用去很烦。有感兴趣的朋友可以把此源程序拿回去,慢慢消化,看看有没有更好的办法。
此程序可以在一年内划分两个时区。细看笔者这段程序,你不难发现,实际上一年内可以划分很多时区。但为了方便用了两个。有个问题要说一下,此费率切换程序识别精度没有做到秒,做到了分钟。因为到秒的话,程序有点繁琐,而且还会有一些实时问题要在程序里做出错处理,浪费了资源。
4.显示程序
用液晶屏显示当前时间、年月曰、当前总电量,当前尖、峰、平、谷‘电量,当前费率状态,表号(为2个参数).电表常数。共计11个参数。用数码管显示一个变量参数(可以是秒、分.电量的个位或者十位等,但必须是两位。)此11个参数采用循显方式。此程序显示韵参数和每个参数显示的时间可以增加或减少,但不能通过上位机更改,只能在源程序里改。感兴趣的朋友可以把这段程序消化一下,使之只可以在上位机改,但最好遵守645规约。该规约可以在网上找。
5.通讯程序
为国标电能表645规约方式。例如:上位机通过抄表软件抄此电表当前总电量数据。如果表号为000019861012.那么上位机抄表软件发给电表数据的格式为6812108619000068010243C39A16。
若电表当前电量为49.98度,则电表发给上位机的数据格式为6812108619000068810643C3CB7C3333CB16。可以看出,必须足68开头.16结束。还有校验字节为倒数第二个字节。校验字节为前面所有字节相加,舍弃进位后得到的字节。
具体可参考国标电能表645规约。
子程序JSHOU为此通讯程序,具体思路就是比较上位机抄表软件抄的参数(标识码)是否为此表的参数。
6.I2c协议驱动程序
时钟芯片PCF8563和24C02断电数据保存芯片共用52单片机P3.6、P3.7口。用i不同的地址来确定是8563芯片还是24C02芯片。8563地址为:读OA3H、写OA2H。24C02地址为,读OAIH、写OAOH。有关PCF8553芯片资料可在网上找一下。
本机调试用了很多时间,主要是程序上的一些错误,调试时没有用软件仿真。硬件仿真用了SST89E516RD芯片。
其仿真成本很低,不需要买昂贵的仿真器。感兴趣的朋友可在网上搜一下此芯片资料,自籼一个仿真器。