ARM技术论坛
直播中

哔哔哔-

8年用户 1256经验值
擅长:电源/新能源
私信 关注
[经验]

求一种AD7606模拟量高速采集方案

  验证模拟量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)
2.jpg
  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位同时传输还是高低八位传输;
2.jpg
3.jpg
  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函数和功能解释见下表:
2.jpg
  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 千里优选教学基地

更多回帖

发帖
×
20
完善资料,
赚取积分