SSI总线磁致伸缩位移传感器利用符合RS422电平的两对差分信号传输信号,包含CLOCK十、CLOCK-、DATA+、DATA一以及电源和地线。磁致伸缩位移传感器SSI输出系列作为SSI从机,在SSI主机的控制下,将数据从高位(MSB)同步传输。传输时序图如图1所示。
图中,Tp为传输脉冲序列间隔,T为SSI传输时钟周期,Do-Dn。为传输数据。不传输数据时,CLOCK和DATE端口都为高电平。CLOCK线上的第一个下降沿到来时,传感器内部数据被锁存。在接下来的时间里,数据在CLOCK信号的控制下同步传输。
本磁致伸缩位移传感器SSI数据为24位,单片机内部SSI数据转化过程与16位DAC数据转化过程类似,在此不再赘述。
格雷码又称为循环码,其具有误码率低等优点而被广泛使用。磁致伸缩位移传感器往往具有二进制码和格雷码两种输出方式,以满足不同场合的需求。在程序中可方便地将二进制代码转换为格雷码形式,以下是关键代码:
……//将位移量转换为三进制码
Gray=Binary^(Binary>>l ); //将二进制码转换为格雷码
……//SSI接口输出
本设计中采用单片机内置SPI控制器来实现ssI协议。从机CLOCK线同时连接到单片机外部中断引脚INT2,在中断处理函数中完成SSI数据的快速发送。关键代码如下:
SPCR|=(1<<SPE)|(1<<CPOL);
SPCR&=~((1<<CPHA);//先发送高位,从机工作方式,Model模式
G1CR=OxAO;//开启外部中断INT2
MCUCSR&=~(1<<ISC2);//INT2下降沿产生中断
GIFR=OxFF;//清零外部中断标志
单片机SPI控制器是以8位二进制数为一组数据帧,故需要将SSI数据分成若干字节发送。先发送高8位,再发送低8位。单片机外部中断INT2中断处理函数关键代码如下:
#pragma vector=TNT2_vect
_ interrupt void Slave_Write(void)
……//读取当前数据
for(i=O;i<3;i++)
{
Clear_SS; //拉低SS片选引脚
Numb=100;
SPDR=SSISendDatal [i];//向发送寄存器赋值
while ((!(SPSR&(1<<SPIF)))&&(Numb> 10))
Numb–;//防止发送失败导致程序进入死循环
Set_SS;
}
本设计中采用上位单片机作为SSI主机,与磁致伸缩位移传感器通过SSI接口相连完成本输出接口的调试。上位单片机程序实现过程与下位SSI接口实现过程类似,在此不再赘述。