51单片机学习笔记(十) - AD/DA转换_et2046-程序员宅基地

技术标签: 学习  笔记  51单片机  


一、AD/DA基本介绍

一、基本概念

  1. A是指analog、模拟的;D是指digital、数字的。
  2. 现实世界是模拟的,连续分布的;计算机世界是数字的,离散分布的,是可以被分成有限份的;
  3. AD转换就是把一个物理量从模拟的转换成数字的;DA就是将数字量转换成模拟量。

二、A/D转换的意义

  1. 自然界多数是模拟量,而计算机计算只能是数字量,所以为了借助计算机的工具研究计算模拟量,就需要将模拟量转换成计算机能识别的数字量;
  2. D/A是A/D转换的逆过程,是计算机将数字量转换成模拟量输出,但是此种模拟量严格意义上也不是连续的,也是可以分为有限份数的。
  3. A/D,D/A转换可以理解为数字量和模拟量的一个通信。也可以理解为物理世界和数字世界的交流。

A/D,D/A的转换原理,在数字电路相关课程里会有更详细的介绍,在这里我们无需展开细说,只需知道如何使用即可。感兴趣可以参考数字电路相关知识。


二、A/D,D/A转换中的主要概念

  1. 位数: AD转换后转出来的数由几位二进制来表示。位数越多,越细腻,精度越高。例如:10位,代表可以将模拟量分成1024份,12位,代表可以将模拟量分成4096份;
  2. 量程:AD转换器可以接受的模拟量的范围。跟芯片制造有关系,如果超过量程,超量程部分可能会被阉割,重则将芯片烧毁;
  3. 分辨率:AD转换器转出来的二进制数,每一格表示多少。例如:10位,分辨率是1/1024,12位,分辨率是1/4096;
  4. 转换速率:就是完成一次A/D,D/A转换所耗费的时间。实际应用中,转换速率越快越好,随之成本会越高。适合项目使用即可;

举例说明:

条件:电压量程范围0-5V,A/D,D/A转换位数是10位,精度是0.01V
分辨率为:(5-0)/2exp(10)=0.00488V
例如一次A转换中数字量是1010101010,计算转换中模拟量的过程如下:
11010101010对应的十进制数是6822、数字量对应的模拟电压是[682/2exp(10)]*5V =[682/1024]*5 = 3.33V

三、A/D,D/A转换在系统中存在的方式

  • CPU外部扩展专用A/D,D/A芯片;
  • CPU内部集成A/D,D/A模块(内部外设)

早期的单片机基本都是在外部扩展,新的高级一些的单片机是内部集成的;
51单片机内部没有集成,所以使用的是外部扩展,使用ET2046芯片,并用SPI接口通信


四、A/D转换原理图及ET2046芯片介绍

1、原理图

在这里插入图片描述

2、ET2046芯片介绍

1、主要特点

  • 工作电压范围为 1.5V~5.25V
  • 支持 1.5V~5.25V 的数字 I/O 口
  • 内建 2.5V 参考电压源
  • 电源电压测量( 0V~6V)
  • 内建结温测量功能
  • 触摸压力测量
  • 采用 3 线制 SPI 通信接口
  • 具有自动省电功能

2、引脚功能说明
在这里插入图片描述
3、ET2046控制字
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3、开发板接线

1、SPI接线

  • XPT_DO -> P3^7; //SPI输出;
  • XPT_CLK -> P3^6; //SPI时钟;
  • XPY_DI -> P3^4; //SPI输入;
  • XPT_CS -> P3^5; //SPI片选。

2、模拟输入量

  • AIN0靠滑动变阻器分压变化;
  • AIN1靠热敏电阻NTC分压,温度变化电阻变化,导致分压变化;
  • AIN2靠光敏电阻分压。

五、ET2046芯片SPI时序分析

1、时序图

在这里插入图片描述

2、SPI写时序代码实现

void Et2046_Wirte_Data(unsigned char dat)
{
    
	unsigned char i;
	CLK = 0;
	_nop_();
	for(i = 0; i < 8; i++)
	{
    
		DIN = dat >> 7;               //先传高位
		dat <<= 1;                    //将低位移到高位
		CLK = 0;                     
		_nop_();
		CLK = 1;                      //CLK产生一个上升沿,写入数据
		_nop_();
	}
}

3、SPI读时序代码实现

unsigned int Et2046_Read_Data(void)
{
    
	unsigned int value = 0;
	unsigned char i;
	CLK = 0;
	_nop_();
	for(i = 0; i < 12; i++)         //12位AD,每次读取一位
	{
    
		value <<= 1;                 //注意该条语句放置的位置
		CLK = 1;
		_nop_();
		CLK = 0;                     //CLK由高到低产生一个下降沿,从而读取数据
		value |= DOUT;               //先读取高位
	}
	return value;
}

