51单片机学习笔记(十) - AD/DA转换

2023-11-11


一、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实现的原理。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

51单片机学习笔记(十) - AD/DA转换 的相关文章

  • C++指针的用法/指针与引用的区别

    指针的简介 计算机程序本质上是对存储在内存中的数据进行的一系列操作 既然要对数据进行操作 首先要解决的第一个问题就是数据存储在什么地方 一般情况下我们通过int x 10 来定义一个变量 可以通过x来直接访问该变量存储的值 而指针提供了另外
  • 启动和关闭ADB服务(adb start-server和adb kill-server)

    经作者测试 模拟器在运行一段时间后 adb服务有可能 在Windows进程中可找到这个服务 该服务用来为模拟器或通过USB数据线连接的真机服务 会出现异常 这时需要重新对adb服务关闭和重启 当然 重启Eclipse可能会解决问题 但那比较
  • C语言

    1024G 嵌入式资源大放送 包括但不限于C C 单片机 Linux等 关注微信公众号 嵌入式大杂烩 回复1024 即可免费获取 函数指针有两种常用的用法 一种是作为结构体成员 关于函数指针作为结构体成员的用法可移步至上一篇 C语言笔记 函
  • javascript 对象的定义(JS中定义类的方式有很多种)

    javascript 对象的定义 2007 04 19 21 47 43 个人分类 JS javascr pt 对象的定义 JS中定义类的方式有很多种 1 工厂方式 function Car var car new Object ocar

