【STC单片机学习】第十六课:AD和DA转换

发布者:SerendipityGlow最新更新时间:2022-08-16 来源: csdn关键字:STC单片机  DA转换 手机看文章 扫描二维码
随时随地手机看文章

第一部分、章节目录

1.16.1.AD转换及其相关背景知识


1.16.2.原理图和数据手册


1.16.3.结合例程分析时序


1.16.4.代码实践


1.16.5.串口直接显示电压值


1.16.6.DA转换


第二部分、章节介绍

1.16.1.AD转换及其相关背景知识1

    本节对整个课程做介绍,并且主要讲了模拟量和数字量这两个概念以及AD转换相关概念,

    主要是量程、精确度、分辨率、位数、转换速度等,并且举例说明了这些课程的联系。

1.16.2.原理图和数据手册

    本节看原理图、确定接线,并且对照数据手册查看其中的关键点。

1.16.3.结合例程分析时序

    本节重点分析数据手册中的时序图,并且通过对照官方例程来对比学习。

1.16.4.代码实践

    本节参考官方例程来建立工程、写时序代码,通过 ADC 转换电路采集电位器电压值,将采集转换后的 AD 值通过串口显示。

1.16.5.串口直接显示电压值

    本节对串口输出部分进行调整,使之直接显示电压值,这种方式可以使调试和输出更加直观

1.16.6.DA转换

    本节讲解DA转换的概念,以及开发板原理图中DA转换的演示原理、实例代码等。


第三部分、随堂记录

1.16.1.AD转换及其相关背景知识

1.16.1.1、基本概念

(1)什么是AD转换?A(A,analog,模拟的,D,digital,数字的<二进制的>)


模拟量:现实世界是模拟的,连续分布的,无法被分成有限份;例如,声音、电压、温度、电流等

数字量:计算机能够处理的物理量,计算机世界是数字的,离散分布的,是可以被分成有限份的;

AD转换就是从模拟量转化成数字量。例如:电压在现实中是个连续量,在计算机中是个数字量,只不过精度不一样!

下面这张图介绍了AD和DA转换

实现AD转换的电路叫作模数转换器,也是ADC(Analog-digital converter)

(3)什么情况下需要AD转换?

就是我们研究数据是模拟量的时候,比如说:重力、温度、声音等等


1.16.1.2、AD转换中的主要概念


(1)数字位数:模拟量转换成的数字量用多少位二进制数表示。位数越多精度越高,位数越少表示的精度就越低。

(2)量程:模拟量输入范围,模拟量的范围是AD芯片本身的一个参数。实际工作时给AD的电压信号不能超过这个电压范围。

(3)分辨率,数字位数越多,则每个格子表示的电压值越小,将来算出来的模拟电压值就越精确,分辨率越高。


分辨率 = 量程/(2^位数)

(3)精度,简单理解就是转换出来到底有多准,这个和数字位数有关联,精度越高,说明转换之后的数字量越接近于模拟量。


(5)转换速率,AD转换的时间

举个栗子:

输入电压范围0-5V,假设AD转换输出数字位数是10(把整个范围分成了1024个格子),则精度是0.1V,量程为0-5V,分辨率为:(5-0)/1024=0.00488V

譬如一次AD转换后得到的数字量是1010101010(682),则对应的电压值为:0.00488*682=3.32816V,考虑精度后为3.3V


1.16.1.3、AD转换的原理


在 A/D 转换器中,因为输入的模拟信号在时间上是连续的,而输出的数字信号代码是离散的,所以 A/D 转换器在进行转换时,必须在一系列选定的瞬间(时间坐标轴上的一些规定点上)对输入的模拟信号采样,然后再把这些采样值转换为数字量。

所以A/D转换要经历“采样保持—量化—编码”三个步骤!

(1)采样定理

采样脉冲频率为fs,输入模拟信号x(t)频率为fmax,必须满足

才能保证输出的数字信号y(t)不失真!

