逐次渐近式AD转换器设计报告 2.docx

上传人:b****5 文档编号:3540925 上传时间:2022-11-23 格式:DOCX 页数:15 大小:336.66KB
下载 相关 举报
逐次渐近式AD转换器设计报告 2.docx_第1页
第1页 / 共15页
逐次渐近式AD转换器设计报告 2.docx_第2页
第2页 / 共15页
逐次渐近式AD转换器设计报告 2.docx_第3页
第3页 / 共15页
逐次渐近式AD转换器设计报告 2.docx_第4页
第4页 / 共15页
逐次渐近式AD转换器设计报告 2.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

逐次渐近式AD转换器设计报告 2.docx

《逐次渐近式AD转换器设计报告 2.docx》由会员分享,可在线阅读,更多相关《逐次渐近式AD转换器设计报告 2.docx(15页珍藏版)》请在冰豆网上搜索。

逐次渐近式AD转换器设计报告 2.docx

逐次渐近式AD转换器设计报告2

 

电子技术课程设计说明书

 

题目:

逐次渐近式A/D转换器

 

学生姓名:

高小宇,项小浩

学号:

2010060*****

院(系):

电气与信息工程学院

专业:

电气工程及其自动化

指导教师:

张俊老师

2012年11月30日

参考文献

1设计任务与要求

1.1设计任务与要求

根据逐次渐近式反馈比较原理设计一个8位的A/D转换器,能够将0-5V的直流信号转换为8位二进制数。

要求转换误差小于0.1V。

1.2指导思想

根据逐次渐近A/D转换器的工作原理,利用FPGA采用VerilogHDL语言描述A/D转换的状态机,在每个状态机中给DAC0832按位赋值、判断、置位、复位,8位处理后即可得到被测模拟电压的8位二进制数字量

2方案论证与选择

2.1主控EDA芯片的选取

本次设计选取的是一款FPGA芯片:

CycllonIIEp2c5t144c8N,其优点是应用灵活,运行速度快,内部拥有强大的逻辑资源,可以实现各种数字电路,并行执行程序,可以处理复杂的功能,效率极高,应用广泛。

2.2系统时钟选取

方案一:

利用555芯片产生合适频率的方波,此方案增加了电路的复杂程度,而且调整频率时要调整电阻电容,不方便操作

方案二:

利用PFGA的系统时钟(由50M晶振提供),编写分频模块程序得到合适的频率。

此方案由软件处理时钟,且时钟脉冲幅度完全适合PFGA,使用起来十分灵活、简易、方便。

因此设计中采用这个方案

2.3D/A转换部分方案

选取DAC0832和OPA4227组合完成将EDA芯片状态机给出的数据转换为电压的任务,这种方法是常用方法,电路简单实用,精度和转换速度足够达到题目要求。

如图

(一)所示

2.4电压比较部分方案

方案一:

利用4路运放OPA4227的未使用通道的开环工作实现比较器,这种方法经济节约器件,但性能不是很好

方案二:

采用专用比较器LM393,这种方案精度高、速度快、误差小,所以采用此方法。

这里要注意的一点是比较器的输出电压供电电压接近但PFGA的输入输出电压是3V,因此设计时采用了比较器输出降压方案。

如图

(一)所示。

2.5转换后显示部分

设计中采用8位发光二级管显示AD转换后的数字量。

为了去除闪动又使电路简洁,采用软件描述锁存器进行状态锁存,这种方式十分灵活,不仅可以去闪动而且可以对模拟电压进行多次实时测量。

如程序附页所示。

2.6系统电压选取

因为题目要求测量范围是0-5V,为了使测量范围足够广采取+8V和—8V供电,ADC0832的参考电压选取为-8V,利用稳压芯片7805产生5V电压给FPGA供电,这种供电方式电压转换范围可以达到0—6.5V,电路简单,既可以保证所有芯片正常工作,同时供电方便,而且不影响整个系统精度

