英创公司推出了支持多通道同步采样ADC的工控主板ESM7080,板载了8路16位同步AD,最高采样率可达200KSPS,关于具体的指标可以参考文章《英创推出多通道同步采样ADC工控主板》中的介绍。
这套方案利用了CPU i.MX7D的异构核心优势,使用Cortex-M4核心来控制8路AD,保证了数据读取的实时性,M4读取到数据后会通知Linux系统,再由Linux系统从缓冲区中将M4存放的数据一次性读出。为了方便客户的使用,英创公司提供了Linux系统上的专用驱动,将这8路AD作为了IIO子系统(Linux Industrial I/O Subsystem)中的设备,这样用户就可以通过标准的IIO接口操作来读取AD数据,而不必关心和Cortex-M4核心相关的交互操作。下面就来介绍在ESM7080主板上采集数据的相关设置。
因为是实现的同步采样,所以Linux系统中,将8路AD作为了一个整体的设备,设备目录为/sys/bus/iio/devices/iio:device0/,目录中的文件如下图
其中比较重要的几个文件的说明如下:
设备或目录名称 | 简介 |
in_voltage_sampling_frequency | 设置或读取当前采样率 |
sampling_frequency_available | 读取in_voltage_sampling_frequency可以设置的有效值,具体见表2 |
in_voltage_scale | 设置或读取当前采样电压范围,有两个范围,0表示-5v~+5v,1表示-10v~+10v |
in_voltage_scale_available | 读取in_voltage_scale可以设置的值,即0和1 |
scan_elements(目录) | 用于使能连续采样通道 |
trigger(目录) | 用于使能连续采样的trigger |
buffer(目录) | 用于开启连续采样 |
表1
sampling_frequency_available可以读取出支持的采样率:
设备名称 | 支持的采样率(Hz) |
sampling_frequency_available | 20,40,100,200,400,1000,2000,4000,10000,20000,40000,100000,200000 |
表2
表1中文件的读取和写入都可以通过标准文件的读写操作来实现,也可以通过libiio库提供的函数接口来进行设置。
英创公司建议客户还是通过libiio库来实现连续采样,在之前的文章中我们已经做过详细的介绍《基于Linux IIO接口的波形采集》。因为ESM7080主板的AD也是基于IIO子系统提供的接口,所以程序是完全一致的,这里就不再赘述了。下面说明关于ESM7080的AD在使用的时候需要注意的一些地方。
因为将8个同步采样的AD通道作为了一个整体设备,所以一次读取出的数据是以16字节为单位的(一个通道16位为2个字节,一共8个通道),数据的具体排列方式如下:
字节偏移量 | 对应数据 |
0 | 通道1 |
2 | 通道2 |
4 | 通道3 |
6 | 通道4 |
8 | 通道5 |
10 | 通道6 |
12 | 通道7 |
14 | 通道8 |
16 | 通道0 |
... | ... |
表3
关于采集数据的时候负载情况,我们实际测试在100K和200K采样率下,连续采集并将数据写入到磁盘的过程中,系统负载的情况如下:
采样率 | 负载情况 |
200K | 30% |
100K | 15% |
表4
根据表3的情况,可以看到在200K采样率的情况下,还留有足够的CPU资源给用户进行处理数据。
下面是在100K采样率下进行的一次波形采集测试。我们在通道1和通道2上分别接入了100Hz的正弦波和三角波,其余通道接入了一个固定电平信号,使用基于libiio实现的例程采样了16000个点(每个通道2000个点),然后利用gnuplot工具将采样值按照通道排列的格式绘制成曲线图,结果如下:
可以看到图中绘制每个通道采集的2000个点中,通道1和通道2刚好是2个周期。100K采样率下,100Hz的波形每个周期应该是采样1000个点,刚好是对应上的。另外6通道接入了固定电平信号,所以是一条直线。
对这套方案感兴趣的客户可以与英创公司的工程师联系,索取相关资料和例程.
成都英创信息技术有限公司 028-8618 0660