目前比较流行的电子电度表芯片(如AD7750和AD7755)存在着测量范围小、与MPU连接复杂、功能简单等缺点。CS5460是Crystal公司最新推出的带有串行接口的单相双向功率/电能计量集成电路芯片。与AD7750和AD7755相比,该芯片具有结构简单、功能齐全、性能优良的特点。用具有超低功耗、高集成度、高可靠性的MSP430单片机与其相连接,可简化电路设计,提高效能,并广泛应用于功率测量和电子电表的数据采集以及电能计量领域。
1 MSP430单片机简介
MSP430单片机是TI公司生产的超低功耗单片机,将大量的外围模块整合到片内,因而特别适合于设计片上系统。它是16位的精简指令架构,有大量的工作寄存器和数据存储器。MSP430单片机有如下特点: 具有超低功耗,强大的处理能力,高性能模拟技术及丰富的片上外围模块,以及方便高效的开发环境,且系统工作稳定。MSP40工作在1.8~3.6 V电压下,有正常工作模式(AM)和4种低功耗工作模式;电源电压为3 V时,各种模式的工作电流分别不同。单片机可以方便地在各种工作模式之间切换。MSP430单片机引脚图如图1所示。
图1 MSP430X11X系列引脚图
2 CS5460芯片简介
CS5460是Crystal公司最新推出的带有串行接口的单相双向功率/电能计量集成电路芯片。CS5460增加了以下功能: 具有片内看门狗定时器(Watch Dog Timer)与内部电源监视器;具有瞬时电流、瞬时电压、瞬时功率、电流有效值、电压有效值、功率有效值测量及电能计量功能;提供了外部复位引脚;双向串行接口与内部寄存器阵列可以方便地与微处理器相连接;外部时钟最高频率可达20 MHz;具有功率方向输出指示。这些增加的功能更加便于与微处理器(MPU)接口,并能方便地实现电压、电流、功率的测量和用电量累积等功能。
CS5460内部集成了2个Δ∑A/D转换器、高/低通数字滤波器、能量计算单元、串行接口、数字频率转换器、寄存器阵列和看门狗定时器等模拟、数字信号处理单元,其内部结构如图2所示。CS5460的引脚排列如图3所示,引脚描述详见表1。
图2 CS5460的基本内部结构
图3 CS5460引脚图
图4 硬件原理图
表1 CS5460 引脚描述
3 硬件设计
单片机MSP430和集成电路芯片CS5460组成的硬件的电路如图4所示。通过低压差调节器LP2951ACM3.0向MSP430单片机VCC引脚提供3.0 V的工作电压,引脚VSS接地。CS5460的引脚RESET、CS、SDI、SDO、SCLK、EDIR接P1.0~P1.5口,接收来自单片机的信号,INT接RST/NMI引脚使单片机MSP430接收来自芯片CS5460的中断;EOUT与XIN的晶体振荡器连接,接收来自CS5460的XIN引脚晶振的输入;VREFIN、DGND、VREFOUT、VA-经电容C5(0.1 μF)接地。VIN-、VIN+、HN+、HN-接两个变压器为CS5460芯片提供+5 V的电压;VD+、VA+接电阻R3接电容再接地,C1、R1、D1、D2和C2、R2、D3、C3组成的电路向CS5460芯片的模拟数字电源正极输入+5 V电压;PFMON接R4和R5再与地接,监视模拟电源输入是否低于阈值。
4软件设计
CS5460的串行接口部分集成了一个带有发送/接收缓冲器的状态机,状态机在SCLK上升沿解释8位命令字。根据对命令的解码,状态机将执行相应的操作,或者为把寻址的内部寄存器的数据传送到发送缓冲区,写操作在数据传输前要等24个SCLK周期。通过寄存器读/写命令,数据可被写入或从CS5460中读出。数据的读、写通过向串口SDI引脚写入相应的8位命令字(高位在前)来启动。一些命令字在执行时受周期计数寄存器和配置寄存器内容的影响,需要先对周期计数器和配置寄存器内容进行正确设置。寄存器写指令后必须跟24位数据,先写命令字启动写操作;然后随着24个连续的串行时钟脉冲,CS5460将从串行输入引脚SDI接收串行数据,一旦收到数据,状态机便将数据写入配置寄存器并返回到命令模式。通过SDI引脚写入命今后,可从SDO引脚读出数据。 读写时序如图5所示。
图5 读写时序
下面依照时序给出读写的基本C程序。
main() {
char cdata , didata;
scanf("%s,%s",&cdata,&didata);
IC_writeCS5460(cdata);
IC_ReadCS5460(didata);
}
void IC_writeCS5460(unsigned char CData) {
unsigned char i;
CS5460_SCLK_0;//时钟置零
CS5460_CS_0;//片选置零
for(i=0;i<8;i++) {//开始一个字节的CData
CS5460_SCLK_0;//时钟置零
Delay_us(5);//相当于5个NOP
CS5460_SCLK_1;//时钟置1
Delay_us(5);//相当于5个NOP
if ( CData&0x80) {
CS5460_SDI_1;
}
else {
CS5460_SDI_0;
//判断要写入的内容最高位是否为1。是1写1,不是
//写0,再左移数据,循环写8次
CData+=CData;
}
}
unsigned int IC_ReadCS5460(unsingned char DIDATA) {
unsigned char i , j;
unsigned int DATA;//要返回的内容
DATA=0;//要返回的内容先清零
IC_WriteCS5460(DIDATA);//写入程序状态字
CS5460_SCLK_0;//时钟置零
for(j=0;j<2;j++) {
DATA+=DATA;
//2个字节的循环,根据需要可以改成3个字节
for(i=0;i<7;i++){
//先循环要返回的内容(左移1位)
CS5460_SDI_1;
CS5460_SCLK_0;
//以下开始读出一个字节的8b循环
Delay_us(5);//SDI口置1
if(PINC&(1<<PC2)) {//时钟置零
DATA=DATA+1;//延时5 μs
DATA+=DATA;
}
}//要读的内容最高位为1,则写1;否则写0,再左移
CS5460_SDI_0;//SDI口置1
CS5460_SCLK_0;//时钟置零
Delay_us(5);//延时5 μs
CS5460_SCLK_1;//时钟置1
Delay_us(5);//延时5 μs
if(PINC&(1<<PC2)) {
DATA=DATA+1;
}//读一个字节最后一位时单独处理,是1补1,不是
//则跳到下一步,回到上面左移1位,相当于补0
CS5460_SCLK_0;
CS5460_SDI_1;//SDI口置1
Delay_us(2);//延时2 μs
CS5460_CS_1;//片选置0
}
Return(DATA);//返回要读的内容
}
结语
本文介绍的是以单片机MSP430为核心、基于CS5460芯片的应用,实现了MSP430单片机和CS5460芯片的硬件设计,以及在功率测量中的应用,并且给出了单片机MSP430和CS5460读写的C程序。该系统具有低功耗、高集成度、高性能和高可靠性等特点。