2.7程序设计方案

本次设计以描述逐次渐近式AD转换器工作方式为目的,结合硬件方案,在quartus软件中采用多结构程序设计方式,将主程序分成三个部分:

分频模块,状态机模块,锁存模块。

分模块编写程序(程序见程序附页)分别生成模块图,加入工程,利用原理图编辑方式将程序模块相连。

软件结构如图

(二),系统框图如图(三)。

此系统结构的优点是:

电压测量模块与显示模块分离工作,状态机时刻在转换工作测量,但是模拟量不变显示稳定,模拟量改变,显示模块实时改变。

(二)

3总体电路设计及系统工作原理

3.1总体方框图

图(三)总体方框图

3.2总电路图

图(四)

3.3工作原理

本设计主要模拟8位逐次渐近式AD转换器的工作过程,以程序用硬件描述语言VerilogHDL语言描述用软件,取代硬件(循环计数器,触发器,门控电路,锁存器,):

首先将各位数字位清零进入准备测量状态,当下一个脉冲到来时,进入测量状态S1,在此状态中将最高位置1,其他位依然保持原来的状态,将这一数字状态送到DAC0832的数据输入端,转换成的模拟电压与被测的模拟电压在比较器中比较,若电压高于被测电压,比较器输出3V的高电平,若电压低于被测电压,比较器输出低电平0V,将此高低电平作为反馈信号给FPGA,当下一个时钟到来时,FPGA的状态机进入状态S2,在这一状态中根据比较器的反馈信号对最高位进行操作,若反馈信号为高电平(S1状态中给出的电压高于被测电压)则要将最高位清零,若反馈信号为高电平(S1状态中给出的电压低于被测电压)则要将最高位保留,在对最高位进行清零或保留的同时都会将次高位置1,其他位不变,这时将这一8位数字状态送到DAC0832装换成模拟电压。

和状态S1的一样,将DAC输出电压送到比较器比较,此时比较器同样会输出两种状态,若此状态的电压高于被测电压,比较器输出3V的高电平,若此状态电压低于被测电压,比较器输出低电平0V,将此高低电平作为反馈信号给FPGA,当下一个时钟到来时,FPGA的状态机进入状态S3,在这一状态中根据比较器的反馈信号对次高位进行操作,若反馈信号为高电平(S2状态中给出的电压高于被测电压)则要将次高位清零,若反馈信号为电平(S2状态中给出的电压低于被测电压)则要将次高位保留,在对次高位进行清零或保留的同时都会将第三高位置1,其他位不变,再将S3状态数字送到DAC0382转换成模拟电压与待测电压进行比较,这样直到在S9状态中对最低位操作,如此S1-S9循环形成状态机对AD转换器的8位数字从高位至地位,一位一位的判断。

以500Hz的频率按位操作,不断对模拟电压进行采样。

在状态机的运行过程中还要进行两种判断:

一种是复位判断,利用图(四)中的VL引脚状态判断复位按键是否按下,如果按下,状态机清零,重新测量。

另一种是对状态S9的判断,在程序处理中,处理完S9状态是会有一个输出电平的变化产生一个脉冲,将此脉冲作为锁存模块(VerilogHDL语言描述的触发器)的触发脉冲输入端,即每次对8位数字量正确取值后都会告诉锁存模块本次AD装换完毕,可以显示状态,锁存器就会根据此次转换结果更改显示状态,8位LED显示实测值,这样就完成了每次的AD转换及显示的过程。

3.4计算公式

根据系统电压的选取和工作原理推出AD转换结果为:

U=Dn*8/256

(Dn为8位LED显示的二进制数所对应的十进制数)

4单元电路设计

(一)DA转换及比较器部分电路图

5调试

5.1调试主要步骤

1.电源部分:

不装FPGA开发板上电后用万用表测试系统电压,并且检测稳压芯片输出电压保证电压准确无误后,装上FPGA开发板确保其正常工作。

