ImageVerifierCode 换一换
格式:DOCX , 页数:12 ,大小:84.21KB ,
资源ID:7166074      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/7166074.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(模数转换原理.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

模数转换原理.docx

1、模数转换原理模-数转换原理 ADC的转换原理根据ADC的电路形式有所不同。 ADC电路通常由两部分组成,它们是:采样、保持电路和量化、编码电路。其中量化、编码电路是最核心的部件,任何ADC转换电路都必须包含这种电路。 ADC电路的形式很多,通常可以并为两类: 间接法:它是将采样-保持的模拟信号先转换成与模拟量成正比的时间或频率,然后再把它转换为数字量。这种通常是采用时钟脉冲计数器,它又被称为计数器式。它的工作特点是:工作速度低,转换精度高,抗干扰能力强。 直接法:通过基准电压与采样-保持信号进行比较,从而转换为数字量。它的工作特点是:工作速度高,转换精度容易保证。 模数转换的过程有四个阶段,即

2、采样、保持、量化和编码。 采样是将连续时间信号变成离散时间信号的过程。经过采样,时间连续、数值连续的模拟信号就变成了时间离散、数值连续的信号,称为采样信号。采样电路相当于一个模拟开关,模拟开关周期性地工作。理论上,每个周期内,模拟开关的闭合时间趋近于0。在模拟开关闭合的时刻(采样时刻),我们就“采”到模拟信号的一个“样本”。 量化是将连续数值信号变成离散数值信号的过程。理论上,经过量化,我们就可以将时间离散、数值连续的采样信号变成时间离散、数值离散的数字信号。 我们知道,在电路中,数字量通常用二进制代码表示。因此,量化电路的后面有一个编码电路,将数字信号的数值转换成二进制代码。 然而,量化和编

3、码总是需要一定时间才能完成,所以,量化电路的前面还要有一个保持电路。保持是将时间离散、数值连续的信号变成时间连续、数值离散信号的过程。在量化和编码期间,保持电路相当于一个恒压源,它将采样时刻的信号电压“保持”在量化器的输入端。虽然逻辑上保持器是一个独立的单元,但是,工程上保持器总是与采样器做在一起。两者合称采样保持器。八位串行A/D转换器ADC0832简介 ADC0832 是美国国家半导体公司生产的一种8 位分辨率、双通道A/D转换芯片。由于它体积小,兼容性强,性价比高而深受单片机爱好者及企业欢迎,其目前已经有很高的普及率。ADC083X是市面上常见的串行模数转换器件系列。ADC0831、AD

4、C0832、ADC0834、ADC0838是具有多路转换开关的8位串行I/O模数转换器,转换速度较高(转换时间32uS),单电源供电,功耗低(15mW),适用于各种便携式智能仪表。本章以ADC0832为例,介绍其使用方法。 ADC0832是8脚双列直插式双通道A/D转换器,能分别对两路模拟信号实现模数转换,可以用在单端输入方式和差分方式下工作。ADC0832采用串行通信方式,通过DI 数据输入端进行通道选择、数据采集及数据传送。8位的分辨率(最高分辨可达256级),可以适应一般的模拟量转换要求。其内部电源输入与参考电压的复用,使得芯片的模拟电压输入在05V之间。具有双数据输出可作为数据校验,以

5、减少数据误差,转换速度快且稳定性能强。独立的芯片使能输入,使多器件挂接和处理器控制变的更加方便。 ADC0832 具有以下特点: 8位分辨率; 双通道A/D转换; 输入输出电平与TTL/CMOS相兼容; 5V电源供电时输入电压在05V之间; 工作频率为250KHZ,转换时间为32S; 一般功耗仅为15mW; 8P、14PDIP(双列直插)、PICC 多种封装; 商用级芯片温宽为0C to +70C,工业级芯片温宽为-40C to +85C;图3 ADC0832引脚图芯片接口说明: CS_ 片选使能,低电平芯片使能。 CH0 模拟输入通道0,或作为IN+/-使用。 CH1 模拟输入通道1,或作为

6、IN+/-使用。 GND 芯片参考零电位(地)。 DI 数据信号输入,选择通道控制。 DO 数据信号输出,转换数据输出。 CLK 芯片时钟输入。 Vcc/REF 电源输入及参考电压输入(复用)ADC0832的工作原理: 正常情况下ADC0832 与单片机的接口应为4条数据线,分别是CS、CLK、DO、DI。但由于DO端与DI端在通信时并未同时使用并与单片机的接口是双向的,所以在I/O口资源紧张时可以将DO和DI并联在一根数据线上使用。当ADC0832未工作时其CS输入端应为高电平,此时芯片禁用,CLK 和DO/DI 的电平可任意。当要进行A/D转换时,须先将CS使能端置于低电平并且保持低电平直

7、到转换完全结束。此时芯片开始转换工作,同时由处理器向芯片时钟(CLK)输入端输入时钟脉冲,DO/DI端则使用DI端输入通道功能选择的数据信号。在第一个时钟脉冲的下沉之前DI端必须是高电平,表示启始信号。在第二、三个脉冲下沉之前DI端应输入两位数据用于选择通道功能。通道地址通道工作方式说明SGL/DIFODD/SIGN0100+-差分方式01-+10+单端输入方式11+表1:通道地址设置表 如表1所示,当此两位数据为“1”、“0”时,只对CH0 进行单通道转换。当2位数据为“1”、“1”时,只对CH1进行单通道转换。当两位数据为“0”、“0”时,将CH0作为正输入端IN+,CH1作为负输入端IN

8、-进行输入。当两位数据为“0”、“1”时,将CH0作为负输入端IN-,CH1 作为正输入端IN+进行输入。到第三个脉冲的下降之后DI端的输入电平就失去输入作用,此后DO/DI端则开始利用数据输出DO进行转换数据的读取。从第4个脉冲下降沿开始由DO端输出转换数据最高位Data7,随后每一个脉冲的下降沿DO端输出下一位数据。直到第11个脉冲时发出最低位数据Data0,一个字节的数据输出完成。也正是从此位开始输出下一个相反字节的数据,即从第11个字节的下降沿输出Data0。随后输出8位数据,到第19 个脉冲时数据输出完成,也标志着一次A/D转换的结束。最后将CS置高电平禁用芯片,直接将转换后的数据进

9、行处理就可以了。时序说明请参照图4。 作为单通道模拟信号输入时ADC0832的输入电压是05V且8位分辨率时的电压精度为19.53mV,即(5/256)V。如果作为由IN+与IN-输入的输入时,可是将电压值设定在某一个较大范围之内,从而提高转换的宽度。但值得注意的是,在进行IN+与IN-的输入时,如果IN-的电压大于IN+的电压则转换后的数据结果始终为00H。ADC0832的工作时序图4 ADC0832工作时序ADC0832软硬件设计实例 通过以上的理论学习之后,对模数转换应该有了一定的了解,接下来就根据上文的指导,对ADC0832进行实际应用,以加深印象。本实例功能是将通道1上采样到的电压显

10、示在LED数码管上,通过改变通道1的输入电压变化,观察输出读数。硬件原理图图7 硬件原理图程序流程图图8 软件流程图 相信看到这里,你应该可以理解我们是如何利用单片机来进行模数转换的处理了,你也可以根据自己的需要来写些AD模数转换相关的应用程序,如数字温度计,湿度传感应用,压力传感应用等等。由于篇幅有限,读者朋友可以通过网站或电子邮件一起交流与学习。在下几期中,我们将陆续介绍51单片机综合学习系统的其它功能原理与应用。STC单片机的相关程序如下:#include /定义的 系统头文件和全局变量#include #define uchar unsigned char#define uint un

11、signed int#define DogReset() WDT_CONTR=0x35/ T1 定时 0.1ms.作为系统计时用,#define vT01ms 2#define vT10ms 10#define vT100ms 10#define vT01S 100 / 1 s = 10 ms * 100#define vT0HVal 0xfe /0xff /0xfe /0xf6#define vT0LVal 0x33 /0x9c /0x0c /0x4cuchar code display_AD_channel_ID2 = 0x00,0x01;static unsigned char data

12、 CS;uchar data AD_channel_result25; /各通道A/D转换结果。前是通道号;后是转换的值uint cT01ms;uchar cT10ms;uchar cT100ms;uchar cT01s;uchar THTL;bit OutFlag;void delay_ms(register uint Count) register uchar T; for(;Count0;Count-) for(T=0;T0; i-) send_char_com(*str); str+; DogReset(); uchar Ad_Change(uchar channel) uint AD

13、_Result_Temp = 0 ; /-将P1.0-P1.1设置成适合AD转换的模式 / P1 = 0xff; /将P1口置高,为A/D转换作准备 ADC_CONTR = ADC_CONTR|0x80; /1000,0000打开A/D转换电源 P1M0 = 0x03; /0000,0011用于A/D转换的P1.x口,先设为开漏 P1M1 = 0x03; /0000,0011P1.0-P1.1先设为开漏。断开内部上拉电阻 delay_ms(20); /20 ADC_CONTR = ADC_CONTR&0xE0; /1110,0000 清ADC_FLAG,ADC_START位和低3位 ADC_C

14、ONTR = ADC_CONTR|(display_AD_channel_IDchannel&0x07); /设置当前通道号 delay_ms(1); /延时使输入电压达到稳定 ADC_DATA = 0; /清A/D转换结果寄存器 ADC_LOW2 = 0; ADC_CONTR = ADC_CONTR|0x08; /0000,1000ADCS 1,启动转换 do DogReset(); while(ADC_CONTR & 0x10)=0); /0001,0000等待A/D转换结束 ADC_CONTR = ADC_CONTR&0xE7; /1110,0111清ADC_FLAG位,停止A/D转换

