多路数据选择器.docx

上传人:b****5 文档编号:8374413 上传时间:2023-01-30 格式:DOCX 页数:14 大小:117.01KB
下载 相关 举报
多路数据选择器.docx_第1页
第1页 / 共14页
多路数据选择器.docx_第2页
第2页 / 共14页
多路数据选择器.docx_第3页
第3页 / 共14页
多路数据选择器.docx_第4页
第4页 / 共14页
多路数据选择器.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

多路数据选择器.docx

《多路数据选择器.docx》由会员分享,可在线阅读,更多相关《多路数据选择器.docx(14页珍藏版)》请在冰豆网上搜索。

多路数据选择器.docx

多路数据选择器

基于FPGA的多路数据采集器的设计

李庭武李本印

〔陇东学院电气工程学院,XX庆阳745000〕

摘要:

数据采集是从一个或多个信号获取对象的过程,它是计算机与外部物理世界连接的桥梁,尤其在恶劣的数据采集环境中得到广泛应用。

本课题主要研究利用FPGA把采集到的八路模拟信号电压分别转换成数字信号,在数码管上实时显示电压值,并且与计算机运行的软件示波器连接,实现电压数据的发送和接收功能。

关键词:

FPGA;模数转换;数码显示管;键盘;设计

Designofmulti-channeldataterminalBasedonFPGA

LiTingwuLiBenyin

(ElectricalEngineeringCollege,LongdongUniversity,Qingyang745000,Gansu,China)

Abstract:

Dataacquisitionisaprocessthataccesstotheobjectfromtheoneormoresignal,itisthebridgebetweentheputerandtheexternalphysicalworld,andespeciallywidelyappliedindataacquisitioninharshenvironment.ThisessaymainlystudiesontheusageofFPGAtocollecttheeightanalogsignalsthatareconvertedtodigitalvoltagesignal,digitaltubedisplayreal-timevoltagevalue.Connectingwiththeputerrunningsoftwareoscilloscopesothattorealizethevoltagedatasendingandreceivingfunction.

Keywords:

FPGA;analog-to-digitalconvertingchip;digitaldisplaytube;keyboard;design

0引言

20世纪以来,数字信号处理技术已逐渐渗透到通信、家电、军事等各个应用领域。

数据采集系统由数据输入通道,数据存储与管理,数据处理,数据输出及显示五个局部组成。

本设计以FPGA为控制核心,通过模数转换器〔ADC0809〕对0~7通道的数值进展循环检测,实现多路数据采集的目的。

 

假设需要对数据进展处理时,通过切换键将控制单元的功能转换到数据处理功能,将采集到的电参量信号进展转换、放大、滤波、调零等处理,使之成为适合A/D或者显示记录仪器所需要的电压信号并应用数码管将其显示出来或上传至计算机。

由于整个系统的控制采用FPGA实现,因此可以依据现场的具体情况,对此系统进展修改、调试,故其具有组织方式灵活的特点。

适合用在要求采集通道多、精度高,但速率不高的数据采集中,是一种比拟理想的实时数据采集系统。

1系统设计

系统设计框图如图1.1所示,数据采集器的第一路输入自制1~5V直流电压,第2~7路分别输入来自直流电源的5V、4V、3V、2V、1V、0V直流电压〔各电压可由分压器产生,不要求精度〕,第8路备用。

各路模拟信号分别转换为8位二进制数字信号。

用串行码送入传输线路。

主控器串行传输线路对各路数据进展采集和显示。

采集方式包括循环采集〔即1路、2路、……8路、1路……〕和选择采集〔任意一路〕。

显示局部能同时显示地址和相应的数据。

利用电路补偿提高电阻变化与输出电流电压变化的线性关系。

基于FPGA的I/O端口多、频率高,低功耗等优点,适用于有严格时序要求的多路数据采集系统,本设计采用FPGA构建多路数据采集系统核心控制电路,主要完成A/D转换及数据的采集、传输。

FPGA采用虚拟的ADC接口与ADC0809进展通信。