通常fs=(2.5-3)fmax,因为每次把采样电压转换为相应的数字量都需要一定的时间,所以在每次采样以后,必须把采样电压保持一段时间。


(2)量化

任何一个数字量的大小,都是以某个最小数量单位的整倍数来表示的。因此,在用数字量表示模拟量时,也必须把它化成这个最小数量单位的整倍数,这个转化过程就叫做量化。


最小数量单位叫作量化单位,用△表示

 既然模拟电压是连续的,那么它就不一定能被△整除,因而不可避免地会引入误差,我们把这种误差称为量化误差。在把模拟信号划分为不同的量化等级时,用不同的划分方法可以得到不同的量化误差。

一种量化单位是1/8,量化误差达△

一种量化单位是2/15,量化误差达△/2


(3)编码

n个二进制数,可以表示2^n个量化级。上面两种量化方法,量化级都是8,所以都用三位二进制数编码!


1.16.1.4、AD转换在系统中存在的方式

(1)CPU外部扩展专用AD芯片

(2)CPU内部集成AD模块(内部外设)


有的单片机直接就有模拟引脚,在内部进行AD转换!

STC51单片机是外部拓展了专用的AD芯片XPT2046 

1.16.2.原理图和数据手册

1.16.2.1、原理图和接线

ADC模块原理图:


芯片详细介绍看数据手册!xpt2046中文数据手册


(1)ADC模块和MCU接线

为了方便接线,接线如下:


CLK接P1.3:时钟信号输入

CS接P1.2  :低电平有效

DI接P1.1   :用于输入控制命令

DO接P1.0 :输出转化后的数字信号

这里相当于把三线式IO变成了DI和DO,CE变成了CS片选


(2)3种模拟电压变化原理


AINx是模拟输入接口,通过选择哪一路输入可以选择VBAT 、Temp和AUX三种信号输入模式,经过片内的控制寄存器选择后进入ADC.

根据上面原理图,不难看出:

AIN0(X+)靠滑动变阻器控制电压变化

AIN1(Y+)靠热敏电阻NTC

AIN2(VBAT)靠光敏电阻

1.16.2.2、数据手册


MCU通过DI向ADC模块发送控制字节,用来启动转换,寻址,设置 ADC 分辨率,配置和对XPT2046 进行掉电控制,转换后通过DO口输出给MCU


控制字节数据格式:



bit7:起始位S——必须为1

bit6-4:地址——(A2、A1 和 A0)选择多路选择器的现行通道(AIN0、AIN1、AIN2、AIN3)

image.png

bit3:模式选择位——设置采样位数。0表示12bit,1表示8bit,一般都用12bit

bit2:控制参考源模式——为1表示用单端模式,为0表示差分模式。此处用单端模式

bit1-0:power down模式使能,00表示使能。当PD0=0时,A2A1A0 = 011,不能再选择滑动变阻器控制电压

控制位命令初始值

image.png

于是我们不难得出,我们可以通过DI发送如下控制命令:


读AIN0:0b10010100    = 0x94    

读AIN1:0b11010100    = 0xD4    

读AIN2:0b10100100     = 0xA4

读AIN3:0b11100100    = 0xE4

1.16.3.结合例程分析时序

1.16.3.1、时序图



(1)这个时序和SPI通信-DS1302如出一辙:链接

(2)读写(和DS1302一样)


上升沿MCU写入XPT2406,先放数据,再给上升沿

下降沿MCU从XPT2406读出,在下降沿之后就可以读取到数据

(3)读写都是高位在前

(4)注意写和读的交接点BUSY时间段


用于采样保持—量化—编码

给个延时就行了!

1.16.3.2、官方例程分析

51例程22、AD和DA数码管显示AD值电位器AD值

(1)写指令SPI_Write

(2)读12位数字值SPI_Read

(3)写+读形成一个完整AD转换周期:Read_AD_Data,读取的是数字量


1.16.4.代码实践

