当前位置: 首页 > news >正文

51单片机入门——数模\模数转换

目录

  • 1. 数字信号与模拟信号
  • 2. A/D转换
    • 2.1. A/D 的基本概念
    • 2.2. A/D 的主要指标
    • 2.3. 典型的 A/D 转换器芯片 ADC0809
    • 2.4. 实验
  • 3. D/A 转换
    • 3.1 D/A 的基本概念
    • 3.2. D/A 的重要指标
    • 3.3. 典型的 D/A 转换芯片 DAC0832
      • 3.3.1. DAC0832 芯片概述
      • 3.3.2. DAC0832 的内部结构
      • 3.3.3. DAC0832 的引脚
      • 3.3.4. DAC0832 的工作方式
    • 3.4. 实验

1. 数字信号与模拟信号

要记录一段美妙的音乐,我们至少有两种方式。第一种是使用黑胶唱片,第二种是使用数码文件。

任何一种音乐本质来说,都是一种跟随时间不断变化的信号,如下图(a)所示。它本身具有如下特点:

  1. 在时间轴上,信号是连续的,即每一个时刻都对应一个确定的信号。
  2. 信号在纵轴上也是连续的,即其任意一个点的实际信号值都是无限精细的。

这种信号我们将其称之为模拟信号。世界上任何客观存在的信号都是模拟信号。

将这样的信号,用机器压制到一个塑料唱片上,就形成了对音乐信号的记录。将这个唱片放入留声机中,唱针位置不动而唱片匀速运动,就导致唱针上下运动,引起喇叭发出与音乐完全相同的声音信号,如图(b)。理论上这个记录、重现的过程,是完全保真的。
但是这种方法的弊端也是巨大的:随着唱片播放次数的增加,唱针对唱片上的形状会带来磨损,导致一些原本尖锐的形状就会变得圆滑,使得声音的高频分量越来越小。

现今能够保存模拟音乐信号的媒介只有唱片和磁带,都存在上述弊端。
在这里插入图片描述
如果能够将音乐信号用数字记录在纸上或者其它数字媒介上,那么它将永远不会被磨损。记录方法是,以固定采样率,比如10ps一次,对音乐信号进行采样,获得每个采样点音乐信号的量化值,按照顺序记录这些量化值,就永久性的保存了音乐信号。图(c),红色样点在外形上基本与原始音乐信号吻合,记录成数据依次为:0,99,189,255,190,101,0….44,0。这些被记录的数字,就是数字信号。

数字信号有两个特点:

  1. 在时间轴上,它是离散的;
  2. 在纵轴上,它是被量化的。

如果在时间轴上的离散点特别细密,比如由10μs采样一次改为1ns采样一次,并且在纵轴上的量化是无限精细的,比如图中的 99 变为 988547823,那么它可以非常接近原始信号。当然,这样的后果是,原本两行数字就可以完成的信号记录,就会写满几十页纸。

没有人会把数字信号记录在纸上,这太费事了。实际上,数字信号可以用多种媒介保存,比如计算机的存储器、硬盘、U盘、SD 卡、光盘等。大家广泛使用的MP3播放器,就是利用数字信号存储和回放的。它以192ksps的采样率,16位以上的量化分辨率对音乐信号进行数字化,基本可以保证音质不受影响。当然,如果你想听到更加逼真的音乐效果,可以采用更高的采样率,更高位数分辨率,使其时间轴和纵轴均非常细密,这样的话,一首几分钟的歌曲,可能会占用多达GB的存储容量,而现在一般的MP3歌曲,一首歌只有大约几MB的存储容量。

将原本连续的模拟信号转变成离散、量化的数字信号,虽然可能带来一些微弱的失真,但是由此引发的好处是非常多的。

  1. 它不会被磨损,数字信号是以二进制0、1的形式保存的,当一个1被磨损的快要变成0时,你可以轻松把它重新写为1;
  2. 可以使用各种各样的算法对原始数字信号进行后期处理,比如手机中的魔音技术,可以将男人说话的声音变为女人说话的声音;
  3. 它可以被精准访问。在录音机中要想准确从某个句子开始重复读音,困难很大。但是数字MP3播放器,可以精准定位在某个确定的位置。

