1.引言
本文所介绍的数据采集系统是基于arm的信号处理系统中的一部分,该信号处理系统用于导弹的数字式自动驾驶仪的开发研究中。整个系统由信号放大、信号滤波、信号采样、高速数字信号处理等部分组成。其中,数据采集系统是一个重要的环节,它的高速性和准确性直接影响到整个信号处理系统的性能。传统方法是应用cpu通过软件控制模数转换,这样必将频繁中断系统的运行从而减弱系统的数据运算能力,数据采集的速度也将受到限制。因此,本文利用可编程逻辑控制器cpld,由硬件控制模数转换和数据存储,从而最大限度地提高系统的信号采集和处理能力。
2.系统总体设计方案
数据采集系统的总体设计方案如图1所示。基于verilog hdl设计的自动状态机由硬件控制a/d转换以及自动向fifo中存储数据,当采样数据达到要求时,向cpu申请中断,arm系统启动dma完成数据读取。待cpu取走数据后,给状态机一个复位信号,同时对采集到的数据进行高速处理。这期间数据采集不中断,从而实现连续的实时数据采集和实时数据处理。数据采集系统由a/d芯片ad7656、逻辑控制芯片epm7128、fifo芯片cy7c425以及缓冲74lvt245组成,控制逻辑用verilog hdl语言描述。
3.硬件设计
3.1 a/d转换芯片
系统的a/d转换芯片采用ad7656,一个ad7656芯片拥有6个16位逐次渐进模数转换器,在5v电压供电下采样率为250ksps。芯片中的采样保持放大器最大处理输入频率为8mhz。转换过程和数据获取由convst信号和内部时钟控制,三个convst管脚可以控制三对独立的模数转换器同时采样。ad7656根据内部参考电压2.5v可提供±10v或者±5v的双极性模拟量输入范围,或者根据外部参考电压提供不同范围的双极性模拟量输入信号。
ad7656的内部转换时序图如图2所示。将三个convst管脚连接在一起后,即可对六个a/d转换器同时进行采样。convst的上升沿触发a/d转换,转换时间为3µs。转换过程中,busy信号保持高电平不变,直到转换结束时,busy信号由高变低,系统进入跟踪模式,转换结果存于输出数据寄存器中。当片选信号 保持低电平不变时,连续六个读信号 低电平能够依次读出六个a/d转换器的转换数据。
3.2 fifo存储器
系统的fifo存储器采用cy7c425,它是cypress公司采用cmos工艺制造的1k×9位可以实现先进先出算法,可以进行异步读写操作的双端口存储器。它提供全空 、全满 、半满 状态标志,用以防止数据溢出或不足。扩展逻辑电路允许多片fifo进行数据宽度和存储深度的扩展而不会增加额外的时间延迟。
cy7c425的异步读写时序图如图3所示。当写信号 为低电平时发生写操作,a/d转换的结果通过写操作不断存入fifo中,存入一定数量的数据后,再通过读信号 将fifo中的数据依次读入cpu中。采用两片cy7c425扩展为16位1024字的高速异步fifo存储器,数据处理速度达到50mhz,可以实现数据的高速写入和高速读出。
3.3 状态机模块
状态机fsm完成自动a/d转换和数据存储,控制芯片是epm7128。此状态机由系统时钟驱动,控制a/d转换器的转换、fifo的复位及写数,并产生中断信号通知cpu读取数据。由于系统使用了两片ad7656,而不同芯片的个体会有差别,同一器件也会有温漂、时漂还有老化的问题,如果采用中断方式取数,很有可能会引起各个通道a/d采样率不一致并且单个通道a/d工作时采样率也不恒定。因此,可以不管busy信号,只需要把各段的时序留够足够的裕量就可以了,譬如ad7656的转换时间是3µs,那么,只要状态机保持convst至少3µs的高电平,这样就可以完全确定a/d转换的结束。这样控制器就可以不需要检测a/d的busy信号,同时也能很准确地保证采样速率了。
系统复位时,转换信号convst及fifo复位信号mr保持低电平不变,此时不进行数据采集。系统复位后,convst上升沿触发转换开始,系统进入采样保持阶段。3µs后,待a/d转换结束,连续产生12个a/d读脉冲,可以依次读出12个通道的转换结果。取数的同时产生fifo的写脉冲,可将读出的数据连续写入fifo中。为利于cpu中处理软件的编写,cpld中设置了一个计数器,可以进行32(2的5次方)次采样。最后发送中断信号到cpu,cpu通过dma方式将数据全部读入内部存储器,数字滤波通过取和以后右移5位即可进行。
4.verilog hdl描述
电子系统设计中一般遵循自上而下的设计思路,对系统进行设计、描述与仿真。考虑到模块的通用性、移植性,常常使用硬件描述语言来描述数字系统,如verilog hdl、vhdl、ahdl语言等。其中verilog hdl语言具有结构清晰、文法简明、功能强大、高速模拟和多库支持等优点,被近90%的半导体公司使用,成为一种强大的设计工具。
4.1 用verilog hdl语言描述自动状态机
自动状态机有两个输入信号和七个输出信号。输入信号中clk由cpu的输出频率提供,产生50mhz的时钟频率,rst由cpu提供,负责复位状态机。convst产生a/d转换器的转换启动信号;adc_cs、adc1_rd、 adc2_rd分别是两个a/d转换器的片选信号以及读信号;fifo_wr和 fifo_mr控制fifo的读数和复位;中断信号int通知cpu在dma方式下取数。程序如下:
module fsm(rst, clk, convst, adc_cs, adc1_rd, adc2_rd, fifo_wr, fifo_mr, int);
input rst, clk;
output convst, adc_cs, adc1_rd, adc2_rd, fifo_wr, fifo_mr, int;
reg convst, adc_cs, adc1_rd, adc2_rd, fifo_wr, fifo_mr, int;
parameter st0=8‘b00000000, st150=8’b10010110, st152=8‘b10011000, st153=8’b10011001,
st155=8‘b10011011, st156=8’b10011100, st158=8‘b10011110, st159=8’b10011111,
st161=8‘b10100001, st162=8’b10100010, st164=8‘b10100100, st165=8’b10100101,
st167=8‘b10100111, st168=8’b10101000, st170=8‘b10101010, st171=8’b10101011,
st173=8‘b10101101, st174=8’b10101110, st176=8‘b10110000, st177=8’b10110001,
st179=8‘b10110011, st180=8’b10110100, st182=8‘b10110110, st183=8’b10110111,
st185=8‘b10111001;
reg[7:0] counter;
reg[4:0] cn;
always @(posedge clk)
if(!rst)
begin counter《=0; adc_cs《=1; adc1_rd《=1; adc2_rd《=1;
fifo_wr《=1; fifo_mr《=0; convst《=0; cn《=0;int《=0; end
else if(cn》=5’b11111)
begin int《=1; counter《=0; adc_cs《=1; adc1_rd《=1;
adc2_rd《=1; fifo_wr《=1; fifo_mr《=0; convst《=0; end
else
begin
if(counter《8‘b11001100)
counter《=counter+8’b00000001;
else
begin cn《=cn+5‘b00001; counter《=0; end
case(counter)
st0: begin convst《=1; fifo_mr《=1; end
st150: begin adc_cs《=0; adc1_rd《=0; fifo_wr《=0; end
st152: begin fifo_wr《=1; adc1_rd《=1; end
st153: begin fifo_wr《=0; adc1_rd《=0; end
st155: begin fifo_wr《=1; adc1_rd《=1; end
st156: begin fifo_wr《=0; adc1_rd《=0; end
st158: begin fifo_wr《=1; adc1_rd《=1; end
st159: begin fifo_wr《=0; adc1_rd《=0; end
st161: begin fifo_wr《=1; adc1_rd《=1; end
st162: begin fifo_wr《=0; adc1_rd《=0; end
st164: begin fifo_wr《=1; adc1_rd《=1; end
st165: begin fifo_wr《=0; adc1_rd《=0; end
st167: begin fifo_wr《=1; adc1_rd《=1; end
st168: begin fifo_wr《=0; adc2_rd《=0; end
st170: begin fifo_wr《=1; adc2_rd《=1; end
st171: begin fifo_wr《=0; adc2_rd《=0; end
st173: begin fifo_wr《=1; adc2_rd《=1; end
st174: begin fifo_wr《=0; adc2_rd《=0; end
st176: begin fifo_wr《=1; adc2_rd《=1; end
st177: begin fifo_wr《=0; adc2_rd《=0; end
st179: begin fifo_wr《=1; adc2_rd《=1; end
st180: begin fifo_wr《=0; adc2_rd《=0; end
st182: begin fifo_wr《=1; adc2_rd《=1; end
st183: begin fifo_wr《=0; adc2_rd《=0; end
st185: begin fifo_wr《=1; adc2_rd《=1; adc_cs《=1; convst《=0; end
endcase
end
endmodule
4.2 仿真图形
图4为状态机复位时的仿真图形。由图可以看出,当按下复位键时,a/d转换信号convst保持为低电平,a/d转换器不采集数据。同时,fifo复位信号fifo_mr也保持低电平不变,可将fifo中的数据清空。当复位信号变高后,在外部时钟clk的第一个上升沿,convst电平升高,开始a/d转换(存在时延)。
图5为状态机从a/d转换器将数据读入fifo中的时序图。由图可知,3µs(a/d转换器的转换时间)后,分别通过对adc_cs、adc1_rd、adc2_rd、fifo_wr信号的控制,实现将12路通道的数据依次读入fifo中的操作。
5.结束语
本文提出的自动数据采集系统采用cpld芯片,用硬件描述语言设计自动状态机,实现硬件控制数据采集和存储。目前采集系统应用于开发数字式自动驾驶仪的arm实验应用板上,省去了arm监控a/d芯片的时间,使信号处理系统能够高效地工作。通过调整状态机中的采样次数或采用转换速率更高的a/d芯片可进一步提高系统的数据采集速度。
超声波热量表的工作原理
第三代半导体即将到来 耐威科技三线齐进意图抢占先机
分析汽车半导体全球市场的规模和格局
AirPods采用简约和便捷的设计方式,未来销量将会突破2亿副
科普:MLCC知识概述!
利用可编程逻辑控制器CPLD实现数据采集系统的总体设计
AI未来:基础研究仍需持续努力
三星迷你移动固态硬盘SSD-PSMU3推出,支持USB-A接口和USB-C接口
消费类RE/CE测试的小技巧
基于单片机的等效采样示波器设计
小米第二代松果处理器有望在下半年发布:10nm工艺,小米Note3和小米6S首发?
Silicon Labs新型USBXpress控制器简化嵌入式设计的USB连接
真无线耳机哪个牌子好?蓝牙耳机十大品牌排行榜!
人脸测温健康码系统便捷管理
浪潮存储推出新一代G6分布式存储平台加速数字化转型
移远通信基于国产平台不断推出适合市场需求的Cat 1模组产品
钻雕金的华为P10你想到过吗?
如何估算热插拔MOSFET温升?
探究电动车与充电基础设施高压化发展趋势
噪声增益Anoise和信号增益Asignal有什么用呢?