15、AD_Result_Temp = (AD_Result_Temp|ADC_DATA)0;i-) cTempi=Ad_Change(0); cAverage=(cAverage+cTempi)1); return(cAverage);void InitCom(unsigned char BaudRate) switch (BaudRate) case 1: THTL = 64; break; /波特率300 case 2: THTL = 160; break; /600 case 3: THTL = 208; break; /1200 case 4: THTL = 232; break; /24

16、00 case 5: THTL = 244; break; /4800 case 6: THTL = 250; break; /9600 case 7: THTL = 253; break; /19200 case 8: THTL = 255; break; /57600 default: THTL = 208; break; /1200 void Chip_initial(void) IE=0; / 定时器控制字初始化 TMOD=0x21; / 定时器1为方式2,定时器0为方式1 TCON=0x50; / 设置外部中断类型 T2CON=0x0d; / 选择定时器1为波特率发生器,T2为捕获工

17、作方式/ ET2=1; ET0=1; / 允许定时器0、定时器2中断 / 外部中断设置 EX0=0; / FFSK中断初始时关闭,有载波时再开启 EX1=0; IT1=1; / 外部中断0、1均为下降沿触发 IT0=1; / 启动定时器0 TH0=vT0HVal; / 启动定时器0 TL0=vT0LVal; TR0=1; InitCom(6); /设置波特率为9600 1-7波特率30019200 SCON = 0x50; /串口方式1,允许接收 TH1 = THTL; TL1 = THTL; PCON = 0x80; /波特率加倍控制,SMOD位 RI = 0; /清收发标志 TI = 0;

