验证模拟量ADC高速采集方案
1.目标
验证CH341A+ADC7606芯片实现ADC高速采集的可行性;
查阅CH341芯片并口
通信协议DLL API,并口模式切换配置方式,并口操作速度;
掌握CH341芯片并口数据时序,输出方式;
掌握AD7606芯片8位并口模式的配置方法,读取时序,IO定义等;
结合分析CH341是否可以与AD7606匹配实现高速采集?
能否实现16位 8通道 100kHz采样, 存在的问题通过什么方式来解决;
2.USB转并口芯片CH341
CH341默认是串口的通信方式,我们需要通过配置SDA和SCL的电平来切换,注意#ACT 需要拉低屏蔽IIC协议去读取外部配置来保证配置;
CH341同一款芯片有三种IO定义:串口、并口、同步串口(IIC+SPI)
3.模拟量采集芯片AD7606
01. AD7606芯片核心参数为:分辨率16位,8通道,最高速度200kHz。
02. AD7606属于中速模拟量采集芯片,芯片的优势是 同步采集和3种不同的数据传输模式 ,劣势缺少主动采集触发机制要通过触发芯片conv端口来启动采集;
03. 模拟量采集能够设置OS来调节增益倍率,可以采集正负电压;
04. 芯片并口模式能16IO输出数据,使用时钟脉冲8个,占用较多IO口,速度最快;并口字节模式能8位高低位进行数据传送,需要时钟脉冲数量16个;串口模式使用IO口少,但是需要16x8=128个时钟,浪费速度资源;
05. 通过配置11和6口是配置传输数据协议的最重要的配置核心,首先区分并口和串口,然后设置并口的模式是16位同时传输还是高低八位传输;
4.CH341并口通信API接口
01. 经查询芯片初始化指令需要输出100us的低脉冲,来进行复位操作。
02. 芯片并口时钟在0.25us,并口模式能够快速读取数据, 读写WR和数据指令DS是常量状态,用读数据配合写数据可以应用来模拟CS和CONV端口;
03. CH341芯片DLL的操作需要安装对应并口驱动,串口驱动不能兼容;
04. 并口比较适合来读取片外存储,可以采用AD7606+
单片机+缓存芯片+CH341的方案;
05.带缓存芯片的方案能够做到高速采集,高速缓存,缺点是实时采集指标变差;
06.DLL文件的操作就涉及到
labview的编程知识,调用DLL的接口API,匹配输入输出后封装为功能VI函数;
07.具体的API函数和功能解释见下表:
CH341InitParallel( // 复位并初始化并口,RST#输出低电平脉冲
ULONG iIndex, // 指定 CH341 设备序号
ULONG iMode ); // 指定并口模式: 0 为 EPP 模式, 2 为 MEM 模式, 》=256 保持当前模式
//在 CH341 上电时自动初始化并口,如果需要,也可以重新初始化并口,以清除缓冲区。
//在初始化过程中,RST#引脚会输出 100uS 左右宽度的低电平脉冲,用于通知外部设备复位,
CH341EppReadData( // EPP 方式读数据: WR#=1, DS#=0, AS#=1, D0-D7=input
ULONG iIndex, // 指定 CH341 设备序号
PVOID oBuffer, // 指向一个足够大的缓冲区,用于保存读取的数据
PULONG ioLength ); // 指向长度单元,输入时为准备读取的长度,返回后为实际读取的长度
以 EPP 时序连续读取数据,长度为 0 到 4096 字节,例如:
UCHAR buf[1024];ULONG len=1024;
CH341EppReadData( 0, buf, &len ); // 针对 0#设备以 EPP 方式读取 1KB 数据
CH341EppReadAddr( // EPP 方式读地址: WR#=1, DS#=1, AS#=0, D0-D7=input
ULONG iIndex, // 指定 CH341 设备序号
PVOID oBuffer, // 指向一个足够大的缓冲区,用于保存读取的地址数据
PULONG ioLength ); // 指向长度单元,输入时为准备读取的长度,返回后为实际读取的长度
以 EPP 时序连续读取地址数据,长度为 0 到 4096 字节,在标准 EPP 时序中通常用不到
CH341EppWriteData( // EPP 方式写数据: WR#=0, DS#=0, AS#=1, D0-D7=output
ULONG iIndex, // 指定 CH341 设备序号
PVOID iBuffer, // 指向一个缓冲区,放置准备写出的数据
PULONG ioLength ); // 指向长度单元,输入时为准备写出的长度,返回后为实际写出的长度
以 EPP 时序连续写出数据,长度为 0 到 4096 字节,例如:
UCHAR buf[1024];ULONG len=1024;
在 buf 中放置数据,准备以 EPP 方式写出CH341EppWriteData( 0, buf, &len ); // 针对 0#设备以 EPP 方式写出 1KB 数据
CH341EppWriteAddr( // EPP 方式写地址: WR#=0, DS#=1, AS#=0, D0-D7=output
ULONG iIndex, // 指定 CH341 设备序号
PVOID iBuffer, // 指向一个缓冲区,放置准备写出的地址数据
PULONG ioLength ); // 指向长度单元,输入时为准备写出的长度,返回后为实际写出的长度
以 EPP 时序连续写出地址数据,长度为 0 到 4096 字节,在标准 EPP 时序中通常只写一个字节的地址
CH341EppSetAddr( // EPP 方式设置地址: WR#=0, DS#=1, AS#=0, D0-D7=output
ULONG iIndex, // 指定 CH341 设备序号
UCHAR iAddr ); // 指定 EPP 地址
以 EPP 时序输出一个地址,是 CH341EppWriteAddr 的简化
5.时序匹配CH341+AD7606
01. ch341可以提供SCK时钟,ad7606符合2us内时间标准可以使用;
02. ch341可以提供读取8位数据总线,ad7606拥有8位并口模式能够读取数据;
03. ad7606芯片需要CS和RD和CONV端口,ch341不能直接兼容,需要操作芯片功能IO的间接方法来实现;
04. 并口模式的CH341可以使用SPI模式进行AD7606的数据读取,但全速模式下采集速度是750k/128=5kHz,浪费AD7606的速度资源;
原作者:Dream_doing 千里优选教学基地