多通道数据采集系统 [基于ADS8556的六通道高速数据采集系统设计]

多通道数据采集系统 [基于ADS8556的六通道高速数据采集系统设计],第1张

数据采集系统中,高性能的DSP能够满足算法结构复杂、运算精度高、速度快的要求,CPLD具有内部延时小、速度快、全部逻辑由硬件完成等优点,因此,本系统设计了一种基于DSP+CPLD的高速信号采集系统,选用DSP芯片TMS320F2812(以下简称2812)作为核心处理器,EPM240T做逻辑控制元件。AD芯片采用美国TI公司的ADS8556,它是16位6通道可以同时采样的模数转换器。本文详细介绍了基于ADS8556的六通道高速数据采集系统的软硬件设计。ADS8556的特点及其工作原理

1ADS8556的特点

ADS8556是16位高精度A/D,各自基于连续逼近寄存器原理,构架是基于电荷再分配原理,具有采样保持功能。

ADS8556包括6个16位模数转换器(ADC),6个模拟输入组成3个通道组,这些通道组可以并行采样,保留了信号的相对相位信息。独立的转换开始信号可以控制每个通道的转换,可以是4个通道或者是6个通道一起转换。器件支持单端、差分模拟输入信号,范围可以是±4Vref或者±2Vref,最大输入电压可以达到±12V,其中Vref为内部参考电压,可取25V或30V。ADS8556可以工作在硬件模式或软件模式,硬件模式下,器件功能通过引脚接口配置;软件模式下,功能设置将只能通过其内部32位控制寄存器进行,对应的引脚设置将被忽略。ADS8556提供一个可选择的并行或串行接口,其中,并行接口模式下采样速率可达到630kSa/s。ADS8556的数据可以采用8位或16位传送方式。

2ADS8556的工作原理

ADS8556有两种接口模式,本文中采用并行接口模式的16位传送方式。下面对它的工作原理进行分析。

在进行模数转换时,转换信号COV_A/B/C用来控制2通道或4通道或6通道ADC进行同时采样。如果将COV_A/B/C3个引脚连接在一起,即6个ADC使用同一转换信号,就可以对6个ADC进行同步采样。选择ADC在COV_X的上升沿置为保持模式,并开始转换。转换信号上升沿过后,ADC开始转换,转换期间BUSY信号保持高电平,转换完成时间为126μs,转换结束BUSY信号返回低电平。BUSY信号的下降沿触发ADC的跟踪模式,通过16位并行接口从输出寄存器将数据读出。读取数据时,片选信号/CS先置低,读信号/RD每变低一次,DSP从16位总线上读取1个通道的数据,需要读取6次将6通道数据读走,16位并行接口模式读取时序如图1所示。系统硬件设计

1前置放大电路

ADS8556的输入通常由一个运算放大器驱动,以确保采集时间内正确的稳定调节。就驱动能力、噪声和偏移性能而言,TI的OPA2211可达到确保高输入信号质量所必需的诸多要求。本文中采用OPA2211放大器作A/D的前置放大。

将2812的地址线XA0、XA1、XA2和/XCS0分别连接至EPM240T的IO口上。/XCS0对应的地址映射为0x002000-0x003FFF,2812对这个区域的地址进行访问时,相应片选端/XCS0被置为低电平,地址线上出现所要读取或者写入的地址。为了节省映射空间,本文设计通过EPM240T对/XCS0和XA1、XA2进行地址译码来实现对ADS8556的控制。ADS8556的片选信号/CS、复位信号/RST分别连接到EPM240T的IO口上,3通道组的启动转换信号CONV_X连接到一起并和EPM240T的IO口连接,用来启动6通道的同步转换。2812的外部中断INT1连接BUSY信号,单次转换结束后,BUSY信号变低,向2812申请中断。2812的读信号/XRD与ADS8556的读信号/RD相连接,用来读取转换结果。将ADS8556的16位数据线和TMS320F2812的16位数据线直接相连。

