摘要:阐述了基于CY7C68013和ADNS-3080的两自由度振动偏移量实时采集设备的设计与实现。详细分析了采用ADNS-3080完成图像采集、分析,并得出终有效数据△x和△y值的方法;采用CY7C68013进行数据处理并通过SPI总线和USB总线进行数据传输的过程;以及上位机的数据存储、分析、显示和网络传输的软件设计。
光电鼠标的工作机理是采用一种基于CMOS成像的图像识别方法,通过一个感光眼,不断的对物体进行拍照,并将前后两次图像进行DSP处理,得到移动的方向和间隔,因此,光电鼠标芯片具有一种传感器的基本功能。振动的检测,其基本原理可以归结到一种位移的检测。只是此种位移是围绕某个基本点进行往复移动。因此设计了一种采用光电鼠标传感器原理进行振动检测的设备。
该设备是完全从市场应用的角度进行设计的,设备等间隔连续采集到的△x和△y值经上位机应用程序可以绘制出设备的各种运动参数曲线(包括位移、速度和加速度曲线)并进行相应的运动学分析。
采用现行的鼠标芯片,采集设备可以在速度≤1m/s,加速度≤160m/s2 范围内实现偏移量在为15.88mm,反应时间为0.156ms的捕获。其性能、高速性能和低廉的价格使得该采集设备具备了广阔的应用前景。
1 总体方案设计
系统框图如图1所示,光源照在基板上,该设备固定在待测量物体上。设备主要由ADNS-3080、CY7C68013两块集成芯片及外围电路组成,工作后,ADNS-3080通过其影像撷取系统(IAS)不断捕获基板的图像,经其数字信号处理器(DSP)时频分析并提取出特征值△x、△y,保存至相应的寄存器,并使运动触发寄存器(Motion_Burst)的标志位置1,等待读取;CY7C68013通过SPI总线与作为SPI从设备的ADNS-3080进行通信,循环查询△x和△y的标志位,一旦发现置1,读取△x和△y值,并通过USB2.0接口向上位机传输。E2PROM采用了8KB的24C64,用于实现设备的C0或C2方式加载。CY7C68013采用端口模式模拟主SPI与ADNS-3080通信,与上位机数据传输采用USB中断模式。
图1 系统原理框图
2 设备硬件方案选择
为充分减小系统的PCB板尺寸,设备使用了集成芯片、串行交换结构技术、USB供电等手段。集成芯片的使用还提高了设备抗EMI(电磁干扰)能力;USB2.0接口的使用提供了高速、可靠的数据通信和人性化的用户接口;非接触式的光电测量方法,避免了传统接触式测量中因磨损带来的误差,并可用于恶劣的环境,加大了设备的使用范围。
2.1 ADNS-3080
该集成芯片包括一个影像撷取系统(IAS),一个数字信号处理器(DSP)和一个四线串口(SPI接口)。
IAS通过透镜和照明系统捕获精微的表面图像。这些图像经DSP处理后得出运动的方向和距离。DSP计算出相对位移值△x和△y,等待MCU读取。
它具有如下特性:(1)高速运动的捕获-高达40inch/s和15个gn;(2)超过6400帧/秒的可编程帧速率;(3)支持高达1600cpi的分辨率。
它虽然是一款高端鼠标芯片,但是其高性能的各项参数使其完全可以胜任绝大部分环境下物体两自由度振动偏移量的捕获。
2.2 CY7C68013
该芯片是Cypress半导体公司高速USB系列中的一款,它带有USB2.0串行接口引擎(SIE)、增强型的8051核(性能是标准51核的5~10倍)、8KB的RAM、高性能I/O口(支持96Mbit/s的传输)、支持三种方式(默认方式、C0、C2方式)加载设备。
集成的SIE和公司提供的固件开发框架及丰富的参考源码大大降低了开发难度,只需简单了解USB通信协议即可开发出的固件代码。8KB的RAM使其固件可以无限次;设备插上主机后,固件会自动从主机到设备RAM中,非常人性化;固件在主机上更改后再次编译到驱动(LoaderDriver)中即可实现对设备功能的增、删、改,无须专门的器和对应的设备接口。
加载设备时,可以自由选择是否需要外接E2PROM来实现C0或C2方式加载。C0或C2方式加载可实现设备的更灵活的枚举功能,只需修改E2PROM中的VID(厂商标识符)、PID(产品标识符)即可使设备加载新的固件、新的USB驱动和相应的应用程序,轻易更改设备的功能;相比C0方式,C2方式可以实现固件直接从E2PROM中读取加载。无E2PROM连接时,设备采用默认方式加载实现设备的枚举和重枚举,节省硬件成本。CY7C68013使用自带I2C总线跟E2PROM连接。多种加载方式充分满足了用户的多样化需求。
该芯片的枚举及重枚举的全过程如下:
(1)设备上电后,复位电路直至PPL锁存24MHz晶振,工作频率稳定。
(2)Cypress内核自动检测I2C总线是否有E2PROM。若E2PROM不存在或数据无效,则使用自带的硬件逻辑提供的默认VID和PID(默认值VID为0x04B4,PID为0x8613),以默认方式加载设备到上位机;若E2PROM数据有效,即从E2PROM读取VID&PID,并覆盖其自身的VID&PID,个字节为0xC0,则以C0方式加载设备,个字节为0xC2,则以C2方式加载。
(3)上位机检测到USB设备插入,开始询问其IDs(通过在端口0发起一个GetDescriptor请求),重要的是VID&PID。USB设备答复为??一个未的设备(nondownloadeddevice)。
(4)上位机获得此IDs,就开始加载LoaderDriver,加载后LoaderDriver执行固件的。LoaderDriver是用于FX2固件的驱动,此驱动在控制面板安装目录Driver下可以找到,修改时需安装DDK,然后在VC6.0中重新编译源文件。
(5)LoaderDriver放开并重起FX28051。
(6)被的固件开始运行。
(7)FX28051控制断开USB总线。
(8)上位机发现设备断开,于是释放LoaderDriver。
(9)8051重新连接USB总线。
(10)上位机发现设备插入,并开始询问IDs.。
(11)8051固件根据其自身IDs回复VID&PID等。此时的VID&PID为固件的描述符文件里的VID&PID。
(12)上位机得到IDs,并根据其信息加载对应的驱动程序。
(13)上位机驱动程序和EZ-USB固件已经正确加载,并可以与应用程序执行数据传输和控制了。
至此,应用程序即可调用设备驱动程序来发送和接收数据。
3 系统软件设计
3.1 控制面板简介
控制面板主要用于FX2设备的开发调试(包括硬件设备测试和软件功能测试),具体有厂商请求测试(设备请求、配置请求、管道设置请求等)、各种方式数据传输测试、固件、E2PROM烧写、接口设置、端点设置等。
3.2 烧写E2PROM
记事本编辑好相应的Hex文件后,使用EZUSB控制台自带的工具hex2bix把Hex文件转化为iic文件,然后用EZ-USB控制台。
图2 固件开发流程图
3.3 CY7C68013的固件设计
该固件的主要功能是完成该单片机及外围设备的初始化、设备的重枚举(ReNumeration)、接受主机的设备请求及完成相应的控制数据传输等。
Cypress公司提供的固件开发框架和固件函数库简化并加速了设备固件的开发,大大提高了用户开发的效率,本设备固件的设计也是采用此方法。
固件开发框架流程图见下图2所示。
固件开发完成了USB设备的基本功能需求,设计固件时只需设计用户初始化函数TD_Init()、用户函数TD_Poll(),修改描述符表。TD_Init()完成需要用户自定义的初始化工作,设计时在TD_Init()中添加初始化CPU时钟频率、I/O端口模式、USB接口数据传输模式、清除所有等待的USB中断请求等(待确认)的代码。
用户函数TD_Poll()在固件运行期间被循环调用,本设备主要完成对ADNS-3080的偏移量△x和△y值的连续读取。因为CY7C68013没有带主SPI接口,实现时用单片机固件程序模拟主SPI跟ADNS-3080通信。流程如图3所示。图4和图5是SPI通信的读写时序图。
图3 流程图
图4 SPI接口读操作时序图
图5 SPI接口写操作时序图
3.4 ADNS-3080的固件
DSP固件开发有两种方式,一是自行开发程序,二是使用厂商已提供的固件程序。Agilent公司提供了ADNS-3080的固件adns3080_srom_51.inc(共1986个字节),从网站即可。本次设计该固件是通过主机的应用程序到设备端点,由单片机控制写入ADNS-3080SRAM中[7]。写入时先要对ADNS-3080进行前的初始化工作。完成以后通过读ADNS-3080的SROM_ID寄存器来检验是否成功。
3.5 设备驱动及其Inf文件设计
在设备开发时可以使用控制面板单片机固件,但终产品需要自动完成固件和设备的重枚举。自动的固件和设备的重枚举两个功能的完成依赖于两个驱动,一个用于枚举设备后固件至单片机,叫驱动(EZ-LoaderDriver);一个用于设备重枚举后与主机通信,叫功能驱动。
EZ-LoaderDriver源码由EZ-USB软件开发包提供,结合微软提供的DDK在VisualC++6.0开发环境下把固件和驱动重新编译即可。具体步骤:①使用EZ-USB软件开发包提供的Hex2C工具把单片机固件程序Hex文件转化为C文件;②用固件程序C代码中的firmware[]数据取替EZ-LoaderDriver中firmware.c文件中的数组,重新编译即可生成所需的EZ-LoaderDriver。
功能驱动的设计可以使用Cypress公司提供的GPD(通用设备驱动程序),也可以自行开发。目前自行开发的方式有三种,使用微软提供的DDK、使用Windriver、使用DriveWorks,其中DriveWorks开发带有现成的驱动生成向导,开发较为容易,但没有前两种方式设计的驱动灵活。GPD目前有EZ-USB.sys和CyUSB.sys两个,它们提供了USB标准设备请求和数据传输连接,后者自带应用程序API函数,开发应用程序较为容易,因此本设备选择了CyUSB.sys。
设备驱动的Inf文件是在设备次连接主机时为主机安装设备驱动提供相应的信息。Inf文件的内容主要包括驱动提供商名称、厂商标识符(VID)、设备标识符(PID)、驱动安装目录、添加的注册表信息等,设计时找一样本修改上述内容即可。
4 结束语
4.1 硬件电路设计注意事项
在硬件电路设计时为了便于测试,采用了模块化的思想,分为供电模块、CY7C68013模块、ADNS-3080模块三块,且每一块都引出了相应测试管脚。
板级设计中有两个高频电路块要注意的地方,说明如下:(1)保持D+和D-等间距布线,布线长度要小于75mm,且两线长度相差要在1.25mm以内,用地线包裹,避免通过过孔;(2)USB连接线使用屏蔽线,长度要小于5m;(3)晶振到CY7C68013的走线要尽可能短且远离D+和D-,使用陶瓷电容作为晶振电路电容。
4.2 性能探讨与展望
该设备具备软配置特性,即在E2PROM中烧写不同的VID、PID,可加载不同的一套固件、驱动和应用程序,而且可以无限次的加载,设备功能的修改、升级特别容易;再加之该设备可以对在速度≤1m/s,加速度≤160m/s2范围内振动的物体实现所有运动学参数2mm的实时采集分析。其开发难度小、使用范围广、升级便捷、设备接口人性化、数据采集实时等优点使得该设备具有了非常大的应用前景。
[1]. CY7C68013 datasheet https://www.dzsc.com/datasheet/CY7C68013_1054335.html.
[2]. ADNS-3080 datasheet https://www.dzsc.com/datasheet/ADNS-3080_1134960.html.
[3]. PCB datasheet https://www.dzsc.com/datasheet/PCB_1201640.html.
[4]. EZ-USB datasheet https://www.dzsc.com/datasheet/EZ-USB_305660.html.
免责声明: 凡注明来源本网的所有作品,均为本网合法拥有版权或有权使用的作品,欢迎转载,注明出处。非本网作品均来自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。