基于ATmega128的并行ADWord格式文档下载.docx
《基于ATmega128的并行ADWord格式文档下载.docx》由会员分享,可在线阅读,更多相关《基于ATmega128的并行ADWord格式文档下载.docx(15页珍藏版)》请在冰豆网上搜索。
读方式…………2.5μsMax
无需外部时钟或振荡器
片内的采样与保持
·
正负5伏电源
2.2引脚说明
引脚号名称I/O说明
1ANLGLNI模拟输入端
13CSI片选端。
CS须保持低电平以便AD识别RD或WR
2~7D0~D7O数据端,3态数据输出
10GND地
9INTO中断
在写读方式时,中断输出(INT)变低提示内部计数延迟时间td(int)完成及结果数据在输出锁定。
典型的延迟时间td(int)是800ns,在WS上升缘后开始(见工作特性及图3)。
如果RD在td(int)结束前变低则INT在td(RIL)结束时变低且转换结果即可读出(见图2)。
INT由RD可CS上升缘复位
7MODEI
方式选择。
MODE通过类似下拉电阻的50μA电流源与GND相连。
当MODE低电平选择读方式。
当MODE高电平则选择写-读方式
19NC无内部连接
18OFLWO溢出指示端
正常情况时OFLW是一逻辑高电平。
可是如果模拟输入比Vref+高,OFLW在转换结束时将变低。
可用于级联两个或多个器件以提高分辨率(9或10位)
8RDI读
CS低电平的写读方式下,3态数据输出D0至D7在RD变低时被激活。
通过在内部计数延迟时间结束之前读数据,RD也可用
2.3工作原理
ADC0820采用取样数据比较器技术及普遍用于许多高速转换器的快闪技术。
应用两个4位快闪模数转换器完成8位输出。
推荐的模拟输入电压范围是0.1V至VCC+0.1V。
小于Vref-+1/2LSB或大于Vref++1/2LSB的模拟输入信号
分别转换为00000000或11111111。
基准输入是全差分的,其共模极限为电源决定。
基准输入值决定模拟输入满量程范围。
这允许ADC的增益通过改变Vref+及Vref-电压值而变化以便于比率转换。
器件在两种方式下工作:
读及写读方式,可通过MODE选择。
高4位快闪ADC通过同时工作的16个比较器测量输入信号。
高精度的4位DAC这时从转换结果产生一离散的模拟电压。
一段延迟时间后,第二组比较器根据输入电平及DAC输出间的模拟电压差完成低四位转换。
每一个转换结果输入一个8位锁定电路并且在RD的下降沿输出至3态输出缓冲器。
2.4时序分析
<
1>
只读模式。
MODE处于低电平时,转换器被设为(只)读方式。
在只读方式下,WR/RDY被用作输出且被认为是准备好端。
在此状态,WR/RDY低电平且CS低电平指示器件忙。
转换开始于RD的下降沿且在INT下降和WR/RDY恢复至高阻抗状态后1.6μs内完成。
此时数据输出亦从高阻抗状态转变为有效状态。
数据读出后,RD处高电平状态,INT恢复高电平状态,数据输出恢复至高阻抗状态。
2>
写读方式
当MODE处高电平状态,转换器被设为写读方式且WR/RDY被看作是写操作端。
(1)模式一
转换开始于WR的上升沿且在INT下降的800ns内完成。
保存CS低电平、WR高电平状态,RD读取信号要在INT下降前准备好,在INT下降沿开始读数据,数据输出亦从高阻抗状态转变为有效状态。
(2)模式二
此状态类似于模式一,WR/RDY低电平且CS低电平指示器件忙,转换开始于WR/RDY上升沿,大约在WR/RDY恢复高电平后800ns内完成。
INT下降沿表示转换完成,此时,在RD的下降沿开始读数据,数据输出亦从高阻抗状态转变为有效状态。
(3)模式三
此工作方式操作简单,将CS、RD一直处低电平状态,转换开始于WR的上升沿,转换大约在800ns内完成,INT下降沿表示转换完成,数据可读出。
INT为高电平状态时,数据输出呈高阻抗状态。
在这种状态下,数据呈现的高阻态可以引起数据误读,影响精确度。
3、系统方案设计
本系统方案根据ADC0820的输入信号要求设计相对应的输入信号处理模块,并根据芯片的几种工作模式来选择芯片的连接电路以及程序的设计。
程序的设计是由芯片驱动程序设计、采样数据处理程序设计、显示程序设计等三个模块组成。
电路由运放比例缩小电路、电位抬高电路、反相等比跟随电路以及AD转换电路等电路模块组成。
真有效值计算公式:
3.1信号输入处理模块的论证与选择
根据ADC0820的测量信号输入要求“0.2V至VCC+0.2V”可见,输入信号要求单极性且峰峰值不得超过电源电压0.2V。
一般的输入信号均为双极性,如果输入信号峰峰值很大就需要将其等比缩小并将其的基准电压值抬高。
①比例缩小电路:
方案一:
通过电阻网络缩小信号幅值。
即通过分压电阻来实现,此方案对电阻的精确度要求很高,别电阻容易受温度影响,最后的结果误差可能很大,再者大电阻对信号的能量有损耗并且都含有一定的寄生电容,也会对分压效果有很大影响。
所以放弃此方案。
方案二:
通过运放缩小信号幅值。
根据运放组成的比例放大电路的原理来构成比例缩小电路。
即
,只需要增大输入电阻的阻值以及减小反馈电阻的阻值来完成放大比例小于1的缩小。
运放的精度比较高,且受外界影响比较小,所以选择此方案。
②通交隔直电容
在缩小电路后面加一个4.7uf的电解电容,来防止抬高电位的直流量灌入缩小运放中。
因为比例缩小运放的输出阻抗很小,而后一级的等比跟随输入阻抗很大,所以必需加通交隔直电容。
③抬高电位电路
用分压电阻网络来完成。
④缓冲电路
因为AD转换要求输出阻抗很小以免前段信号对模数转换模块产生较大影响,所以前级应加缓冲。
同向比例放大器具有较大的输入阻抗,较小的输出阻抗,所以选择同向比例放大器作为缓冲级。
3.2AD转换模块的论证与选择
采用ADC0820写读方式的模式三进行实验。
因为它的操作简单,在程序的设计里面要注意等待转换的完成,否则可能读到数据端口的高阻态而影响精确度。
3.3软件程序模块的论证与选择
由芯片驱动程序设计、采样数据处理程序设计、显示程序设计等三个模块组成。
1芯片驱动程序是根据时序分析里面,对写读方式的模式三的时序图来编写程序。
2采样数据处理是通过冒泡发得到数据中的最大值和最小值。
通过均方根运算得到其真有效值。
4、系统理论分析与计算
4.1信号输入处理电路的分析与计算
1比例缩小
2同向放大
4.2AD转换电路的分析与计算
根据采样定理,
;
而工程上我们要求
。
所以采样频率设为300KHz。
采样点数设为300个。
4.3软件程序的分析与计算
实验程序:
/*************************0820.c**********************/
#include<
iom128v.h>
macros.h>
#defineNULL0
#defineNUM300
#defineucharunsignedchar
#defineuintunsignedint
#defineulongunsignedlong
#defineCOM_ADC0820_DDRDDRA
#defineCOM_ADC0820_PORTPORTA
#defineDATA_ADC0820_DDRDDRB
#defineDATA_ADC0820_PORTPORTB
#defineDATA_ADC0820_PINPINB
#defineCOM_ADC0820_CS0
#defineCOM_ADC0820_RD1
#defineCOM_ADC0820_WR_RDY2
#defineCOM_ADC0820_MODE3
#defineCOM_ADC0820_INT4
#defineCS_LCOM_ADC0820_PORT&
=~BIT(COM_ADC0820_CS)
#defineCS_HCOM_ADC0820_PORT|=BIT(COM_ADC0820_CS)
#defineRD_LCOM_ADC0820_PORT&
=~BIT(COM_ADC0820_RD)
#defineRD_HCOM_ADC0820_PORT|=BIT(COM_ADC0820_RD)
#defineWR_RDY_LCOM_ADC0820_PORT&
=~BIT(COM_ADC0820_WR_RDY)
#defineWR_RDY_HCOM_ADC0820_PORT|=BIT(COM_ADC0820_WR_RDY)
#defineMODE_LCOM_ADC0820_PORT&
=~BIT(COM_ADC0820_MODE)
#defineMODE_HCOM_ADC0820_PORT|=BIT(COM_ADC0820_MODE)
uchardata_save[NUM]={0};
doubleMAX,MIN;
charresult[6];
voidADC0820_init()
{
COM_ADC0820_DDR|=BIT(COM_ADC0820_CS);
COM_ADC0820_DDR|=BIT(COM_ADC0820_RD);
COM_ADC0820_DDR|=BIT(COM_ADC0820_WR_RDY);
COM_ADC0820_DDR|=BIT(COM_ADC0820_MODE);
DATA_ADC0820_DDR=0x00;
MODE_H;
CS_L;
RD_L;
WR_RDY_H;
}
charADC0820_read()
uchartemp=0;
WR_RDY_L;
delay_us(400);
temp=DATA_ADC0820_PIN;
returntemp;
voidADC0820_DATA_save()
uinti;
for(i=0;
i<
NUM;
i++)
{
data_save[i]=ADC0820_read();
}
voidADC0820_DATA_rank()
uchartemp_max,temp_min;
ADC0820_DATA_save();
temp_max=data_save[0];
temp_min=data_save[0];
{
if(temp_max<
data_save[i])
{
temp_max=data_save[i];
}
if(temp_min>
temp_min=data_save[i];
}
MAX=(temp_max/256.0)*5.0;
MIN=(temp_min/256.0)*5.0;
char*ADC0820_DATA_exchange(doubledata)
{
ulongn=(ulong)data;
ulongf=(data-n)*100000;
result[0]=n+'
0'
;
result[1]='
.'
result[2]=f/10000+'
result[3]=f/1000%10+'
result[4]=f/100%10+'
result[5]='
v'
returnresult;
voidADC0820_display()
char*p1=NULL;
char*p2=NULL;
p1=ADC0820_DATA_exchange(MAX);
LCD1602_display(0x00,"
MAX:
+"
);
LCD1602_display(0x00+0x06,p1);
p2=ADC0820_DATA_exchange(MIN);
LCD1602_display(0x40,"
MIN:
LCD1602_display(0x40+0x06,p2);
voidmain()
while
(1)
ADC0820_init();
LCD1602_init();
ADC0820_DATA_rank();
ADC0820_display();
delay_ms(1000);
/*************************1602.c**********************/
#defineucharunsignedchar
#defineCOM_LCD1602_DDRDDRE
#defineCOM_LCD1602_PORTPORTE
#defineDATA_LCD1602_DDRDDRF
#defineDATA_LCD1602_PORTPORTF
#defineCOM_LCD1602_RS0
#defineCOM_LCD1602_RW1
#defineCOM_LCD1602_E2
#defineRS_LCOM_LCD1602_PORT&
=~BIT(COM_LCD1602_RS)
#defineRS_HCOM_LCD1602_PORT|=BIT(COM_LCD1602_RS)
#defineRW_LCOM_LCD1602_PORT&
=~BIT(COM_LCD1602_RW)
#defineRW_HCOM_LCD1602_PORT|=BIT(COM_LCD1602_RW)
#defineE_LCOM_LCD1602_PORT&
=~BIT(COM_LCD1602_E)
#defineE_HCOM_LCD1602_PORT|=BIT(COM_LCD1602_E)
voidCOM_LCD1602(ucharcmd)
RS_L;
RW_L;
DATA_LCD1602_PORT=cmd;
E_H;
delay_ms(5);
E_L;
voidDATA_LCD1602(uchardata)
RS_H;
DATA_LCD1602_PORT=data;
delay_ms(10);
voidLCD1602_init()
DATA_LCD1602_DDR=0xff;
COM_LCD1602_DDR|=BIT(COM_LCD1602_RS)|BIT(COM_LCD1602_RW)|BIT(COM_LCD1602_E);
COM_LCD1602(0x3f);
COM_LCD1602(0x01);
COM_LCD1602(0x0c);
COM_LCD1602(0x06);
voidLCD1602_display(ucharadd,uchar*show)
inti;
COM_LCD1602(0x80+add);
6;
DATA_LCD1602(show[i]);
delay_ms(10);
/*************************delay.c**********************/
#defineuintunsignedint
voiddelay_us(uintus)
uinti=0;
for(;
us>
0;
us--)
_NOP();
voiddelay_ms(uintms)
uintj;
ms;
for(j=0;
j<
1141;
j++);
5、电路设计
5.1系统总体框图
衰5.2理
减
5.2信号输入处理电路原理图
5.3AD转换电路原理图
5.4电源
电源为AD芯片提供+5V电源,为输入处理电路提供±
5V电源,确保电路的正常稳定工作。
要确保正负极接法的准确性。
6、测试方案与测试结果
6.1测试方案
将电路分级进行测试,也就是说,从方波振荡信号产生到最后波形合成,一级一级的检测。
确认一级准确无误后,再接上下一级电路,测量前后两级是否正常工作。
所有模块板子都要保证所有地线共线、电源线共线。
6.2测试条件与仪器
测试条件:
检查无误,硬件电路必须与系统原理图完全相同,并且检查无误,硬件电路保证无虚焊。
测试仪器:
数字万用表、示波器、稳压电源、函数信号发生器。
6.3.1测试结果(数据)
f(KHz)
VMAX(源)
VMAX(测)
VRMS(源)
VRMS(测)
5.0
3.90
3.93
2.65
2.72
10.0
3.92
2.67
2.75
15.00
2.68
20.10
3.91
2.70
25.10
3.87
2.69
30.00
3.88
35.15
2.66
40.20
45.00
50.45
3.89
6.3.2测试分析与结论
根据实验数据,随着输入信号频率的增加,误差也随着增加。
误差基本保持在40mv以内。
误差率为:
1%。
附录1参考文献
[1]邱关源、罗先觉主编·
《电路》。
北京:
高等教育出版社。
2006.5
[2]康光华主编·
《模拟电子技术基础》。
2006.1
[3]马明建编著·
《数据采集与处理技术》。
西安:
西安交通大学出版社。
2005.9
[4]李全利、迟荣强编著·
《单片机原理与接口技术》。
2004.1
附录2系统原理图