ADS8556需要4个独立的供电电源:ADC的模拟供电AVDD,数字接口的IO供电,模拟输入的高电压供电HVDD和HVSS。AVDD为内部ADC提供电源,本文设置为5V。高压供电(HVSS和HVDD)用来为模拟输入供电,本文将HVDD设置为12V,HVSS设置为-12V。ADS8556连接外围电路时,在AVDD、BVDD和HVSS引脚须接10μF和01μF电容组成去耦电路,为达到好的去耦效果,电容要尽量靠近器件。BVDD供电仅用于驱动数字IO缓冲器,范围为27~55V。本文将其连接至33V,在DSP的数据总线和ADS8556的16位数据总线相连接时,DSP的接口电压为33V,ADS8556的接口电压也为33V,不需要进行电平匹配,方便电路的连接。ADS8556其他关键引脚的连接及其功能如表1所示。

3数据存储设计

TMS320F2812具有128KB的FLASH空间,而其内部SARAM数据存储空间只有18KB,在高速数据采集系统中,由于在线采集的数据量比较大,因此需要对2812的数据存储空间进行外部扩展。

本文选择IS61LV25616作为数据存储器,它是一个高速的SRAM,由高性能CMOS技术制造而成,供电电压为33V,其空间大小为256K×16。IS61LV25616与2812的接口电路如图4所示,/CE片选信号引脚接2812的/XCS6片选信号,其映射地址空间范围为0x1000000x180000;/OE、/WE为低电平有效,分别与DSP的读写引脚相连接;地址线A[17:0]与2812地址线XA[17:0]相连,16位数据总线与DSP的XD[15:0]数据总线连接,完成

unsignedintAD_DATA_CH4[20000];

#pragmaDATA_SECTION(AD_DATA_CH4,"ad_data_ch4")

unsignedintAD_DATA_CH5[20000];

#pragmaDATA_SECTION(AD_DATA_CH5,"ad_data_ch5")

unsignedintAD_DATA_CH6[20000];

#pragmaDATA_SECTION(AD_DATA_CH6,"ad_data_ch6")

本设计将AD转换的数据,存储到外部SRAM中,因此需要将存放采集数据的数组定义在SRAM对应的地址映射空间,通过CMD文件编写MEMORY和SECTION指令对DSP存储空间进行配置。MEMORY中定义SRAM对应的映射空间的语句如下:

EXRAM:origin=0x100000,length=0x080000

SECTION中将存放6通道数据的数组分配到EXRAM中,语句如下:

ad_data_ch1:>EXRAM,PAGE=1

ad_data_ch2:>EXRAM,PAGE=1

ad_data_ch3:>EXRAM,PAGE=1

ad_data_ch4:>EXRAM,PAGE=1

6通道数据写入外部SRAM对应的地址空间,由于在测试时将数据线上没有数据,默认为0xFFFF,在编写程序时让每个地址对应的数据分别减去1、2、3、4、5、6,从而得到0xFFFE、0xFFFD、0xFFFC、0xFFFB、0xFFFA、0xFFF9。从CCS33的MEMORY窗口查看写入数据的结果是否正确。其中通道1和通道2的写入数据结果如图8所示。

由图8可以看出,2812相应中断后在356μs的时间内完成了读取6通道数据,并将其准确存入了外部SRAM中,显示结果正确。而一次AD转换的时间为126μs,可见在一个5μs的采样读取周期内能够完成数据的转换与存储,而且时间上还有剩余。由以上测试可知,在每通道采样速率200kSa/s的要求下,本系统可以正常工作。

本设计利用新型的模数转换芯片ADS8556,结合DSP数据处理速度快和CPLD并行处理能力强的特点,设计了能够实现6通道数据同步采集的高速数据采集系统,并对系统的采集速度进行了测试,证明其在每通道采样速率200kSa/s下可以正常工作。本系统接口电路简单,控制方便,可以应用到多种模拟信号的采集系统。

对于你的问题我分几类回答。

1、对于普通电压,如5V,或大于5V,首先是将电压整理,所谓整理是因为AD 采样芯片往往输入电压是固定的,如只允许输入5V,如果采样电压不到5V可以直接采样,即直接接入AD,然后接入微处理器(如单片机、DSP、微机等)如果高于采样AD允许的电压先用比例电路进行缩小,如果远远低于AD允许的电压就要进行放大,这样更精确,(输入信号的最大值要比AD允许的电压低一点,但不太多)