FPGA与ADC0809之间的通信可以采用中断方式,当数据转换好以后,BUSY引脚由高电平变为低电平从而产生中断信号。

同样也可采用查询方式,不断查询ADC0809的通信存放器的BUSY位是否为0,如果为0,那么将数据缓冲器中的数据保存到数组中。

本系统采用中断方式,FPGA与ADC0809之间的通信采用四线连接方式。

ADC0809主要包括5个信号:

CS,BUSY,DIN,D0UT,SCIK。

其中,CS接地,使ADC0809总处于选通状态。

由于选择中断方式,所以BUSY与串行数据转并行数据模块的复位信号reset连接。

DCIK的输入是分频模块提供的lkHz的频率。

DOUT与串行数据转并行数据模块的输入El连接。

AINl/AIN2:

通道和模式存放器;st6:

将20H写进模式存放器中,选择自校准再恢复模式;st7:

将0CH写进通信存放器中,选择了AIN1/AIN2通道和下一次操作读通信存放器的0/DRDY位;st8:

读通信存放器的0/DRDY位;st9:

将5CH写进通信存放器,选择AIN1/AIN2通道和下一次读数据存放器中的数据;stl0:

读数据存放器中的值ADC0809工作状态控制。

用键盘进展控制采集通道的选择,4-F键为功能键,4-E键为复位键,F键为确认键,1-3键为通道选择键。

当按下“1〞键选通ADC0809的1通路将实时采集到电压值通过模数转换并送到FPGA进展处理处理,显示出此时的数据和地址值。

当按下“2〞键选通ADC0809的2通路将实时采集到电压值通过模数转换并送到FPGA进展处理处理,显示出此时的数据和地址值。

当按下“3〞键选通ADC0809的3通路将实时采集到的电压值通过模数转换并送到FPGA进展处理,显示出此时的数据和地址值。

在显示出各通路采集到的电压值和地址值的同时还实现了与PC机的串行通信。

ADC0809与FPGA是总线连接方式,端口地址为0x7fff。

在通路选定后,转换开场时变低,只有在EOC变为高电平是转换才完毕,继而从端口读出相应的值。

多路数据采集系统采用ADC0809模数转换器作为数据采集单元和FPGA来对它们进展控制,不仅具有控制方便、简单和灵活性大等优点,而且可以大幅度提高采集数据的灵敏度及指标。

多路数据采集系统就是通过键盘控制选择通路,将采集到的电压模拟两转换成数字量实时的送到FPGA里处理从而显示出采集电压和地址值。

2硬件设计

2.1正弦信号发生器

自制的正弦信号波发生器如图3.1所示。

它由方波发生器、三角波发生器和低通滤波器组成,

输出正弦波,

电位器调节输出正弦波的频率,使频率200Hz~2KHzX围内变化,再经过频率电压变换后输出相应1~5V直流电压〔200Hz对应1V,2KHz对应5V〕。

2.2加法器

使用加法器的目的是使200Hz对应1V,2KHz对应5V,如图3.2所示。

2.3模数转换器

ADC的功能是将输入模拟量转换位与其成比例的数字量,它是智能化测量控制仪表的一种重要组成器件。

ADC0809八位逐次逼近式A/D转换器是一种S器件,它由8路模拟开关、地址锁存与译码器、比拟器、8位开关树型D/A转换器、逐次逼近存放器、三态输出锁存器等其它一些电路组成。

因此,ADC0809可处理8路模拟量输入,且有三态输出能力,既可与各种微处理器相连,也可单独工作。

输入输出与TTL兼容。

八路转换开关能直接连通八个单模拟信号中的任何一个。

其内部构造如图3.3所示。

ADC芯片的启动转换信号有电平和脉冲两种型式。

设计时应特别注意,对要求用电平启动转换的芯片,如果在转换过程中撤去电平信号,芯片将停顿转换而得到错误的结果。

ADC转换完成后,将发出完毕信号,以示主机可以从转换器读取数据。

完毕信号也用来向CPU发出申请。

CPU响应中断后,在中断效劳子程序中读取数据。

