
本文介绍了一套基于Matlab 环境下的AVR 单片机数据采集系统,其特点是成本低,采集数据速度快,实时
性好。本采集系统使用了带有10位分辨率AD 的微型处理器,接口电路采用USB 接口,DA 输出电路采用spi 关键词:摘
要:李向江樊
京(南阳理工学院
南阳473004)
基于AVR 单片机的数据采集系统设计
信息技术与网络服务
本文介绍了一套基于Matlab 环境下的A VR 单片机数据采集系统。使用A VR 系列的单片机中的ATmega16作为微控制器,提高了系统运行速度。同时它内部带有8通道的10位精度A/D 接口,工作于降噪声模式,增强了抗干扰能力并降低了成本。信号采集结果通过USB 接口直接送入matlab 的工作空间并使用matlab 的GUI 界面显示,便于信号的分析与处理。1整体硬件方案框图
基于A VR 单片机的数据采集系统工作原理结构图如下图1所示。进行数据采集时其工作流程为:被测信号经过运放进行1:1放大后,从模拟信号输入通道输入,送到ATmega16的ADC 模块,ADC 模块内嵌在A VR 单片机内部,可以通过编程实现ADC 转换;转换结束以后把结果发送到PDIUSBD12的数据缓冲区中;当PDIUSBD12接收到上位机发出的读数据请求时,就把数据发送到PC 机端;而DAC 部分就是当接收到上机发来的DAC 转换请求命令和转换数据时,ATmega16就会启动,控制DA 芯片TLV5617,开始进行DAC 转换。其中系统中ADC 电路含4路输入,DAC 电路含2路输出,且ADC 的前两路输入增益可通过反馈电阻值来调节。
AD DA
AVR 数据来集板
USB 传输
操作系统(CPC 机)
Matlab 显示
面板
图1基于AVR 数据采集系统结框图
2
USB 接口电路
USB 接口电路主要是完成上位机和数据采集设备之间的数据传输功能。它的最大速度能达到12Mb/s ,数据的传输决定权完全由上位机来控制。本次设计使用的是Philip 公司的USB 芯片PDIUSBD12。当上位发出模数转换、数模转换、I/O 输入输出或是一次性完成数模转换和模数转换的命令时,设备就会执行相关的应用程序进行工作,并把结果发送到PDIUSBD12的缓冲区中保存。当上位机发出读取数据的命令请求后,PDIUSBD12就会把缓存区中的数据以帧的形式传输到Matlab 应用软件中,以便于数据处理。
在USB 接口设计中,设计的难点在于驱动程序的设计。目前,开发USB 驱动程序使用的工具有Windriver 、DDK 、Driver Studio 。其中利用DDK 开发驱动程序要求开发者阅读大量的DDK (Driver Development Kit )文档,深入了解操作系统的内核工作机制,因此要很长的周期。WinD-river 是一套入门比较容易的驱动程序开发软件。它改变了传统驱动程序开发的方法与思路,极大地简化了驱动程
序的编制,可以在应用软件开发人员熟悉的VB 、VC 下开发出专业的驱动程序。本次设计就是采用windriver 完成的USB 驱动程序的设计。
3Matlab 图形界面及接口设计
Matlab 强大的科学计算与可视化功能,简单易用的开放式可扩展环境以及多达30多个面向不同领域而扩展的工具箱(Toolbox )支持,使得Matlab 在许多学科领域中成为计算机辅助设计与分析、算法研究和应用开发的基本工具和首选平台。但是,驱动程序一般是用VC 设计的,要想将此数据进一步导入Matlab 处理,需要设计VC 和Matlab 的接口程序。将Matlab 程序编译成MEX 文件。在Matlab 中可调用的C 或Fortran 语言程序称为MEX 文件。Matlab 可以直接把MEX 文件视为它的内建函数进行调用。MEX 文件是动态链接的子例程,Matlab 解释器可以自动载入并执行它。本次设计采用MEX 文件的方法将数据导入Matlab 。
图形用户界面是由窗口、光标、按键、菜单、文字说明等对象构成的一个用户界面。用户通过一定的方法(如鼠标或键盘)选择、激活这些图形对象,使计算机产生某种动作或变化,比如实现计算、绘图等。虚拟示波器利用Matlab 的图形用户界面显示采集的数据。这样,既可以利用VC 速度快的特点作后台采集,又能利用Matlab 的强大功能,这对于作数据分析的科研工作者具有很大意义。本次虚拟示波器界面实现了历史数据记录、超前滞后触发、量程选择等功能。4系统性能测试
在A VR 单片机内部ADC 转换中,ADC 采样理论值:ADC=(Vin*1024)/Vref 。其中,Vin 表示选定输入引脚上的电压,Vref 表示选定的参考电源的电压。0x000表示引脚的电压为模拟地,0x03ff 表示输入引脚电压为参考电压值减去一个LSB 。为了测试系统的精度,可以将DA 的输出通道与AD 的输入通道形成一个闭环采集,即从DAC 的0通道发送一个数据输出,然后用一根导线把DAC0和ADC0连接起来,把数值又从ADC0中转换回来。测试结果如表1所示。
表1闭环精度测试结果
测试号输出值输入数值10x00000x000020x00010x000130x00ff 0x00fe 40x01ff 0x01fc 5
0x03ff
0x03fc
接口的DA 输出芯片。
数据采集USB AVR Matlab