4、ET2046读取采样代码实现

unsigned int Et2046_Read_Adc_Value(unsigned char cmd)
{
    
	unsigned int adc_result = 0;
	unsigned char i = 6;
	CLK = 0;
	CS = 0;                                     //使能ET2046
	Et2046_Wirte_Data(cmd);
	while(i) i--;
	CLK = 1;                                    //发送一个时钟,清除BUSY
	_nop_();
	CLK = 0;
	adc_result = Et2046_Read_Data();
	CS = 1;                                     //关闭ET2046
	return adc_result;
}

5、一些宏定义

#define CMD_READ_AIN0 0x94          //电位器
#define CMD_READ_AIN1 0xD4          //NTC
#define CMD_READ_AIN2 0xA4          //光敏电阻
#define CMD_READ_AIN3 0xE4          //外部输入

sbit DOUT = P3^7;	  //输出
sbit CLK  = P3^6;	  //时钟
sbit DIN  = P3^4;	  //输入
sbit CS   = P3^5;	  //片选

六、D/A转换

1、基本概念

  1. 概念
    数模转换器,又称D/A转换器,简称DAC,它是把数字量转变成模拟的器件。D/A转换器基本上由4个部分组成,即权电阻网络、运算放大器、基准电源和模拟开关。模数转换器中一般都要用到数模转换器,模数转换器即A/D转换器,简称ADC,它是把连续的模拟信号转变为离散的数字信号的器件。

  2. 应用
    函数信号发生器、数字转换模拟参考信号

2、开发板原理图

在这里插入图片描述
1、通过PWM1的占空比,经过运放的积分电路,会生成不同的电压;
2、这里勉强算是一个DA,可以通过定时器和IO输出来实现,故代码省略。

总结

1、本节介绍了A/D,D/A转换的相关概念;
2、重点介绍并代码实现了SPI的时序;
3、定义局部变量的时候,最好先初始化为0;
4、简单介绍了DA实现的原理。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_41953551/article/details/132507533

智能推荐

什么是内部类?成员内部类、静态内部类、局部内部类和匿名内部类的区别及作用?_成员内部类和局部内部类的区别-程序员宅基地

文章浏览阅读3.4k次,点赞8次,收藏42次。一、什么是内部类?or 内部类的概念内部类是定义在另一个类中的类;下面类TestB是类TestA的内部类。即内部类对象引用了实例化该内部对象的外围类对象。public class TestA{ class TestB {}}二、 为什么需要内部类?or 内部类有什么作用?1、 内部类方法可以访问该类定义所在的作用域中的数据,包括私有数据。2、内部类可以对同一个包中的其他类隐藏起来。3、 当想要定义一个回调函数且不想编写大量代码时,使用匿名内部类比较便捷。三、 内部类的分类成员内部_成员内部类和局部内部类的区别

分布式系统_分布式系统运维工具-程序员宅基地

文章浏览阅读118次。分布式系统要求拆分分布式思想的实质搭配要求分布式系统要求按照某些特定的规则将项目进行拆分。如果将一个项目的所有模板功能都写到一起,当某个模块出现问题时将直接导致整个服务器出现问题。拆分按照业务拆分为不同的服务器,有效的降低系统架构的耦合性在业务拆分的基础上可按照代码层级进行拆分(view、controller、service、pojo)分布式思想的实质分布式思想的实质是为了系统的..._分布式系统运维工具

用Exce分析l数据极简入门_exce l趋势分析数据量-程序员宅基地

文章浏览阅读174次。1.数据源准备2.数据处理step1:数据表处理应用函数:①VLOOKUP函数; ② CONCATENATE函数终表:step2:数据透视表统计分析(1) 透视表汇总不同渠道用户数, 金额(2)透视表汇总不同日期购买用户数,金额(3)透视表汇总不同用户购买订单数,金额step3:讲第二步结果可视化, 比如, 柱形图(1)不同渠道用户数, 金额(2)不同日期..._exce l趋势分析数据量

宁盾堡垒机双因素认证方案_horizon宁盾双因素配置-程序员宅基地

文章浏览阅读3.3k次。堡垒机可以为企业实现服务器、网络设备、数据库、安全设备等的集中管控和安全可靠运行,帮助IT运维人员提高工作效率。通俗来说,就是用来控制哪些人可以登录哪些资产(事先防范和事中控制),以及录像记录登录资产后做了什么事情(事后溯源)。由于堡垒机内部保存着企业所有的设备资产和权限关系,是企业内部信息安全的重要一环。但目前出现的以下问题产生了很大安全隐患:密码设置过于简单,容易被暴力破解;为方便记忆,设置统一的密码,一旦单点被破,极易引发全面危机。在单一的静态密码验证机制下,登录密码是堡垒机安全的唯一_horizon宁盾双因素配置

