基于 SoPC 的震动信号采集设备设计方法
1 接口硬件设计
SPI(Serial Peripheral Interface)即串行外围设备接口是Motorola公司推出的一种同步串行接口。SPI总线是一种4线同步总线,占用较少的I/O资源。Nios Ⅱ与外界SPI接口通信可采用软件控制I/O、Mege IP Core以及自定义外设等方法。
软件控制I/O是利用CPU执行程序来模拟SPI接口的时序从而完成通信,其特点是设计简单、使用方便,但是由于CPU长时间进行时序模拟,不能发挥出高速信号处理的优势,故不适合本设计;Mege IP Core是Altera公司(或第三方)推出的可以实现特定功能的IP核,通过将它集成到SoPC系统中,可以快速构成SPI接口,但利用此种方法只能完成基本的通信功能,不能实现更多的扩展,故本设计不采用;自定义外设即定制基于Avalon的用户外设,通过自行设计SPI硬件控制器,在实现通信功能的同时,使其具有采样通道控制、FIFO缓冲以及DMA功能,使CPU不再参与通信操作,而利用DMA中断进行采样数据的传输,可以极大的提高CPU利用率,故本设计采用此种方法。
本设计采用Verilog硬件描述语言对自定义的A/D采样控制器进行设计。如图2所示,控制器与Avalon总线通过data_bus、addr、pro_clk、WR、RD以及interrupt进行通信,接受CPU的控制指令和回传采样数据;控制器与AD7329通过miso、mosi、sclk以及CS进行通信,完成采集的控制和数据的传输。控制器设计好后利用SoPC Builder对其封装成一个元件(也可称之为IP核),而后可以像Altera提供的Mege IP Core外设一样使用。
图2 SPI原理图
2 接口软件实现
为了实现A/D采样控制器的功能,除了硬件设计外,还需要开发相应的硬件抽象层(HAL)驱动程序。HAL可以看作是一个支持应用程序开发的软件平台,它提供API函数接口,屏蔽硬件访问细节,虽然占用了一些额外的资源,但大大增加了应用程序的开发速度和可移植性。
驱动开发的第一步就是创建一个用于描述设备寄存器的设备头文件,在这个文件中应用清晰易懂的宏符号描述出寄存器集合,并给出其访问方法;第二步为创建驱动程序,即为应用程序编写API函数,用以完成控制器初始化、工作模式设定、SPI通信等功能;驱动程序开发完毕后,还需要把源程序文件放到约定的目录下,并为它编写一个简单的Makefile文件,这样,驱动程序才能编译到HAL系统库中。下面列出了主要的API函数:
bool Init_SPI(void); //SPI控制器初始化,返回值为0表示成功,下同
bool Init_ad7329(void); //AD7329初始化
bool Set_ad7329_InputMode(unsigned int inputmode) ; //设置模拟输入模式
bool Set_ad7329_PowerMode(unsigned int powermode); //设置输入电源范围
bool Set_ad7329_WorkMode(char workmode,char startchannl,char number);
//设置工作模式:即所选通道、通道自动切换模式
int Set_ad7329_SampleStart(void); //开始采样,返回值为采样工作模式
3 仿真与测试
A/D采样控制器是在Quartus Ⅱ 7.2 SP3环境下设计的,在完成时序仿真后采用modelsim 7.2中进行功能仿真,仿真结果如图3所示。通过仿真结果可以看出,在CPU控制下,通过Avalon总线控制命令和数据传递给A/D采样控制器并写入到其内部寄存器中,在控制命令的作用下,完成AD7329的初始化、输入模式、输入电压范围和采样通道的选择,并开始进行采样。在采样数据达到预定数量时,interrupt变低,通知CPU启动DMA数据传输,而后,在DMA控制器的控制下,完成了数据的读取。
图3 SPI仿真时序图
结论
本系统经多次实验室测试,可以对多种不同输出范围的模拟震动传感器进行信号采集,并且精度高、速度快。由于将采集得到的数据实时发送到以太网上,故通过连接在网上的工作站可同时对多套信号采集设备进行控制和记录,大大提高了系统的可扩展性。综上可以看出,本系统非常适合在对采集速度和传感器节点数量要求较高的测试领域应用。
评论