2.DA转换部分:

用FPGA给DAC0832不同的数据状态,用万用表测运放不同状态下对应的输出电压,根据公式计算,检验DA转换部分的准确性。

3.比较器部分:

给比较器负向输入一个参考电压,利用FPGA给DAC0832不同的数据状态,让运放间隔输出比参考电压高和低的电压,用万用表测比较器的输出端,看比较器是否正常工作,同时调节比较器输出高电平的电压值使之为3V。

正常后将其输出接到FPGA的Vb引脚。

4.状态机部分:

利用软件分频使系统时钟为1秒,让状态机程序运行,测运放的输出电压检查状态机每个状态时是否运行正确,同时观察显示部分的运行情况。

5.一切准确无误后,让系统软硬件恢复到原设计状态,开始进行整体功能测试。

6数据测试,结果验证,与误差分析

6.1测试方法

系统软硬件完成结合和后,利用电位器调节分压给测量端输入不同的模拟值,读取LED显示值按公式转换成电压值,填下表中,对比分析

6.2数据表格

输入的被测模

拟电压值/V

转换结果的8

位二进制显示

转换后的电压值/V

(按公式计算)

转换误差/V

0

00000000

0*8/256=0

0

0.04

00000001

1*8/256=0.03

0.009

0.41

00001101

13*8/256=0.406

0.004

0.92

00011101

29*8/256=0.906

0.014

1.65

00110101

53*8/256=1.657

0.007

1.99

01000000

64*8/256=2

0.010

2.11

01000011

67*8/256=2.093

0.017

2.28

01001001

73*8/256=2.281

0.001

2.77

01011001

89*8/256=2.781

0.011

3.21

01100111

103*8/256=3.218

0.008

3.58

01110011

115*8/256=3.594

0.014

3.96

01111111

127*8/256=3.969

0.009

4.02

10000001

129*8/256=4.031

0.011

4.77

10011001

153*8/256=4.781

0.011

5.10

10100011

163*8/256=5.094

0.006

5.51

10110000

176*8/256=5.500

0.010

5.96

10111111

191*8/256=5.969

0.009

6.36

11001100

204*8/256=6.375

0.015

由于使用普通万用表电压档小数点后第三位的电压无法测出,因此误差都取近似值,但是误差基本在0.01V左右远小于题目要求的0.1V,因此影响不大,通过上表的数据可以验证设计完全符合要求。

6.3误差分析

比较器的输出建立时间,运放建立时间,系统接线都会造成误差

7元器件清单

元器件

数量

CycllonIIEp2c5t144c8N

1

300欧姆电阻

8

10K欧姆电阻

1

50k电位器

1

0.1μF电容

3

1μF电容

1

4.7μF电容

2

运放OPA4227

1

比较器LM393

1

DAC0832

1

稳压芯片7805

1

LED

8

开关

1

接线端子

3

8总结

这次通过逐次渐近式A/D转换器的设计与制作,我了解了FPGA和EDA技术,初步学习了一款新芯片,quartus开发软件和一种硬件描述语言。

对逐次渐近式A/D转换器的工作方式有了深入的掌握。

在这次设计中我遇到了各种问题,尤其是软件上的问题,但是在老师的帮助下,我和我的同学一直没有放弃,一直专研,将难题一一攻破,最后硬件电路和软件程序完全由自己设计完成。

最后的设计结果不仅完全符合题目要求,而且在精度和转换范围上都做到了充分的发挥。

 

由陕西科技大学同学原创,自主设计,望多交流

SUST电信电气加油

 

程序附页:

分频模块

modulefp(CLK,fp_out);

inputCLK;

reg[32:

0]count;

outputfp_out;

regfp_out;

always@(posedgeCLK)

begin

if(count<50000)

count<=count+1;

else

begin

count<=0;

fp_out=~fp_out;

end

end

endmodule

状态机模块