18、 TR1 = 1; /启动定时器 IP=0x02; /PT2=1 IPH=0x02; /PT2H=1,PT0H=1 EA=1; delay_ms(10); / 延时是为了避免定时器0无法产生中断的问题void Para_initial(void) OutFlag=0; cT01ms = vT01ms; cT10ms = vT10ms;/ cT100ms = vT100ms; cT01s = vT01S; CS = 0; /设置CS为0不选任何的音源,如为1则选第1路void system_initial(void) Chip_initial(); Para_initial(); DogRese

19、t(); / 已针对 STC89C58RD+ 作修改.06-04-06void main(void) system_initial(); while(1) DogReset(); if(OutFlag) OutFlag=0; send_char_com(AD_Filter(); void Trint0(void) interrupt 1 using 1 TR0=0; / 时基1mS TH0=vT0HVal; TL0=vT0LVal; TR0=1; TF0=0; if(!(-cT01ms) cT01ms=vT01ms; if(!(-cT10ms) cT10ms=vT10ms; if(!(-cT0

20、1s) cT01s=vT01S; OutFlag=1; void ComInINT(void) interrupt 4 if (RI) /判断是不收完字符 switch(SBUF) case 0x61: CS = 1; break; /根据SBUF设置CS接收abcde调试方便 case 0x62: CS = 2; break; case 0x63: CS = 3; break; case 0x64: CS = 4; break; case 0x65: CS = 0; break; P1 = 255; /P1口全为高电平,4-7通过反相为低不选任何音源,0-3为高用于读取按键 RI = 0; /RI清零

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

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