也可用延时等待和查询转换是否完毕的方法来读取数据。

2.4电源模块

设计使用的电源是自制的5V直流稳压电源,原理图如图3.4所示。

根据以上设计中FPGA工作电压的要求,需要稳压电源输出+5V直流电。

因三端稳压器具有构造简单、外围元器件少、性能优良、调试方便等显著优点,本设计中采用三端稳压块LM7805,电源经1000uF电解并并联0.1uF电容依次滤掉各种频率干扰后输出,输出电压直流性能好,实测其纹波电压很小。

集成稳压块LM7805输出电压+5V,输出电流1.5A,安装时要加散射器片。

电源变压器选40W、5V输出变压器。

2.5FPGA接口电路

FPGA是基于SRAM型构造的,其本身并不能固化程序。

因此,FPGA需要一片Flash构造的配置芯片来储存逻辑配置信息,用于对FPGA进展上电配置。

其中MSEL[1:

0]:

用于选择配置模式。

FPGA有多种配置模式,比方主动、被动、快速、正常、串行、并行等,可以由此管脚进展选择。

DATA0:

FPGA的串行数据输入,连接至配置器件的串行数据输出管脚。

DCLK:

FPGA的串行时钟输出,为配置器件提供串行时钟。

nCSO〔I/O〕:

FPGA片选信号输出,连接至配置器件的nCS管脚。

ASDO〔I/O〕:

FPGA串行数据输出,连接至配置器件的ASDI管脚。

nCEO:

下载链器件使能输出,在一条下载链中,当第一个器件配置完成后,此信号将使能下一个器件开场进展配置,下载链的最后一个器件的nCEO应悬空。

nCE:

下载链器件使能输入,连接至上一个器件的nCEO,下载链的第一个器件的

nCE接地。

nCONFIG:

用户模式配置起始信号。

nSTATUS:

配置状态信号。

CONFIG_DONE:

配置完毕信号。

FPGA的配置电路图如3.5所示

3软件设计

系统中软件采用VHDL语言编程。

VHDL主要用于描述数字系统的构造,行为,功能和接口。

除了含有许多具有硬件特征的语句外,VHDL的语言形式和描述风格与句法是十分类似于一般的计算机高级语言。

VHDL的程序构造特点是将一项工程设计,或称为设计实体〔可以是一个元件,一个电路模块或一个系统〕分成外部〔或称可视局部,及端口〕和内部〔或称不可视局部〕,即涉及实体的内部功能和算法完成局部。

在对一个设计实体定义了外部界面后,一旦其内部开发完成后,其他的设计就可以直接调用这个实体。

这种将设计实体分成内外局部的概念是VHDL系统设计的根本点。

VHDL语言能够成为标准化的硬件描述语言并获得广泛应用,它自身必然具有很多其他硬件描述语言所不具备的优点。

程序共分为八个模块,共有八个进程。

模块一为一个二位二进制计数器,共计四个数字,时钟脉冲为625KHz,一个时钟脉冲记一次数。

模块二为一个二线四线译码器,将模块一计出的数字通过译码,转换为四位二进制数字,控制四位数码管的扫屏显示。

模块三为开关控制模块,此进程的主要作用是通过按下键盘来控制模拟输入位,和消除按下键盘时因抖动而引起的毛刺问题。

模块四模块五为ADC0809控制模块,模块四通过对ALE引脚进展上下电平的写入控制其读入模拟量和锁存。

模块五将读到的八位数字信号量进展计算,转换为能在数码管上显示出来的数字信号。

其余三个模块为显示模块。

通过将计数器和计算所得到的数据进展处理,译码为七位数字信号量,在数码管上输出。

系统软件流程图如图4.1所示。

4系统测试

4.1测试仪器

数字万用表、指针万用表、示波器。

4.2测试方法

正弦信号发生器是由方波发生器、三角波发生器和低通滤波器组成的。

连接正弦信号发生器和频率电压变换器,用数字万用表测试输出端

的电压,示波器测试正弦信号发生器输出端

的波形,调整

是输出端

的电压到达最小,固定

