1、SSI协议规范及总体设计
1.1SSI协议规范
SSI通讯协议是一种串行通信协议,其中SSI全称为同步串行接口(Synchronous Serial Interface)。SSI传输过程中,有24/25/263种编码模式。SSI信号包括差分同步时钟信号CLOCK+、CLOCK一,差分数据信号DATA+、DATA-,电源VCC与地GND。通过差分方式传输码值提高了抗干扰的能力,接线简单,增加了系统控制的可靠性。
SS通信协议的双方,一方发送时钟信号,另一方在这个时钟脉冲信号的控制下从最高有效位(MSB)开始同步传输数据。SSI信号传输时序图如图1所示。其中D0~Dn为数据信号,T为一个时钟信号周期的持续时间;Tm为单稳触发时间,Tp为数据传输间隔,并且Tp≥Tm;MSB为最高位,LSB为最低位。
1.2总体设计
SSI-USB转换器的设计主要包含2部分:(1)向下配置参数部分,即通过上位机界面对传感器的相关参数进行设定,设定好后通过USB接口传送给SSI-USB转换器,然后SSI-USB转换器再将接收到的配置参数信号转化为SSI信号传送给磁致伸缩传感器。(2)上传测量结果部分,即磁致伸缩传感器将测量结果通过SSI接口传送给SSI-USB转换器,然后SSI-USB转换器再将其转化为USB信号传送给上位机供分析计算。SSI一USB转换器的总体结构框架如图2所示。
2、硬件设计
SSI-USB转换器的硬件电路部分主要包括3部分:(1)起主控作用的单片机;(2)与磁致伸缩传感器相连的SSI接口电路;(3)与上位机相连的USB接口电路。
2.1、CPU及SSI接口部分电路
如图3所示,设计中CPU采用的是AVR单片机AT-megal28.ATmegal28是8位系列单片机中配置最高的一款单片机,应用及其广泛[²]。在SSI接口部分电路的设计中采用差分平衡型收发器芯片MAX490将时钟信号SSLCLK和数据信号SSLDATA分别转化为符合SSI通信协议规范的差分信号CLK+,CLK—,DATA+,DATA一信号。为了保证数据的高速传输及传输的可靠性,设计中采用高速光耦6N137将SSICIK和SSIDATA信号与单片机的SSLCLK1和SSIDATA1信号进行隔离。并且6N137对输入信号具有整形的作用,输入的方波信号经6N137输出后,输入信号原本波形较缓的上升沿和下降沿得到改善。
磁致伸缩传感器的测量结果需要传递到上位机供用户分析计算,且要求满足一定的更新频率如3ms、2ms、1ms、0.5ms等。采用普通I/O口模拟SSI通信的方式,由于受到系统时钟周期的限制无法达到如此高的更新频率,故在设计上采用SPI的主从通信(即SSI-USB转换器作为主机,磁致伸缩传感器作为从机)代替SS通信,将SCK脚和MISO脚引出来分别定义为SSI-CLK1和SSI-DATA。即CPU作为主机发送时钟信号,传感器作为从机在时钟脉冲的控制下向主机传送数据信号。而配置参数的过程中因为对数据传送速度没有过高的要求,可以通过采用普通1/0口模拟SSt通信方式实现。同样是SCK脚和MSO脚,但是与上传测量结果不同之处是此时SCK脚作为数据输出脚,MISO脚作为时钟输入脚,同时将MISO脚接到NTl脚,用于捕获传感器发送的时钟信号。
2.2、USB接口电路
设计中利用PDIUSBD12芯片来实现USB接口,PDUS-BD12是一款性价比很高的USB器件,可与任何外部微控制器/微处理器实现高速并行连接(2M字节/s)。USB设备接口电路的硬件设计主要以PDIUSBD12为中心,设计它与USB物理接口及微控制器之间的连接。其接口电路图如图3所示。
引脚A0通过电阻和地连接,这样微控制器可以向PDUS-BD12写数据或向PDIUSBD12读取数据。PDIUSBD12的GL_N接LED,对其工作状态进行监控,LED在USB被连接时会发光,在进行数据传输时会闪烁。设计中USB总线采用的是设备自供电,因此将USB接口的VBUS脚悬空。R、Rg为串联终端电阻。PDIUSBD12片内集成了6~8MHz时钟乘法PLL这样就可以使用低成本的6MHz晶振,E—MI也随之降低。
3软件设计
在SSI-USB转换器的软件设计部分,由于在上传传感器的测量结果的过程中要使用SPI通信代替SSI通信以实现高速传输的目的,因此要对SPI进行初始化,此外也要对I/0和USB进行初始化,即开机启动时要对系统进行初始化。初始化工作完成后就进入while循环,为了保证计算机已经完成对SSI-USB转换器的插入检测和枚举,利用定时器0设置6s开机启动延时,6s延时只在开机启动时执行一次。延时时间到之后,不断查询上位机是否发送命令,若接收到命令再判断是什么命令,然后去执行相应命令对应的服务程序。程序流程图如图4所示。
在通过上位机界面对传感器进行配置参数的过程中,使用NTl来捕获传感器发送的时钟信号的上升沿,并在中断服务程序中从最高有效位开始传送数据。每次中断,传送一个数据有效位。其中的中断服务程序如下:
voidMasterWrite()
{
i(IDSendData&0x80)SetData:/发送数据的最高位
eleCkarData
DSendDatu<<=1;/数据左移一位,将下一位要传送的数据移至最高位
hlNum++
}
在上传传感器的测量结果的过程中,通过定时器1来实现0∙5ms、1ms、2ms、3ms的更新频率在定时器1中断服务程序中将更新数据的标志位Data_Flag置位后面将依据此标志决定是否更新数据。由于SSI信号的编码模式是24位或25位或26位本设计中统一定义为32位其中不用的高位全部置为0。在更新数据函数执行完后将更新后的数据通过USB接口上传给上位机。其中更新数据函数如下:
void da ta_sample(void)
{
uinti=0;
CLI();
counter=4;
SEI();
switch(interval)//设置定时器1的计数初值从而分别实现3ms、2ms、1ms、0∙5ms的更新频率
{
case0:SAMPLE_TIME=65536-1500;
break;
case1:SAMPLE_TIME=65536-1000;
break;
case2:SAMPLE_TIME=65536-500;
break;
case3:SAMPLE_TIME=65536-250;
break;
default:
break;
}
timerl_in it();//启动定时器1
while(counter>0)
{
if(Data_Flag==1)//读传感器的测量结果并存储以便向上位机传送
{
databuff0[0]=Read_Data1[0];
databuff0[1]=Read_Data1[1];
databuff0[2]=Read_Data1[2];
databuff0[3]=Read_Data1[3];
DatFlag=0;
counter=counter-4;
}
}
TCCR1B=0x00;
}
4结束语
文中研究了一种用于磁致伸缩传感器的SSI-USB转换器实现了上位机与磁致伸缩传感器的通信。一方面实现通过上位机界面对传感器进行参数配置;另一方面实现将传感器的测量结果高速传给上位机供分析计算。技术上在SSI接口部分采用SPI的主从通信代替SSI通信实现了高速传输数据的目标。并且采用价格便宜接口方便可靠性高的PDIUSBD12芯片搭建USB接口电路与计算机通信使该SSI-USB转换器的应用具有普遍性。同时也为SSI-USB转换器应用在其他领域提供了参考。