摘 要: 针对弧光保护系统的实际需要,设计了一种基于SPI的双机通信系统。简要阐述了该系统的设计思路,并给出了具体的实现方法。实验表明,采用该方法能够满足实际工程中的需求,对于其他SPI的应用也有很好的借鉴价值。
关键词: 弧光保护;SPI;LPC1788;协议
0 引言
在一些重要的用户变电站和发电厂的厂用电系统中[1],弧光短路是中、低压开关柜内部最严重的故障,由于电弧电阻的原因,短路电流往往达不到速断整定值而不能快速动作切断故障,造成严重的后果。据统计资料表明,近年来,每年每1 000台开关柜就有7台遭到损坏,故障率为0.7%,农村配电网的概率更高,达1.2%。有的甚至发展成“火烧连营”的事故,这些配电网事故处理不当甚至会扩大发展为输电网事故,造成重大的经济损失。2010年,云南电网下发了《关于在中低压开关柜加装电弧光保护的通知》,要求在所有的35 kV和10 kV开关柜中加装电弧光保护,目前南方电网已在逐渐推广。
中国能源建设集团华东电力设备制造厂研制的ZHG-1A型智能弧光保护系统采用紫外光弧光检测和过电流检测双判据原理,具有保护动作速度快、可靠性高等特点。它是一个模块化系统,包括主控单元、电流单元、弧光单元,系统构成示意图如图1所示。
1 弧光保护系统主控系统通信结构原理与设计
主控单元是电弧光保护系统的核心部件,负责输入量的采集、测量、计算及逻辑判断,实现系统的各项保护逻辑、与站内监控系统通信等功能。主控系统采用DSP+双ARM结构,其中一块ARM(A片)采用NXP公司的LPC178x芯片负责与站内系统通信,另一块ARM(B片)同样采用LPC178x芯片负责液晶显示与DSP通信。在与站内监控系统通信时,A片ARM要把相关数据通过B片ARM传递给DSP,为此两块ARM之间要进行通信。主控系统通信结构如图2所示。
2 SPI通信设计与实现
2.1 SPI硬件实现
LPC178x/177x系列的SSP是一个同步串行端口(SSP)控制器[2],可控制SPI、4线SSI或Microwire总线的操作。SSP可以与总线上的多个主机或从机交互。但在一次给定的数据传输过程中,总线上只能有一个主机与一个从机进行通信。数据传输原则上是全双工模式,4~16位数据的帧由主机发送到从机或由从机发送到主机。SSP控制器共用以下4个管脚:
(1)SCK:串行时钟管脚,用来同步数据传输的时钟信号。它由主机驱动,从机接收。无论主机往从机写数据还是从从机读数据,它的时钟信号都是由主机的SCK管脚产生,从机不产生时钟信号。
(2)SSEL:帧同步/从机选择管脚,当作主机时此管脚可作为普通的I/O使用;当作从机时此管脚不可用作普通I/O口,只作为SSP的从机选择。主机其他的普通I/O管脚也可与从机的SSEL管脚相连,用作从机的片选。
(3)MISO:主机输入从机输出。MISO信号使串行数据从从机传输到主机。
(4)MOSI:MOSI信号使串行数据从主机传输到从机。
另外,本系统在两片ARM之间预留了两根联络线,以便通信不稳定时便于调整。
2.2 SPI软件实现
在双机通信过程中,主机发送采用查询方式,从机接收采用中断方式。主机发送数据的同时也在接收数据,从机接收数据的同时也在发送数据。通过配置SSP寄存器,选择SPI模式、设置数据长度和通信速率。由于设置从机接收到第4个数据时FIFO产生一次接收中断,因此,主机每次发送一组40个数据,从机只取前37个数据为有效数据,后3个数据接收但作为假数据不用;主机接收的前4个数据也为假数据不用,后36个数据为有效数据。当一组数据接收完成时,调用数据处理函数进行处理。主机SPI流程图如图3所示。
在SPI通信中,主机向从机发送数据,如何判断数据发送正确及接收完成SPI协议本身并未提供任何规范。在设计中,固定数据发送的个数,定义表1所示的SPI数据帧结构,可以很好地解决这个问题[3]。
表1中,起始字节表明一帧传输的开始,这里定义为0XFF;标志字节表明此次传输的数据类型,根据特定的应用类型作具体的规定;数据长度表明此次传输的数据长度,用字节数表示;应用服务数据为所要传输的具体应用数据。
当所有数据接收完成时,根据SPI软件协议,标志字节为0XAA表明此组数据为伪数据,可以不作处理,直接丢弃。当起始字节不是0XFF时,即表示此组数据接收数据有误。在通信中,主机每隔一段时间向从机发送数据,从机根据标志字节判定是控制命令还是运行状态数据[4]。当从机接收的是控制命令时,从机等待主机下一帧数据发送的同时,把相应的数据发给主机。
下面给出从机的SSP1口初始化和SSP1的收发函数代码。
(1)SSP1口初始化代码
void Slave_SSP1Init(void)
{uint8_t i;
uint8_t uiDummy=uiDummy=0;
LPC_SC->PCONP|=(0x1<<10);
LPC_IOCON->P0_7 &=~0x07;//SSP CLK
LPC_IOCON->P0_7|=0x02;
LPC_IOCON->P0_6&=~0x07;
LPC_IOCON->P0_6|=0x02;
LPC_IOCON->P0_8&=~0x07;
LPC_IOCON->P0_8|=0x02;//SSP MISO
LPC_IOCON->P0_9&=~0x07;
LPC_IOCON->P0_9|=0x02;//SSP MOSI
LPC_SSP1->CR0=0x07<<0|//数据长度为8位
0x00<<4|//帧格式为SPI
0x00<<6|//CPOL为0
0x01<<7|//CPHA为1
0x1D<<8;
LPC_SSP1->CPSR=0x2;//时钟预分频
for(i=0;i<8;i++)
{//清0接收FIFO
uiDummy=LPC_SSP1->DR;
}
//从机模式
if(LPC_SSP1->CR1&SSPCR1_SSE)
{LPC_SSP1->CR1&=~SSPCR1_SSE;}
LPC_SSP1->CR1=SSPCR1_MS;
LPC_SSP1->CR1|=SSPCR1_SSE;
LPC_SSP1->IMSC=0x04;
NVIC_EnableIRQ(SSP1_IRQn);
NVIC_SetPriority(SSP1_IRQn,4);
return;
}
(2)SSP1收发函数代码
uint8_t SSP1RWFrames(Chip_SSP_DATA_SETUP_T *xf_setup)
{
uint8_t rdat;
uint8_t i,uiDummy;
LPC_SSP1->ICR=0x03;while((LPC_SSP1->SR&(SSPSR_RNE))!=SSPSR_RNE);*(xf_setup->rx_data+xf_setup->rx_cnt)=
LPC_SSP1->DR;
xf_setup->rx_cnt++;
while((LPC_SSP1->SR&(SSPSR_TNF|SSPSR_BSY))!=SSPSR_TNF);LPC_SSP1->DR=*(xf_setup->tx_data+xf_setup->tx_cnt);
xf_setup->tx_cnt++;
…
}
3 结论
本设计中,两个ARM的主频都为100 MHz,使用公共外设PCLK时钟,通过SSP时钟分频器产生SPCLK时钟。在实验中也考虑过其他方案,由于SPI的接收中断处理方式且又要实现主从机收发同时,发现本方案可行。目前测试结果表明,SPI能很好地满足它们之间高速的双向数据传输要求,其最高传输速率可达5 Mb/s,解决了实际应用中的双机如何可靠通信等问题,已成功应用于弧光保护系统,也可用于其他需要双机通信的场合。
参考文献
[1] 李从飞,陈凡,鲁雅斌,等.DPR360ARC弧光保护系统设计[J].电力系统保护与控制,2010,38(12):125-128.
[2] NXP.LPC178x/7x用户手册[EB/OL].[2011-07-06].http://www.cn.nxp.com/documents/other/LPC177x-178x_UM_Simp CHN.pdf.
[3] 王杰,王小鹏,赵国辉.采用SPI接口实现双DSP双向通信和同步[J].微型机与应用,2010,29(24):96-98.
[4] 高振,罗秋凤.SPI接口与CRC算法在双DSP数据通信中的应用[J].电子产品世界,2011,18(1):46-49.