分别使用三种信号输入模式,通过串口打印,观察得到的AD值


1.16.4.1、参考例程写代码

1.16.4.2、添加串口输出调试

1.16.4.3、实践

(1)电位器做模拟量输入源

(2)热敏电阻做模拟量输入源

(3)光敏电阻做模拟量输入源

1.16.5.串口直接显示电压值

1.16.5.1、关键点

(1)直接显示电压值,而不是采样AD值


电压值 = (AD_Val/4096)*5000mV = 1.22*val mV

上面的电压值本质上还是AD值,要转成对应的ASCII码再去发送

void uart_send_vol(u16 val)

{

float index = 1.22;

float voltage = index * (float)val;

u16 vol_display = (u16)voltage;

u8 str[4];

u8 i = 0;

//取出个十百千位

for(i = 0;i<4;i++)

{

str[i] = vol_display%10;

vol_display = vol_display/10;

}

for(i = 0;i<4;i++)

{

uart_send_byte(str[3-i]+48);

if(i==0)

uart_send_byte('.');

_nop_();

}

uart_send_byte('V');

}


(2)以文本方式显示,而不是十六进制方式

完整程序:AD串口打印 


1.16.6.DA转换

1.16.6.1、DA转换相关概念

(1)何为DA转换

数字量——>模拟量

(2)DA转换的意义和用途(函数信号发生器)

(3)DA转换的原理


数字量是二进制代码数位组合而来的,每位都有一定的权重,在D/A转换中,怎么样把这些权重以合适的方法表示出来是转换的关键为了让数字量转换成模拟量,必须将每一位代码按其权重的大小转换为相应的模拟量,然后再把这些模拟量相加。D/A转换的示意图如下:

在这里插入图片描述

即输入相应的二进制数,得出一个模拟量的输出,而作为一个三位的转换,模拟量与数字量的对应关系可以用下图来表示。在右图中D分别对应了相应的V0

在这里插入图片描述

1.16.6.2、原理图和案例分析

(1)运算放大器(放大+隔离)

(2)PWM数字信号

(3)其实不接LM358,直接用IO口连接LED实验现象也一样的

(4)真正的DA一般是专用芯片或者CPU内置模块,给数字值输出平滑模拟量

关键字:STC单片机  DA转换 引用地址:【STC单片机学习】第十六课:AD和DA转换

上一篇:【STC单片机学习】第十七课:LCD1602显示器
下一篇:【STC单片机学习】第十五课:I2C通信-EEPROM

推荐阅读最新更新时间:2024-11-01 11:36

51单片机的AD/DA转换
一、A/D(模数)、D/A(数模)转换 (一)、引脚 AOUT:模拟输出 Vref:参考电压 AGND:模拟地 EXT:接地 OSC:悬空 SCL,SDA:IIC AIN0、AIN1、AIN2:模拟输入口 (二)、电路图 从电路图可以看出,A0,A1,A2接地,所以当写入的时候地址应该是0X90,读取的时候应该是0X91 (三)、AGND和DGND 模拟地和数字地隔离开,消除干扰 (四)、控制字节 (五)、AD读数据函数 #include reg52.h #include delay.h #include iic.h #define SUCC 1 #define FAIL 0 unsigned char
[单片机]
3V单电源工作的12位AD转换电路图
3V单电源工作的12位AD转换电路图
[模拟电子]
3V单电源工作的12位<font color='red'>AD</font>转换电路图
低电压轨-轨运算放大器AD8517/AD8517
    摘要: AD8517/AD8527是美国AD公司出品的轨-轨运算放大器。它体积小,功耗低,并具有宽带轨-轨输出,故可广泛应用于便携通讯、有源滤波器及ASIC输入驱动等领域。文中介绍了AD8517/AD8527的引脚功能、工作原理和几种实际应用电路。     关键词: 轨-轨输出 宽带 低功耗 AD8517 AD8527 1 概述 AD8517/AD8527是美国AD公司的出口的轨-轨运算放大器。AD8517采用单通道SOT-23-5封装;而AD8527则为双通道8脚MSOP封装。由于AD8517/AD8527体积小巧,因此可以应用在传感器附近,以减少外部干扰的引入。 AD8517/AD8527