2、对于高压电,就是通过电压互感器(变压器)变到一个特定的值,也有用分压电阻和取电电容的。然后向第一步。

3、对于多路的可以采用多路分别采样。

4、还有其他方法,这里就不解释了,如电压变频率,频率再转换成数字。

DSP学习入门:

DSP的特点 :

对于没有使用过DSP的初学者来说,第一个困惑就是DSP其他的嵌入式处理器究竟有什么不同,它和单片机,ARM有什么区别事实上,DSP也是一种嵌入式处理器,它完全可以完成单片机的功能。

唯一的重要的区别在于DSP支持单时钟周期的"乘-加"运算这几乎是所有厂家的DSP芯片的一个共有特征几乎所有的DSP处理器的指令集中都会有一条MAC指令,这条指令可以把两个 *** 作数从RAM中取出相乘,然后加到一个累加器中,所有这些 *** 作都在一个时钟周期内完成拥有这样一条指令的处理器就具备了

DSP功能:

具有这条指令就称之为数字信号处理器的原因在于,所有的数字信号处理算法中最为常见的算术 *** 作就是"乘-加"这是因为数字信号处理中大量使用了内积,或称"点积"的运算无论是FIR滤波,FFT,信号相关,数字混频,下变频所有这些数字信号处理的运算经常是将输入信号与一个系数表或者与一个本地参考信号相乘然后积分(累加),这就表现为将两个向量(或称序列)进行点积,在编程上就变成将输入的采样放在一个循环buffer里,本地的系数表或参考信号也放在一个buffer里,然后使用两个指针指向这两个buffer这样就可以在一个loop里面使用一个MAC指令将二者进行点积运算这样的点积运算对与处理器来说是最快的,因为仅需一个始终周期就可以完成一次乘加

了解DSP的这一特点后,当我们设计一个嵌入式系统时,首先要考虑处理器所实现的算法中是否有点积运算,即是否要经常进行两个数组的乘加,(记住数字滤波,相关等都表现为两个数组的点积)如果有的话,每秒要做多少次,这样就能够决定是否采用DSP,采用多高性能的DSP了

浮点与定点 :

浮点与定点也是经常是初学者困惑的问题,在选择DSP器件的时候,是采用浮点还是采用定点,如果用定点是16位还是32位其实这个问题和你的算法所要求的信号的动态范围有关

定点的计算不过是把一个数据当作整数来处理,通常AD采样来的都是整数,这个数相对于真实的模拟信号有一个刻度因子,大家都知道用一个16位的AD去采样一个0到5V的信号,那么AD输出的整数除以2^16再乘以5V就是对应的电压在定点DSP中是直接对这个16位的采样进行处理,并不将它转换成以小数表示的电压,因为定点DSP无法以足够的精度表示一个小数,它只能对整数进行计算

而浮点DSP的优势在于它可以把这个采样得到的整数转换成小数表示的电压,并不损失精度(这个小数用科学记数法来表示),原因在于科学记数法可以表示很大的动态范围的一个信号,以IEEE754浮点数为例,

单精度浮点格式: [31] 1位符号 [30-23]8位指数 [22-00]23位小数

这样的能表示的最小的数是+-2^-149,最大的数是+-(2-2^23)2^127动态范围为20log(最大的数/最小的数)=16676dB 这样大的动态范围使得我们在编程的时候几乎不必考虑乘法和累加的溢出,而如果使用定点处理器编程,对计算结果进行舍入和移位则是家常便饭,这在一定程度上会损失是精度原因在于定点处理处理的信号的动态范围有限,比如16位定点DSP,可以表示整数范围为1-65536,其动态范围为20log(65536/1)=96dB对于32定点DSP,动态范围为20log(2^32/1)=192dB,远小于32位ieee浮点数的16676dB,但是,实际上192dB对绝大多数应用所处理的信号已经足够了。