正因为如此,越来越多的的电子设备开始采用数字化技术。其核心是先用一种叫做ADC(模数转换器)的部件,将模拟信号转变成数字信号,处理器按照设计者的意愿,对这些数字信号进行各式各样的复杂处理,然后再通过一种叫 DAC(数模转换器)的部件,将数字信号转变成模拟信号,驱动喇叭发出声音。

因为 A/D、D/A 只是转换方向不同,因此我们讲解过程主要以 A/D 为例来讲解。

2. A/D转换

2.1. A/D 的基本概念

A/D 是模拟量到数字量的转换,依靠的是模数转换器(Analog to Digital Converter),简称ADC。

我们在选取和使用 A/D 的时候,依靠什么指标来判断很重要。由于 AD 的种类很多,分为积分型、逐次逼近型、并行/串行比较型、Σ-Δ型等多种类型。同时指标也比较多,并且有的指标还有轻微差别。

1、计数型A/D转换器
计数型A/D转换器由D/A转换器、计数器和比较器组成,如下图所示。工作的时候,计数器由零开始加1计数,每计一次数,计数值送往D/A转换器进行转换,转换后,将转换得到的模拟信号与输入的模拟信号送比较器进行比较,若前者小于后者,则计数值继续加1,重复D/A转换及比较过程,依此类推,直到当D/A转换后的模拟信号与输入的模拟信号相同,则停止计数,这时,计数器中的当前值就为输入模拟量对应的数字量。这种A/D 转换器结构简单、原理清楚,但它的转换速度与精度之间存在矛盾,当提高精度时,转换的速度就慢,当提高速度时,转换的精度就低,所以在实际中很少使用。
在这里插入图片描述

2、逐次逼近型A/D转换器
逐次逼近型A/D 转换器是由一个比较器、D/A 转换器、寄存器及控制电路组成的,如图下所示。逐次逼近型A/D转换器的转换过程与计数型基本相同,也要进行比较以得到转换的数字量,但逐次逼近型是用一个寄存器从高位到低位依次开始逐位试探比较,转换过程如下:
开始时逐次逼近寄存器所有位清0,转换时,先将最高位置1,送D/A转换器转换,转换结果与输入的模拟量比较,如果转换的模拟量比输入的模拟量小,则1保留,如果转换的模拟量比输入的模拟量大,则1不保留,然后从次高位依次重复上述过程直至最低位,最后逐次逼近寄存器中的内容就是输入模拟量对应的数字量,转换结束后。转换结束信号有效。一个n位的逐次逼近型A/D转换器转换只需要比较n次,转换时间只取决于位数和时钟周期。逐次逼近型A/D转换器的转换速度快,在实际中使用广泛。
在这里插入图片描述
3、双重积分型A/D转换器
双重积分型A/D 转换器将输入电压先变换成与其平均值成正比的时间间隔,然后再把此时间间隔转换成数字量,如下图所示,它属于间接型转换器。它的转换过程分为采样和比较两个过程。采样即用积分器对输入模拟电压Vin进行固定时间的积分,输入模拟电压值越大,采样值越大,采样值与输入模拟电压值成正比;比较就是用基准电压(+Vr或-Vr)对积分器进行反向积分,直至积分器的值为0。由于基准电压值大小固定,因此采样值越大,反向积分时积分时间越长,积分时间与采样值成正比;综合起来,积分时间就与输入模拟量成正比。最后把积分时间转换成数字量,则该数字量就为输入模拟量对应的数字量。由于在转换过程中进行了两次积分,因此称为双重积分型。双重积分型A/D转换器的转换精度高,稳定性好,测量的是输入电压在一段时间的平均值,而不是输入电压的瞬间值,因此它的抗干扰能力强,但是转换速度慢。双重积分型A/D转换器在工业上应用比较广泛。
在这里插入图片描述

2.2. A/D 的主要指标

1、ADC 的位数
一个 n 位的 ADC 表示这个 ADC 共有 2 的 n 次方个刻度。8 位的 ADC,输出的是从 0~255 一共 256 个数字量,也就是 2 的 8 次方个数据刻度。

2、基准源
基准源,也叫基准电压,是 ADC 的一个重要指标,要想把输入 ADC 的信号测量准确,那么基准源首先要准,基准源的偏差会直接导致转换结果的偏差。比如一根米尺,总长度本应该是 1 米,假定这根米尺被火烤了一下,实际变成了 1.2 米,再用这根米尺测物体长度的话自然就有了较大的偏差。假如我们的基准源应该是 5.10V,但是实际上提供的却是 4.5V,这样误把 4.5V 当成了 5.10V 来处理的话,偏差也会比较大。

3、分辨率
分辨率是数字量变化一个最小刻度时,模拟信号的变化量,定义为满刻度量程与 2n-1 的比值。假定 5.10V 的电压系统,使用 8 位的 ADC 进行测量,那么相当于 0~255 一共 256 个刻度把 5.10V 平均分成了 255 份,那么分辨率就是 5.10/255 = 0.02V。

4、INL(积分非线性度)和 DNL(差分非线性度)
我们最容易混淆的两个概念就是“分辨率”和“精度”,认为分辨率越高,则精度越高,而实际上,两者之间是没有必然联系的。分辨率是用来描述刻度划分的,而精度是用来描述准确程度的。同样一根米尺,刻度数相同,分辨率就相当,但是精度却可以相差很大,下图表示的精度一目了然,不需多说。和 ADC 精度关系重大的两个指标是 INL(Integral NonLiner)和 DNL(Differencial NonLiner)。
在这里插入图片描述

INL 指的是 ADC 器件在所有的数值上对应的模拟值,和真实值之间误差最大的那一个点的误差值,是 ADC 最重要的一个精度指标,单位是 LSB。LSB(Least Significant Bit)是最低有效位的意思,那么它实际上对应的就是 ADC 的分辨率。一个基准为 5.10V 的 8 位 ADC,它的分辨率就是 0.02V,用它去测量一个电压信号,得到的结果是 100,就表示它测到的电压值是 100*0.02V=2V,假定它的 INL 是 1LSB,就表示这个电压信号真实的准确值是在1.98V~2.02V 之间的,按理想情况对应得到的数字应该是 99~101,测量误差是一个最低有效位,即 1LSB。

DNL 表示的是 ADC 相邻两个刻度之间最大的差异,单位也是 LSB。一把分辨率是 1 毫4米的尺子,相邻的刻度之间并不都刚好是 1 毫米,而总是会存在或大或小的误差。同理,一个 ADC 的两个刻度线之间也不总是准确的等于分辨率,也是存在误差,这个误差就是 DNL。一个基准为 5.10V 的 8 位 ADC,假定它的 DNL 是 0.5LSB,那么当它的转换结果从 100 增加到 101 时,理想情况下实际电压应该增加 0.02V,但 DNL 为 0.5LSB 的情况下实际电压的增加值是在 0.01~0.03V 之间。值得一提的是 DNL 并非一定小于 1LSB,很多时候它会等于或大于 1LSB,这就相当于是一定程度上的刻度紊乱,当实际电压保持不变时,ADC 得出的结果可能会在几个数值之间跳动,很大程度上就是由于这个原因(但并不完全是,因为还有无时无处不在的干扰的影响)。

5、转换速率
转换速率,是指 ADC 每秒能进行采样转换的最大次数,单位是 sps(或 s/s、sa/s,即 samples per second),它与 ADC 完成一次从模拟到数字的转换所需要的时间互为倒数关系。ADC 的种类比较多,其中积分型的 ADC 转换时间是毫秒级的,属于低速 ADC;逐次逼近型 ADC转换时间是微秒级的,属于中速 ADC;并行/串行的 ADC 的转换时间可达到纳秒级,属于高速 ADC。

ADC 的这几个主要指标我们先熟悉一下,对于其它的,作为一个入门级别的选手来说,先不着急深入理解。以后使用过程中遇到了,再查找相关资料深入学习,当前重点是在头脑中建立一个 ADC 的基本概念。

2.3. 典型的 A/D 转换器芯片 ADC0809