谷歌浏览器安装(Win、Linux、离线安装)_chrome linux debian离线安装依赖-程序员宅基地

文章浏览阅读7.7k次,点赞4次,收藏16次。Chrome作为一款挺不错的浏览器,其有着诸多的优良特性,并且支持跨平台。其支持(Windows、Linux、Mac OS X、BSD、Android),在绝大多数情况下,其的安装都很简单,但有时会由于网络原因,无法安装,所以在这里总结下Chrome的安装。Windows下的安装:在线安装:离线安装:Linux下的安装:在线安装:离线安装:..._chrome linux debian离线安装依赖

烤仔TVの尚书房 | 逃离北上广?不如押宝越南“北上广”-程序员宅基地

文章浏览阅读153次。中国发达城市榜单每天都在刷新,但无非是北上广轮流坐庄。北京拥有最顶尖的文化资源,上海是“摩登”的国际化大都市,广州是活力四射的千年商都。GDP和发展潜力是衡量城市的数字指...

随便推点

java spark的使用和配置_使用java调用spark注册进去的程序-程序员宅基地

文章浏览阅读3.3k次。前言spark在java使用比较少,多是scala的用法,我这里介绍一下我在项目中使用的代码配置详细算法的使用请点击我主页列表查看版本jar版本说明spark3.0.1scala2.12这个版本注意和spark版本对应,只是为了引jar包springboot版本2.3.2.RELEASEmaven<!-- spark --> <dependency> <gro_使用java调用spark注册进去的程序

汽车零部件开发工具巨头V公司全套bootloader中UDS协议栈源代码,自己完成底层外设驱动开发后,集成即可使用_uds协议栈 源代码-程序员宅基地

文章浏览阅读4.8k次。汽车零部件开发工具巨头V公司全套bootloader中UDS协议栈源代码,自己完成底层外设驱动开发后,集成即可使用,代码精简高效,大厂出品有量产保证。:139800617636213023darcy169_uds协议栈 源代码

AUTOSAR基础篇之OS(下)_autosar 定义了 5 种多核支持类型-程序员宅基地

文章浏览阅读4.6k次,点赞20次,收藏148次。AUTOSAR基础篇之OS(下)前言首先,请问大家几个小小的问题,你清楚:你知道多核OS在什么场景下使用吗?多核系统OS又是如何协同启动或者关闭的呢?AUTOSAR OS存在哪些功能安全等方面的要求呢?多核OS之间的启动关闭与单核相比又存在哪些异同呢?。。。。。。今天,我们来一起探索并回答这些问题。为了便于大家理解,以下是本文的主题大纲:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JCXrdI0k-1636287756923)(https://gite_autosar 定义了 5 种多核支持类型

VS报错无法打开自己写的头文件_vs2013打不开自己定义的头文件-程序员宅基地

文章浏览阅读2.2k次,点赞6次,收藏14次。原因:自己写的头文件没有被加入到方案的包含目录中去,无法被检索到,也就无法打开。将自己写的头文件都放入header files。然后在VS界面上,右键方案名,点击属性。将自己头文件夹的目录添加进去。_vs2013打不开自己定义的头文件

【Redis】Redis基础命令集详解_redis命令-程序员宅基地

文章浏览阅读3.3w次,点赞80次,收藏342次。此时,可以将系统中所有用户的 Session 数据全部保存到 Redis 中,用户在提交新的请求后,系统先从Redis 中查找相应的Session 数据,如果存在,则再进行相关操作,否则跳转到登录页面。此时,可以将系统中所有用户的 Session 数据全部保存到 Redis 中,用户在提交新的请求后,系统先从Redis 中查找相应的Session 数据,如果存在,则再进行相关操作,否则跳转到登录页面。当数据量很大时,count 的数量的指定可能会不起作用,Redis 会自动调整每次的遍历数目。_redis命令

URP渲染管线简介-程序员宅基地

文章浏览阅读449次,点赞3次,收藏3次。URP的设计目标是在保持高性能的同时,提供更多的渲染功能和自定义选项。与普通项目相比,会多出Presets文件夹,里面包含着一些设置,包括本色,声音,法线,贴图等设置。全局只有主光源和附加光源,主光源只支持平行光,附加光源数量有限制,主光源和附加光源在一次Pass中可以一起着色。URP:全局只有主光源和附加光源,主光源只支持平行光,附加光源数量有限制,一次Pass可以计算多个光源。可编程渲染管线:渲染策略是可以供程序员定制的,可以定制的有:光照计算和光源,深度测试,摄像机光照烘焙,后期处理策略等等。_urp渲染管线

推荐文章

热门文章

相关标签