图3 5V基准电源电路
经过此电路可以在电源模块MC7805的3端得到+5V的基准电源。其中R25为压敏变阻器。
P87C591外围电路和CAN总线部分设计
通过P87C591电路可以实现指定时间内用电量的计算、数据存储、修改电度表数值和通过图4所示的CAN总线收发电路实现与上位机的通信。
有关P87C591外围电路设计,可以参见其他单片机的外围电路设计,这里不再赘述。
图4 CAN总线收发电路
连接P87C591和单片机之间的芯片是P82C250。图4这部分电路的原理可以参考有关CAN总线设计方面的资料,这里也不再阐述。
软件部分设计
本方案的软件部分主要由主程序和中断服务子程序组成。其中主程序完成的功能有芯片和CAN总线的初始化、进行电量的计算和存储。
中断服务子程序完成的功能是利用CAN总线实现和主机之间的通信和电表初值的设定。其中电表初值设置由上位机完成,这样可以节省单片机的外围电路并且可以防止现场人为恶意的更改电量值。其中CAN总线的初始化程序如下:
voidinit_can_controller()
{
//进入CAN控制器复位模式
CANMOD=0x01; //将CAN控制器设置为复位模式以启动初始化
//TXDCPort(P1.1)配置
//管脚TXDC设置为推挽模式
P1M2=P1M2|0x02;//P1M2.1=’1’,P1M1.1=’0’(默认)
CANADR=BTR0; //BTR0和BTR1编程为125kbit/s@12MHz
CANDAT=0x45;
CANADR=BTR1;//TSEG1=12,TSEG2=3,SJW=2
CANDAT=0x2B;//Sample=1->sample point~81%
//验收滤波器的配置-- Bank1的滤波器1配置为接收ID=010.0000.0xxx
CANADR=ACR10;//将地址设置到验收代码寄存器0(Bank1)
CANDAT=0x50;//验收代码0用于滤波
CANDAT=0xE0;
CANADR=AMR10;//将地址设置到验收屏蔽寄存器0(Bank1)
CANDAT=0x00;//bank1:验收屏蔽0
CANDAT=0x0F;//bank1:验收屏蔽1只与高四位有关
CANDAT=0xFF;//bank1:验收屏蔽2无关
CANDAT=0xFF;//bank1:验收屏蔽3无关
CANADR=ACFMOD;//将地址设置到ACF模式寄存器
CANDAT=0x55;//单验收滤波器使用11位ID(SFF)
CANADR=ACFPRIO;//将地址设置到ACF优先级寄存器
CANDAT=0xFF;//所有滤波器都为高优先级
结束语
综上所述,由于ADE7755是专用电量计量芯片,且具有抗干扰的优点,而P87C591及其外围电路也是当前成熟的技术,其可靠性和抗干扰性都得到了实际验证,所以本方案简单易行。