1、ADC0809 芯片概述
ADC0809 是 8 位 CMOS 逐次逼近型 A/D 转换器, 最小误差为 ±1LSB。采用单一 +5V 电源供电,工作温度范围宽。每片 ADC0809 有 8 路模拟量输入通道,带装换启停控制,输入模拟电压范围 0~+5V ,不需零点和慢刻度校准,转换时间为 100us,功耗低,约 15mW。

2、ADC0809 的引脚
ADC0809 芯片有 28 条引脚,采用双列值插式封装(DIP),如图:在这里插入图片描述
各引脚功能如下:
IN0~IN7: 8 路模拟量输入端。
D0~D7 : 8 位数字量输出端。
ADDA、ADDB、ADDC:3 位地址输入线,用于选择 8 路模拟通道中的一路,选择情况见下表

ADDCADDBADDA选择通道
000IN0
001IN1
010IN2
011IN3
100IN4
101IN5
110IN6
111IN7

ALE : 地址锁存允许信号,输入,高电平有效。
START:A/D 转换启动信号,输入,高电平有效。
EOC:A/D 装换结束信号,输出。当启动装换时,该引脚为低电平,当 A/D 转换结束时,该引脚输出高电平。

由于 ADC0809 为 8 位逐次逼近型 A/D 转换器,从启动装换到转换结束的时间固定为 8 个 CLK 时钟,因此 EOC 信号的时间也固定为 8 个 CLK 时钟。 

OE : 数据输出允许信号,输入,高电平有效。当转换结束后,如果从该引脚出入高电平,则打开输出三态门,输出锁存器的数据从 D0~D7。
CLK:时钟脉冲输入端。要求时钟频率不高于 640 KHZ。
VREF+、VREF- :基准电压输入端。多数情况下,VREF+ 接 +5V ,VREF- 接 GND。
VCC:电源,接 +5V 电源。
GND: 地(0V)。

3、ADC0809 的工作流程
如图:
在这里插入图片描述

  1. 给 ADC0809 输入 3 位地址,并使 ALE = 1 ,将地址存入地址锁存器中,经地址译码器从 8
    路模拟通道中选择一路模拟量送入比较器。(即选择把大象关到哪个冰箱里)
  2. 给 ADC0809 的 START 送一高电平脉冲,当 START 的上升沿使逐次逼近寄存器复位,下降沿启动 A/D
    转换,并使 EOC 信号为输出高电平。(即打开冰箱门,准备将大象关入冰箱)
  3. 当 ADC0809 转换结束时,转换的结果送入三态输出锁存器,并使 EOC 信号回到高电平,通知 CPU 转换结束。(即关上冰箱门)
  4. CPU 给 OE 送高电平,ADC0809 三态输出锁存器的数据输出到 D0~D7 端以供 CPU
    读取。(即告诉我们大象已经被关进冰箱啦)

4、ADC0809 的工作方式
根据读入转换结果的处理方法,ADC0809 的使用工作方式可以分为三种:

  1. 延时方式:连接时 EOC 悬空,启动转换后延时 100us,跳过转换时间后在读入转换结果。
  2. 查询方式:EOC 接单片机并口线,启动转换后,查询单片机并口线,如果变为高电平,说明转换结束,则读入转换结果。
  3. 中断方式:EOC 经非门接入单片机的中断请求端,将转换结束信号作为中断请求信号向单片机提出中断请求,中断后执行中断服务程序,在中断服务中读入转换结果。

本文以工作方式一进行实验讲解。

2.4. 实验

在这里插入图片描述
首先在 Proteus 8 Professional 中建立如上图所示的原理图,实验要求:当输入模拟 2.5V 电压输入时,A/D 转换得出数字量 7FH,并在数码管中显示出来。
代码:

#include <AT89X51.h>
void main()
{
	while (1)
	{
		P2_5 = 0;P2_5 = 1;P2_5 = 0; 
		while (P2_7 == 0)
		{
		 P2_6 = 1;P1 = P3;
		}
		
	}
}

3. D/A 转换

3.1 D/A 的基本概念

D/A 是数字量到模拟量的转换,依靠的是数模转换器(Digital to Analog Converter),简称 DAC。

如果一个 8 位的 D/A,从 0~255,代表了 0~2.55V 的话,那么我们用单片机给发送 100,D/A 引脚就会输出一个 1V 的电压,发送 200 就输出一个 2V 的电压,很简单。