moduleztj(fp_out,VL,vb,Q7,Q6,Q5,Q4,Q3,Q2,Q1,Q0,sc_out);

inputfp_out;

inputVL;

inputvb;

outputQ7,Q6,Q5,Q4,Q3,Q2,Q1,Q0;

outputsc_out;

//reg[32:

0]count;

regsc_out;

parameters0=0,s1=1,s2=2,s3=3,s4=4,s5=5,s6=6,s7=7,s8=8,s9=9;

reg[3:

0]ns;

reg[7:

0]Q;

assignQ7=Q[7];assignQ6=Q[6];

assignQ5=Q[5];assignQ4=Q[4];

assignQ3=Q[3];assignQ2=Q[2];

assignQ1=Q[1];assignQ0=Q[0];

//always@(posedgeCLK)

//begin

//if(count<1)

//count<=count+1;

//else

//begin

//count<=0;

//fp_out=~fp_out;

//end

//end

always@(posedgefp_out)

begin

if(!

VL)

begin

ns=s0;

sc_out=0;

end

else

begin

case(ns)

s0:

begin

sc_out=0;

Q=8'b00000000;

ns<=s1;

end

s1:

begin

Q=Q|8'b10000000;

ns<=s2;

end

s2:

begin

if(!

vb)

begin

Q=Q|8'b01000000;

end

else

begin

Q=Q&8'b01111111;

Q=Q|8'b01000000;

end

ns<=s3;

end

s3:

begin

if(!

vb)

begin

Q=Q|8'b00100000;

end

else

begin

Q=Q&8'b10111111;

Q=Q|8'b00100000;

end

ns<=s4;

end

s4:

begin

if(!

vb)

Q=Q|8'b00010000;

else

begin

Q=Q&8'b11011111;

Q=Q|8'b00010000;

end

ns<=s5;

end

s5:

begin

if(!

vb)

Q=Q|8'b00001000;

else

begin

Q=Q&8'b11101111;

Q=Q|8'b00001000;

end

ns<=s6;

end

s6:

begin

if(!

vb)

Q=Q|8'b00000100;

else

begin

Q=Q&8'b11110111;

Q=Q|8'b00000100;

end

ns=s7;

end

s7:

begin

if(!

vb)

Q=Q|8'b00000010;

else

begin

Q=Q&8'b11111011;

Q=Q|8'b00000010;

end

ns<=s8;

end

s8:

begin

if(!

vb)

Q=Q|8'b00000001;

else

begin

Q=Q&8'b11111101;

Q=Q|8'b00000001;

end

ns<=s9;

end

s9:

begin

if(!

vb)

begin

Q=Q&8'b11111111;

sc_out=1;

ns<=s0;

end

else

begin

Q=Q&8'b11111110;

sc_out=1;

ns<=s0;

end

end

default:

begin

ns<=s0;

end

endcase

end

end

endmodule

锁存显示模块

modulesc(Q_i7,Q_i6,Q_i5,Q_i4,Q_i3,Q_i2,Q_i1,Q_i0,sc_in,Q_o7,Q_o6,Q_o5,Q_o4,Q_o3,Q_o2,Q_o1,Q_o0,);

inputQ_i7,Q_i6,Q_i5,Q_i4,Q_i3,Q_i2,Q_i1,Q_i0;

inputsc_in;

outputQ_o7,Q_o6,Q_o5,Q_o4,Q_o3,Q_o2,Q_o1,Q_o0;

regQ_o0;regQ_o1;regQ_o2;regQ_o3;

regQ_o4;regQ_o5;regQ_o6;regQ_o7;

always@(posedgesc_in)

begin

Q_o0=Q_i0;Q_o1=Q_i1;Q_o2=Q_i2;Q_o3=Q_i3;

Q_o4=Q_i4;Q_o5=Q_i5;Q_o6=Q_i6;Q_o7=Q_i7;

end

endmodule

 

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

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

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

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