随机推荐

  • 亲测!纯净不限速的驱动大师

    哈喽 大家好 最近又发现一个宝贝级的电脑驱动下载安装 360驱动大师 是不是有小伙伴要骂我了 先等等 等你看完小编的亲测结果 你就知道他的香了 一提到360呀 感觉大家对他的影响都不太好 因为在日常生活中它总会给我们带来莫名其妙的弹窗烦恼
  • 《数据挖掘导论》学习笔记-特征创建

    根据原有的属性我们可以创建出新的属性集 而且新的属性数目可能少于原有的属性数目 也就是降维 创建新的属性的方法有三种 特征提取 映射数据到新的空间 特征构造 1 特征提取 定义 根据原有的数据自己创建新的属性集 有的数据的属性是非常多的 而
  • 高频交易系统为何都是基于C++开发的?

    我开源过一个高频框架 说一下高频框架做的事 你就知道为什么要用C 了 高频并不是并发有多少 其实是追求的低延时 如果从网络协议开始优化 可以使用RDMA可编程网卡硬件 也可以使用DPDK这种网卡旁路技术 我们暂且不关注操作系统以下层面的优化
  • 【gmock】Google Mock 入门

    目录 1 概述 1 1 什么是Mock 1 2 Google Mock概述 1 3 参考文档 2 Google Mock使用 2 1 最简单的例子 2 2 典型的流程 2 3 自定义方法 成员函数的期望行为 2 4 Matcher 匹配器
  • Java EE之idea创建和运行jsp项目

    1 点击打开Inteliij点击Create New Project 2 点击java 再左侧Project SDK选择安装的jdk路径 勾选WebApplication和Create web xml 点击next 4 再新弹出的窗口中 P
  • java包装类自动拆装箱(AutoBoxing)及128陷阱详解

    java包装类自动拆装箱 AutoBoxing 及128陷阱详解 注意 java5之前拆装箱是需要手动完成的 java5之后可以自动的完成 1 装箱 装箱 把基本类型转成对象包装类型 方式一 Integer i Integer valueO
  • Unity3D学习之(习题练习)

    Unity3D学习之 习题拓展 1 使用continue计算1 3 5 99 从上述运算中可以看出 1到99之的奇数相加的和 首先要定义一个int sum 0 从题意可知要用到for循环 for int i 1 i lt 100 i 然后题
  • 爬虫数据提取-正则表达式re提取网页数据信息

    经过上一期我们介绍了xpath和beautifulsoup4提取数据之后 本章我们介绍一种新的提取数据的方法 就是正则表达是提取数据 首先我们介绍什么是正则表达式 正则表达式就是按照一定的规则 从某个字符串中匹配出想要的数据 这个规则就是正
  • PCB各层的含义 (solder paste 区别) 分类: 硬件相关 ...

    PCB层的定义 阻焊层 solder mask 是指板子上要上绿油的部分 因为它是负片输出 所以实际上有solder mask的部分实际效果并不上绿油 而是镀锡 呈银白色 助焊层 paste mask 是机器贴片时要用的 是对应所有贴片元件
  • 前端能力八大等级,每一级附送晋升方法

    文章目录 一 入门级 选秀阶段 能够解决一些问题 怎么进阶 二 解决问题 常在阶段 本阶段特征 进阶之路 三 优化方案 贵人阶段 特征 提升之路 四 全局观 嫔位 特征 提升之路 五 深度 妃位 特征 进阶 六 广度 贵妃 特征 晋升 七
  • 微信小程序开发——map地图组件,定位,并手动修改位置偏差。

    环境搭建 注册 获取APPID 没有这个不能真鸡调试 下载微信web开发者工具 挺多bug 将就用 打开微信web开发者工具 扫码登录 新建小程序 输入APPID 勾选创建quick start项目 工程结构 可以看到工程根目录中有个app
  • HTTP长连接、短连接使用及测试

    概念 HTTP短连接 非持久连接 是指 客户端和服务端进行一次HTTP请求 响应之后 就关闭连接 所以 下一次的HTTP请求 响应操作就需要重新建立连接 HTTP长连接 持久连接 是指 客户端和服务端建立一次连接之后 可以在这条连接上进行多
  • 一文秒懂什么是DDoS攻击

    关注 开源Linux 选择 设为星标 回复 学习 有我为您特别筛选的学习资料 DDoS攻击是目前最常见的网络攻击方式之一 其见效快 成本低的特点 让DDoS这种攻击方式深受不法分子的喜爱 DDoS攻击经过十几年的发展 已经 进化 的越来越复
  • Centos7安装lvs——即安装lvs的管理软件ipvsadm

    1 验证当前linux是具备lvs功能 root nginx master ipvsadm 出现上面的错误提示 就证明当前虚拟机不具备实现lvs的功能 2 安装ipvsadm 因为lvs的具体实现是由这个程序来实现的 2 1 检查内核版本
  • Windows应急响应

    账户排查 账户排查主要包含以下几个维度 登录服务器的途径 弱口令 可疑账号 新增账号 隐藏账号 克隆账号 服务器是否存在被远程登录的途径 3389 smb 445 http ftp 数据库 中间件 弱口令排查维度与上述服务器登录一样 弱口令
  • cgi环境变量

    原文地址 http blog sina com cn s blog 65403f9b0100gpt2 html REOUEST METHOD 这个环境变量指出服务器与CGI程序之间的信息传递方式 一般包括两种 POST和GET 这个环境变量
  • 接口测试常用测试点

    接口测试是测试系统组件间接口的一种测试 接口测试主要用于检测外部系统与系统之间以及内部各个子系统之间的交互点 测试的重点是要检查数据的交换 传递和控制管理过程 以及系统间的相互逻辑依赖关系等 测试的策略 接口测试也是属于功能测试 所以跟我们
  • 如何在Android中以编程方式将HTML转换为PDF?

    在各种情况下 您可能需要将HTML页面转换为PDF格式 另一方面 您可能希望从WYSIWYG HTML编辑器的内容生成PDF 对于这种情况 本文介绍如何在Android应用程序中以编程方式将HTML转换为PDF 此外 还将了解用于自定义HT
  • 微信小程序_0

    微信小程序 0 基础库更新日志 开发者工具更新日志 微信云开发 小程序基础库更新日志 云开发部分 wx server sdk 更新日志 IDE 云开发 云控制台更新日志
  • 51单片机学习笔记(十) - AD/DA转换

    文章目录 一 AD DA基本介绍 二 A D D A转换中的主要概念 三 A D D A转换在系统中存在的方式 四 A D转换原理图及ET2046芯片介绍 1 原理图 2 ET2046芯片介绍 3 开发板接线 五 ET2046芯片SPI时序