3.2. D/A 的重要指标

参考 2.2 A/D 的重要指标,因为两者只是转换方向不一样而已。

3.3. 典型的 D/A 转换芯片 DAC0832

3.3.1. DAC0832 芯片概述

DAC0832 是采用 CMOS 工艺制造的电流型 8 位 T 形电阻解码网络 D/A 转换芯片,是 DAC0830 系列的一种,分辨率 8 位,满刻度误差 ±1LSB ,线性误差 ±0.5%, 建立时间为 1us ,功耗 20mW 。

3.3.2. DAC0832 的内部结构

DAC0832 的内部结构如下图所示,主要由 8 位输入寄存器、8 位 DAC 寄存器、8 位 D/A 转换器和控制逻辑电路组成。
在这里插入图片描述
其中:8 位输入寄存器接收从外部发送来的8位数字量,锁存于内部的锁存器中,8 位 DAC 寄存器从 8 位输入寄存器中接收数据,并能把接收的数据锁存于它内部的锁存器,8 位 D/A 转换器对 8 位DAC 寄存器发送来的数据进行转换,转换的结果通过 Iout1 和 Iout2 输出。8 位输入寄存器和 8 位 DAC 寄存器都分别有自己的控制端 LE1’ 和 LE2’ ,LEI’ 和 LE2’ 通过相应的控制逻辑电路控制。通过它们,DAC0832 可以很方便地实现双缓冲、单缓冲或直通方式处理。

3.3.3. DAC0832 的引脚

DAC0832 芯片有 20 条引脚,采用双列值插式封装(DIP),如图:
在这里插入图片描述
各引脚功能如下:
DI0-DI7(DI0 为最低位):8 位数字输入端。
ILE:数据允许控制输入线,高电平有效。
CS’: 片选信号。
WR1’:写信号线1。
WR2’:写信号线2。
XFER’: 数据传送控制信号输入线,低电平有效。
RFB:片内反馈电阻引出线,反馈电阻集成在芯片内部,该电阻与内部的电阻网络相匹配。RFB 端一般直接接到外部运算放大器的输出端,相当于将反馈电阻接在运算放大器的输入端和输出端之间,将输出的电流转换为电压输出。
Iout1:模拟电流输出线 1,它是数字量输入为 “1” 的模拟电流输出端。当输入数字量为全 1 时,其值最大,约为 VREF;当输入数字量为全 0 时,其值最小,为 0。
Iout2:模拟电流输出线2,它是数字量输入为“0”的模拟电流输出端。当输入数字量为全 0 时,其值最大,约为 VREF;当输入数字量为全1时,其值最小,为0。Iout1 加 Iout2 等于常数 (VREF) 。采用单极性输出时,Iout2常常接地。
VREF:基准电压输入线。电压范围为-10V~+10V。
VCC:工作电源输入端,可接+5V~+15V电源。
AGND:模拟地。
DGND:数字地。

3.3.4. DAC0832 的工作方式

通过改变引脚ILE、WRI、WR2、CS和XFER的连接方法。DAC0832具有直通方式、单缓冲方式和双缓冲方式3种工作方式。

  1. 直通方式:当引脚 WRI’、WR2’、CS’、XFER’ 直接接地时,ILE 接电源,DAC0832 工作于直通方式下,此时,8 位输入寄存器和 8 位DAC寄存器都直接处于导通状态,当 8 位数字量一到达 DI0~DI7,就立即进行 D/A 转换,从输出端得到转换的模拟量。这种方式处理简单,但 DI0~DI7 不能直接和 MCS-51 单片机的数据线相连,只能通过独立的 IO 接口来连接。
  2. 单缓冲方式:通过连接 ILE、WRI’、WR2’、CS’ 和 XFER’ 引脚,使得两个寄存器中的一个处于直通状态,另一个处于受控制状态,或者两个同时被控制,DAC0832 就工作于单缓冲方式。对于单缓冲方式,单片机只需对它操作一次,就能将转换的数据送到 DAC0832 的 DAC 寄存器,并立即开始转换,转换结果通过输出端输出。
  3. 双缓冲方式:当 8 位输入寄存器和 8 位 DAC 寄存器分开控制导通时,DAC0832 工作于双缓冲方式,此时单片机对 DAC0832 的操作先后分为两步:第一步,使 8 位输入寄存器导通,将 8 位数字量写入 8 位输入寄存器中;第二步,使 8 位 DAC 寄存器导通,8 位数字量从 8 位输入寄存器送入 8 位 DAC 寄存器。第二步只使 DAC 寄存器导通,在数据输入端写入的数据无意义。

