• 公司地址
    广东,深圳
  • 联系电话
    4000-077-366

应用于磁致伸缩传感器的SSI-USB转换器

  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为最低位。

磁致伸缩传感器SSI信号传输时序图
磁致伸缩传感器SSI信号传输时序图

  1.2总体设计

  SSI-USB转换器的设计主要包含2部分:(1)向下配置参数部分,即通过上位机界面对传感器的相关参数进行设定,设定好后通过USB接口传送给SSI-USB转换器,然后SSI-USB转换器再将接收到的配置参数信号转化为SSI信号传送给磁致伸缩传感器。(2)上传测量结果部分,即磁致伸缩传感器将测量结果通过SSI接口传送给SSI-USB转换器,然后SSI-USB转换器再将其转化为USB信号传送给上位机供分析计算。SSI一USB转换器的总体结构框架如图2所示。

SSI-USB转换器的总体结构
SSI-USB转换器的总体结构

  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所示。

USB接口部分电路
USB接口部分电路

  引脚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所示。

SSI-USB转换器软件流程
SSI-USB转换器软件流程

  在通过上位机界面对传感器进行配置参数的过程中,使用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转换器应用在其他领域提供了参考。