的阻值,调整

记录使频率电压转换器能正常工作〔约为800mv以上〕且信号不是真的最大最小频率。

正弦信号发生器的频率为

低通滤波器的中值频率为

接通电路,给八个输入端口分别输入所要求的电压,扳动上下电平输出控开关,当开关处于高电平时,看位选位数码管是否按顺序依次循环。

当开关处于低电平时,看位选位数码管输出数字是否能够与键盘上按下的开关相对应。

再用万用表测量ADC0809模拟量输入端口,观察其度数是否与数码管输出数字相等,假设相等且位选位数码管输出数字能够与键盘上按下的开关相对应那么说明本设计成功。

4.3测试结果

测试选用在ADC0809的第二路和第七路输入,分别读取了第二路第七路和标准电压表的读数作为参考数据。

结果如表1所示。

表1测试结果

参考数据V

2路读数V

误差V

7路读数V

误差V

0.810

0.901

0.089

0.882

0.072

1.046

1.058

0.012

1.098

0.052

1.314

1.391

0.077

1.391

0.077

2.395

2.450

0.055

2.469

0.074

2.381

2.430

0.049

2.459

0.078

2.663

2.626

0.037

2.744

0.081

4.463

4.468

0.005

4.527

0.064

4.428

4.508

0.080

4.508

0.080

4.488

4.488

0

4.488

0

4.596

4.684

0.088

4.664

0.068

4.882

4.841

-0.041

4.821

-0.061

平均误差

0.048

0.064

5结论

本系统以FPGA为核心部件,通过软件实现了正弦波的产生、步进、幅度控制并且波形根本到达要求且具有操作简便,精度、速度以及系统可靠性高等优点。

在系统的设计过程中,本系统力求硬件简单,充分发挥软件编程方便灵活的特点,并最大限度利用FPGA的资源,来满足系统设计的要求。

因仪器等条件的限制该系统还有许多值得改良的地方,例如采用更高速率芯片对输出波形进展补偿,改善波形质量。

较以前使用大量模拟电路实现多功能正弦信号发生器简单了许多,且易实现,该系统在现代通信领域具有广泛的应用前景。

参考文献

[1]潘松,黄继业.EDA技术与VHDL[M].:

清华大学,2009年。

[1].夏宇闻.Verilog数字系统设计教程[M].航空航天大学,2003.

[2].陈福集.信息系统技术概论.高等教育[M],2008.

[3].阎石.数字电子技术根底.高等教育[M].第五版.

[4].J.Bhasker,VerilogHDL硬件描述语言[M],:

机械工业,2002.

[5]肖忠祥,数据采集原理[M].XX:

西北工业大学,2001.

[6]ADP3338datasheet,2000.

[7]AD8138datasheet,1999。

[8]周振安,X良龙.,数据采集系统的设计与实践[M].:

地震,2005.7

[9]宋光德,X慧,梁磊.一种基于FPGA的高速波形采集与实时数据压缩方法[J]

电子测量与仪器学报,2004〔03〕47-50.

[10]杨志方,王泽成,涂坦,谈宏华,曹新莉.基于FPGA的多路高速数据采集系统的实现[J].XX化工学院学报.XX化工学院学报.

[11]曹伟军,聂杨.ADS8344和FPGA的高精度数据采集前端[J].单片机及嵌入式系统应用,2008〔01〕24.

[12]蒋学东.基于FPGA实现多路模拟信号自适应采集系统[J].现代电子技术报,2010年第8期.

[13]李鹏,马游春,李锦明.基于FPGA的多路数据采集模块硬件设计[J].仪表技术与传感器.2010年第3期.

[14]林长青,X胜利.基于FPGA的多路高速数据采集系统[J].中科院XX技术物理研究所,XX200083.

[15]黄容兰,万德焕.基于FPGA的A/D转换采集控制模块设计[J].XX电子科技大学电子工程学院.第24卷文章编号:

1004—9037(2009).

[16].江勇,段美霞.基于FPGA的多路数据实时捕获实现[J].中国电子科技集团公司第四十一研究所.文章编号:

1003—0107(2009)03-0020—03.

[17].于超,陈光武,石文静.基于FPGA的信号

附录

程序:

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

useieee.std_logic_arith.all;

entityAD3is

port(clk1,clk2:

instd_logic;

k0,k1,k2,k3,k4,k5,k6,k7,k8:

instd_logic;

d:

instd_logic_vector(7downto0);

ale,oe:

outstd_logic;

abc:

outstd_logic_vector(2downto0);

vss:

outstd_logic_vector(3downto0);

q,q1:

outstd_logic_vector(6downto0));

endentityAD3;

architecturert1ofAD3is

signalclk3:

std_logic;

signals:

std_logic_vector(1downto0);

signala1:

std_logic_vector(1downto0);

signala2:

std_logic_vector(2downto0);

signald1:

std_logic_vector(3downto0);

signalvs:

std_logic_vector(3downto0);

signalcout11,cout21,cout31,cout41:

std_logic_vector(3downto0);

begin

p1:

process(clk1)

begin

if(clk1'eventandclk1='1')then

if(s=11)then

s<="00";

else

s<=s+1;

endif;

endif;

endprocess;

a1<=s;

p2:

process(a1)

begin

casea1is

when"00"=>vs<="0001";

when"01"=>vs<="0010";

when"10"=>vs<="0100";

when"11"=>vs<="1000";

endcase;

vss<=vs;

endprocess;

p3:

process(k0,k1,k2,k3,k4,k5,k6,k7,k8,clk2)

variablea:

integerrange0to3;

variableb:

integerrange0to64;

begin

if(clk2'eventandclk2='1')then

if(k8='1')then

if(b=64)thena2<=a2+1;b:

=0;elseb:

=b+1;endif;

else

if(k0='1')thenif(a<3)thena:

=a+1;elsea2<="000";a:

=0;endif;endif;

if(k1='1')thenif(a<3)thena:

=a+1;elsea2<="001";a:

=0;endif;endif;

if(k2='1')thenif(a<3)thena:

=a+1;elsea2<="010";a:

=0;endif;endif;

if(k3='1')thenif(a<3)thena:

=a+1;elsea2<="011";a:

=0;endif;endif;

if(k4='1')thenif(a<3)thena:

=a+1;elsea2<="100";a:

=0;endif;endif;

if(k5='1')thenif(a<3)thena:

=a+1;elsea2<="101";a:

=0;endif;endif;

if(k6='1')thenif(a<3)thena:

=a+1;elsea2<="110";a:

=0;endif;endif;

if(k7='1')thenif(a<3)thena:

=a+1;elsea2<="111";a:

=0;endif;endif;

endif;

endif;

abc<=a2;

endprocess;

P4:

process(clk1)

variablestate:

integerrange0to2;

variablestate1:

integerrange0to500;

begin

if(clk1'eventandclk1='1')then

if(state1=499)then

state1:

=0;

clk3<=notclk3;

else

state1:

=state1+1;

endif;

endif;

if(clk3'eventandclk3='1')then

casestateis

when0=>ale<='1';

state:

=1;

when1=>ale<='0';

state:

=2;

when2=>ale<='1';

state:

=0;

endcase;

oe<='1';

endif;

endprocess;

p5:

process(d,clk1)

variablecout1,cout2,cout3,cout4:

integerrange0to9;

variabled3:

std_logic_vector(15downto0);

variabled2:

integerrange0to60000;

begin

d3:

=d*"11000100";

d2:

=conv_integer(d3);

cout1:

=d2/10000;

cout2:

=d2rem10000/1000;

cout3:

=d2rem1000/100;

cout4:

=d2rem100/10;

cout11<=conv_std_logic_vector(cout1,4);

cout21<=conv_std_logic_vector(cout2,4);

cout31<=conv_std_logic_vector(cout3,4);

cout41<=conv_std_logic_vector(cout4,4);

ENDPROCESS;

p6:

process(vs)

begin

case(vs)is

when"0001"=>d1<=cout41;

when"0010"=>d1<=cout3

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1