由于AD转换器的位数限制,一般输入信号的动态范围都比较小,但在DSP的信号处理中,由于点积运算会使中间节点信号的动态范围增加,所以主要考虑信号处理流程中中间结果的动态范围,以及算法对中间结果的精度要求,来选择相应的DSP另外就是浮点的DSP更易于编程,定点DSP编程中程序员要不断调整中间结果的P,Q值,实际就是不断对中间结果进行移位调整和舍入。

DSP与RTOS:

TI的CCS提供BIOS,ADI的VDSP提供VDK,都是基于各自DSP的嵌入式多任务内核DSP编程可以用单用C,也可以用汇编,或者二者结合,一般软件编译工具都提供了很好的支持我不想在这里多说BIOS,VDK怎么用这在相应的文档里说的很详细我想给初学者说说DSP的RTOS原理用短短几段话说这个复杂的东西也是挑战!

其实DSP的RTOS和基于其他处理器的通用RTOS没什么大的区别,现在几乎人人皆知的uCOSii也很容易移植到DSP上来,只要把寄存器保存与恢复部分和堆栈部分改改就可以一般在用BIOS和VDK之前,先看看 *** 作系统原理的书比较好uCOS那本书也不错

BIOS和VDK其实是一个RTOS内核函数集,DSP的应用程序会和这些函数连接成一个可执行文件其实实现一个简单的多任务内核并不复杂,首先定义好内核的各种数据结构,然后写一个scheduler函数,功能是从所有就绪任务中(通过查找就绪任务队列或就绪任务表)找出优先级最高的任务,并恢复其执行然后在此基础上写几个用于任务间通信的函数就可以了,比如event,message box,等等

RTOS一般采用抢先式的任务调度方式,举例说当任务A等待的资源available的时候,DSP会执行一个任务调度函数scheduler,这个函数会检查当前任务是否比任务A优先级低,如果是的话,就会把它当前挂起,然后把任务A保存在堆栈里寄存器值全部pop到DSP处理器中(这就是所谓的任务现场恢复)接着scheduler还会把从堆栈中取出任务A挂起时的程序执行的地址,pop到PC,使任务A继续执行这样当前任务就被任务A抢先了

使用RTOS之后,每个任务都会有一个主函数,这个函数的起始地址就是该任务的入口一般每个任务的主函数里有一个死循环,这个循环使该任务周期地执行,完成一部分算法模块的功能,其实这个函数跟普通函数没任何区别,类似于C语言中的main函数一个任务创建的时候,RTOS会把这个函数入口地址压入任务的堆栈中,好象这个函数(任务)刚发生过一次中断一样一旦这个新创建任务的优先级在就绪队列中是最高的,RTOS就会从其堆栈中d出其入口地址开始执行

有一个疑问是,不使用RTOS,而是简单使用一个主循环在程序中调用各个函数模块,一样可以实现软件的调度执行那么,这种常用的方法与使用RTOS相比有什么区别呢其实,使用主循环的方法不过是一种没有优先级的顺序执行的调度策略而已这种方法的缺点在于,主循环中调用的各个函数是顺序执行的,那么,即使是一个无关紧要的函数(比如闪烁一个LED),只要他不主动返回,也会一直执行直到结束,这时,如果发生一个重要的事件(比如DMA buffer full 中断),就会得不到及时的响应和处理,只能等到那个闪烁LED的函数执行完毕这样就使整个DSP处理的优先次序十分不合理而在使用了RTOS之后,当一个重要的事件发生时,中断处理会进入RTOS,并调用scheduler,这时scheduler 会让处理这一事件的任务抢占DSP处理器(因为它的优先级高)而哪个闪烁LED任务即使晚执行几毫秒都没任何影响这样整个DSP的调度策略就十分合理。

以上就是关于多通道数据采集系统 [基于ADS8556的六通道高速数据采集系统设计]全部的内容,包括:多通道数据采集系统 [基于ADS8556的六通道高速数据采集系统设计]、电路设计中如何实现采集电压、DSP学习入门等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zz/10214146.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-06
下一篇 2023-05-06

发表评论

登录后才能评论

评论列表(0条)

保存