3.4. 实验

在这里插入图片描述
首先在 Proteus 8 Professional 中建立如上图所示的原理图,实验要求:输出正弦信号。
代码:

#include <AT89X51.H>
#include <math.h>
#define PI 3.1415926
float i = 0;
void delay(unsigned int n){while(n --);}
void main(){
	while(1){
		P1 = 126 * (sin(i)+1);
		delay(5);
		i += 0.001;
		if (i >= 2 * PI)
			i = 0;	
	}
}

相关文章:

  • 【毕业设计】 单片机自动写字机器人设计与实现 - 物联网 嵌入式 stm32
  • 花边新闻获取易语言代码
  • HTML5入门(1)——HTML基础
  • 计算机网络体概念
  • redis底层都有哪些数据结构?带你了解redis是如何存储数据的
  • 通道分离与合并、彩色图转换为灰度图、二值化
  • C语言经典算法实例4:判断回文数
  • 基于php+mysql的菜品食谱美食网
  • upload-labs靶场通关指南(第1-3关)
  • Android Studio 利用系统签名打包apk
  • 升级打怪课堂的题库更新了!
  • Excel·VBA数组排列函数
  • 高级程序员项目经理写好代码必备的三条基本素质;以及代码的现象和本质问题解读;
  • 猿创征文|多模态图像合成和编辑(MISE):Multimodal Image Synthesis and Editing: A Survey
  • 网络与信息安全基础知识-- Internet及应用
  • Apache的80端口被占用以及访问时报错403
  • fetch 从初识到应用
  • java2019面试题北京
  • Javascript设计模式学习之Observer(观察者)模式
  • React中的“虫洞”——Context
  • 工作手记之html2canvas使用概述
  • 如何用Ubuntu和Xen来设置Kubernetes?
  • 世界上最简单的无等待算法(getAndIncrement)
  • 线性表及其算法(java实现)
  • 异步
  • nb
  • 7行Python代码的人脸识别
  • ​Z时代时尚SUV新宠:起亚赛图斯值不值得年轻人买?
  • #Lua:Lua调用C++生成的DLL库
  • #pragam once 和 #ifndef 预编译头
  • (31)对象的克隆
  • (LNMP) How To Install Linux, nginx, MySQL, PHP
  • (solr系列:一)使用tomcat部署solr服务
  • (附源码)spring boot基于Java的电影院售票与管理系统毕业设计 011449
  • (附源码)springboot助农电商系统 毕业设计 081919
  • (附源码)计算机毕业设计SSM智慧停车系统
  • (原創) 系統分析和系統設計有什麼差別? (OO)
  • (转)ABI是什么
  • (转)Unity3DUnity3D在android下调试
  • (转)机器学习的数学基础(1)--Dirichlet分布
  • ***利用Ms05002溢出找“肉鸡
  • .java 9 找不到符号_java找不到符号
  • .NET 应用架构指导 V2 学习笔记(一) 软件架构的关键原则
  • .NET下ASPX编程的几个小问题
  • @Documented注解的作用
  • @FeignClient注解,fallback和fallbackFactory
  • @font-face 用字体画图标
  • @Repository 注解
  • [ CTF ] WriteUp-2022年春秋杯网络安全联赛-冬季赛
  • [ 网络基础篇 ] MAP 迈普交换机常用命令详解
  • [.NET]桃源网络硬盘 v7.4
  • [20170705]lsnrctl status LISTENER_SCAN1
  • [AUTOSAR][诊断管理][ECU][$37] 请求退出传输。终止数据传输的(上传/下载)
  • [C语言]——C语言常见概念(1)
  • [Excel VBA]单元格区域引用方式的小结