[半导体设计/制造]
采用AD590数字温度计电路设计
   电路工作原理: 本电路是通过应用AD590专用集成温度传感器制成的温度计,具有结构简单、使用可靠、精度高的特点,100V的交流电压通过变压器T1、整流桥堆UR和电容器C1后,得到一直流电压,再通过可调稳压器电路μA723C为温度传感器AD590提供稳定的工作电压。 AD590温度传感器是一种新型的电流输出型温度传感器,由多个参数相同的三极管和电阻构成。当传感器两端加有某一特定的直流工作电压时,如果该温度传感器的的温度1摄氏度时,则传感器的输出电流变化1μA。 传感器的变化电流通过电阻器R5和可变电阻器RP2,转换为电压信号,输出到数字表头,通过数字表显示出温度的变化。集成电路IC选用AD590型温度传感器。本电路其它元器件没
[电源管理]
采用<font color='red'>AD</font>590数字温度计电路设计
STC单片机控制BH1750测量光照强度程序
#include reg51.h #include intrins.h bit write=0; sbit SDA=P2^0; sbit SCL=P2^1; typedef unsigned char BYTE; BYTE BUF ; unsigned char num; unsigned char a,b,sec,count; unsigned char ge,shi,bai,qian,wan; //显示变量 int dis_data,dis_data1; //变量 void conversion(unsigned int temp_data) //
[单片机]
<font color='red'>STC单片机</font>控制BH1750测量光照强度程序
F103ZE通过FSMC读AD7606数据
因为项目需求需要做个高速模拟量采集,然后就买了一套德飞莱的F429开发板,准备降低成本改用F103来做。 改写的F103ZE通过FSMC读AD7606程序,改写到一半项目暂缓了,做个笔记先…… //初始化FSMC相关功能 //初始化FSMC相关功能 void AD7606_FSMC_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; FSMC_NORSRAMInitTypeDef FSMC_NORSRAMInitStructure; FSMC_NORSRAMTimingInitTypeDef readWriteTiming; //FSMC_NORSRA
[单片机]
F103ZE通过FSMC读<font color='red'>AD</font>7606数据
ADI双通道、16位数模转换器AD9122
AD9122是一款双通道、16位、高动态范围数模转换器(DAC),提供1200 MSPS采样速率,可以产生最高达奈奎斯特频率的多载波。它具有针对直接变频传输应用进行优化的特性,包括复数数字调制以及增益与失调补偿。DAC输出经过优化,可以与模拟正交调制器无缝接口,例如Analog Devices, Inc.(ADI公司)的ADL537x F-MOD系列调制器。四线式串行端口接口允许对许多内部参数进行编程和回读。满量程输出电流可以在8.7 mA至31.7 mA范围内进行编程。该器件采用72引脚LFCSP封装。 产品聚焦 利用超低噪声与交调失真(IMD)特性,从基带到高中频的宽带信号可以实现高质量合成。 专有DA
[模拟电子]
ADI 推出多通道高速 AD 9257系列
Analog Devices Inc. (ADI),全球领先的高性能信号处理解决方案供应商,最近宣布其市场领先的数据转换器( http://www.analog.com/zh/pr1128/data_converter_leadership )产品系列新增四款高速 模数转换器(ADC) ( http://www.analog.com/zh/pr1128/adc ):两款8通道转换器和两款4通道转换器。这些转换器专为医疗成像和通信应用而设计,具有高通道密度、低功耗和小尺寸等特性,可为系统工程师提供更高的设计灵活性和更低的每通道数据转换成本。 14位8通道 ADC AD9257( http://www.analog.com/zh/p
[模拟电子]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved