华北区域:
李经理 15343445592
华南区域:
冯经理 18026777082
华东区域:
文经理 13544971592
华中区域:
叶经理 18127585813
技术支持:
叶工 13501587940
为了实现磁致伸缩传感器与上位机的交互,研制了一种由高档8位单片机ATmega128控制的SSI-USB转换器。通过对SSI协议规范的研究,以及对由PDIUSBD12实现的USB接口电路的研究,提出了相关的软硬件设计。最终实现了SSI信号与USB信号的相互转换,从而实现了磁致伸缩传感器与上位机的通信。
1、SSI协议规范及总体设计
SSI通讯协议是一种串行通信协议,其中SSI全称为同步串行接口(Synchronous Serial interface)。SSI传输过程中,有24/25/26 3种编码模式。SSI信号包括差分同步时钟信号CLOCK+、CLOCK-,差分数据信号DATA+、DATA-,电源VCC与地GND。通过差分方式传输码值提高了抗干扰的能力,接线简单,增加了系统控制的可靠性。
SSI通信协议的双方,一方发送时钟信号,另一方在这个时钟脉冲信号的控制下从最高有效位(MSB )开始同步传输数据。SSI信号传输时序图如图1所示。其中D0~Dn为数据信号,T为一个时钟信号周期的持续时间;Tm为单稳触发时间,Tp为数据传输间隔,并且Tp≥Tm;MSB为最高位,LSB为最低位。
SSI-USB转换器的设计主要包含2部分:①向下配置参数部分,即通过上位机界面对传感器的相关参数进行设定,设定好后通过 USB接口传送给SSI-USB转换器 ,然后SSI-USB转换器再将接收到的配置参数信号转化为SSI信号传送给磁致伸缩传感器。②上传测量结果部分,即磁致伸缩传感器将测量结果通过SSI接口传送给SSI-USB转换器,然后SSI-USB转换器再将其转化为USB信号传送给上位机供分析计算。
2、硬件设计
SSI-USB转换器的硬件电路部分主要包括3部分: (1)起主控作用的单片机;(2)与磁致伸缩传感器相连的SSI接口电路;(3)与上位机相连的USB接口电路。
2.1 CPU及SSI接口部分电路
设计中CPU采用的是AVR单片机AT-mega128,ATmega128是8位系列单片机中配置最高的一款单片机 ,应用及其广泛。在SSI接口部分电路的设计中采用差分平衡型收发器芯片MAX490将时钟信号SSI_CLK和数据信号SSI_DATA分别转化为符合SSI通信协议规范的差分信号CLK+, CLK-,DATA+,DATA-信号。为了保证数据的高速传输及传输的可靠性 ,设计中采用高速光耦6N137将SSI_CLK和SSI_DATA信号与单片机的 SSI_CLK1和SSI_DATA1信号进行隔离。并且6N137对输入信号具有整形的作用 ,输入的方波信号经137输出后 ,输入信号原本波形较缓的上升沿和下降沿得到改善。
磁致伸缩传感器的测量结果需要传递到上位机供用户分析计算 ,且要求满足一定的更新频率如3ms、2ms、1ms、0.15ms等。采用普通 I/O口模拟SSI通信的方式 ,由于受到系统时钟周期的限制无法达到如此高的更新频率,故在设计上采用SPI的主从通信 (即SSI-USB转换器作为主机,磁致伸缩传感器作为从机 )代替SSI通信,将SCK脚和MISO脚引出来分别定义为SSI_CLK1和SSI_DATA1。即CPU作为主机发送时钟信号,传感器作为从机在时钟脉冲的控制下向主机传送数据信号。而配置参数的过程中因为对数据传送速度没有过高的要求,可以通过采用普通I/O口模拟SSI通信方式实现。同样是SCK脚和MISO脚,但是与上传测量结果不同之处是此时SCK脚作为数据输出脚,MISO脚作为时钟输入脚 ,同时将MISO脚接到INT1脚 ,用于捕获传感器发送的时钟信号。
2.2 USB接口电路
设计中利用PDIUSBD12芯片来实现USB接口,PDIUS2BD12是一款性价比很高的 USB器件,与任何外部微控制器/微处理器实现高速并行连接 (2M字节/s)。USB设备接口电路的硬件设计主要以PDIUSBD12为中心 ,设计它与USB物理接口及微控制器之间的连接。引脚A0通过电阻和地连接,这样微控制器可以向PDIUS-BD12写数据或向PDIUSBD12读取数据。PDIUSBD12的GL _N接LED,对其工作状态进行监控, LED在USB被连接时会发光,在进行数据传输时会闪烁。设计中USB总线采用的是设备自供电,因此将USB接口的VBUS脚悬空。R7、R8为串联终端电阻。PDIUSBD12片内集成了6~8MHz时钟乘法PLL,这样就可以使用低成本的6MHz晶振,E-MI也随之降低。
3、软件设计
在SSI-USB转换器的软件设计部分,由于在上传传感器的测量结果的过程中要使用SPI通信代替SSI通信以实现高速传输的目的,因此要对SPI进行初始化,此外也要对I/O和USB进行初始化,即开机启动时要对系统进行初始化。初始化工作完成后就进入while循环,为了保证计算机已经完成对SSI-USB转换器的插入检测和枚举,利用定时器0设置6s开机启动延时,6s延时只在开机启动时执行一次。延时时间到之后,不断查询上位机是否发送命令 ,若接收到命令再判断是什么命令,然后去执行相应命令对应的服务程序。
在通过上位机界面对传感器进行配置参数的过程中,使用INT1来捕获传感器发送的时钟信号的上升沿,并在中断服务程序中从最高有效位开始传送数据。每次中断,传送一个数据有效位。其中的中断服务程序如下:
void Master_Write ( )
{if( IOSendData&0x80) Set_Data;//发送数据的最高位
elseClear_Data;
IOSendData < < = 1;//数据左移一位,将下一位要传送的数据移至最高位Int1Num + + ;}
在上传传感器的测量结果的过程中 ,通过定时器1来实现0.15ms、1 ms、2ms、3ms的更新频率,在定时器1中断服务程序中将更新数据的标志位Data _Flag置位,后面将依据此标志决定是否更新数据。由于SSI信号的编码模式是24位或25位或26位,本设计中统一定义为32位 ,其中不用的高位全部置为0。在更新数据函数执行完后,将更新后的数据通过USB接口上传给上位机。其中更新数据函数如下:void data_sample (void)
{uint i = 0;
CLI( ) ;
counter = 4;
SEI( ) ;
switch ( interval)//设置定时器1的计数初值;从而分别实现3m s, 2ms,1ms,0.15ms的更新频率
{case 0: SAMPLE_TIME =65536-1500;
break;
case1: SAMPLE_TIME = 65536-1000;
break;
case 2: SAMPLE_TIME = 65536-500;
break;
case 3: SAMPLE_TIME = 65536 -250;
break;
default:
break;}
timer1_init( ) ;//启动定时器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 ]; Data_Flag = 0;
counter = counter - 4;}}
TCCR1B = 0x00;}];
4、结 论
文中研究了一种用于磁致伸缩传感器的SSI-USB转换器,实现了上位机与磁致伸缩传感器的通信。一方面实现通过上位机界面对传感器进行参数配置;另一方面实现将传感器的测量结果高速传给上位机供分析计算。技术上在SSI接口部分采用SPI的主从通信代替SSI通信,实现了高速传输数据的目标。并且采用价格便宜,接口方便 ,可靠性高的PDIUSBD12芯片搭建USB接口电路与计算机通信,使该SSI-USB转换器的应用具有普遍性。同时也为SSI-USB转换器应用在其他领域提供了参考。
联系方式:
华北区域:李经理 15343445592
华南区域:冯经理 18026777082
华东区域:文经理 13544971592
华中区域:叶经理 18127585813
技术支持:叶工 13501587940
邮箱:wenlan@szbadens.com
地址:广东省深圳市宝安区西乡街道湾区人工智能产业园B栋410