51单片机-第十四节-AD/DA(XPT2046触摸屏)

一、AD/DA介绍:

AD:模拟-数字转换,将模拟信号转换为计算机可操作的数字信号。

DA:数字-模拟转换,将计算机输出的数字信号转换为模拟信号。

二、运算放大器:

1.介绍:

(1)运算放大器(简称"运放") 是具有很高放大倍数的放大电路单元。内部集成了差分放大器、电压放大器、功率放大器三级放大电路,是一个性能完备、功能强大的通用放大电路单元,由于其应用十分广泛,现已作为基本的电路元件出现在电路图。

(2)作用:输入端有两个,作用为放大两个输入端电压的差值,一般倍数设置为无穷大倍。通过外接电阻来控制放大倍数。

(3)运算放大器电路的分析方法:虚短、虚断(负反馈条件下)。(后面介绍原理)

2.常见运放电路:

(1)电压比较器:

当IN+ > IN- ,因为放大无数倍,最大放大到电源电压,此时输出为电源电压。

当IN+ < IN- ,同理输出为GND。

 

(2)反向放大器:

Vout = - R2/R1 * Vin

因为R2将运放左右相连,且输入接在反相。

当输入为正,输出为负无穷,R2两端有电压差形成电流,平衡两端电压,使输入电压减小直至负,同理输入为负也会输出正无穷产生电压差,不断震荡直到运放两端电压相同为0,形成虚短(正相反相电压相同)。

此时运放左右为断路(虚断),电流只会经过两个电阻,根据串联分压,即得上式。 

(3)同向放大器:

Vout = ( 1 + R2/R1 ) * Vin

依然虚短,R1右侧为Vin,根据串联分压,得 Vout。

(4)电压跟随器:

Vout = Vin

作用:运放不仅有放大电压的作用,还能放大功率,提高电压的驱动能力。

三、DA原理:

1.T型电阻网络DA转换器:

V0= - (D7~D0) /256 * [ Vref * Rfb / R ]

右下角运放详见上面反向放大器即可;

从最右侧开始:I0经过的两个2R并联为R,与I1的R串联为2R,随后与I1的2R并联为R。。。。以此类推,最后整个电路的总电阻为R。

电流大小:以I0为1,则 I1 = 2 。。。I=256,为2进制数,随后通过 01 选择开关分流,根据01情况决定输出电压。

2.PWM型DA转换器:

PWM加了两个低通滤波器(两个是为了使滤波效果更好),变为稳定的电压,大小为平均电压。

V0 = (PWM占空比)* Vh(最大电压)

四、AD原理:

逐次逼近型AD转换器:

来了一个未知电压,用DAC产生一个电压,再用比较器比较,如果小了就给大点,大了就给小点。最终产生了一个电压,接近未知的模拟量。

其中,数字量的接近程度,取决于DAC的精度。

逼近过程:通常采用二分法,即先取在 1/2 处,判断大小,再取在 1/4 或 3/4 处,以此类推。放在数字量就是,从高到低,逐位判断大小,要高则1,要低则0,最后得到逼近的数字量。

五、XPT2046触摸屏控制器:

1.介绍:

XPT2046是一个触摸屏控制器,可以将触摸屏的位置,按压力度等模拟信号转换为数字信号,是一个AD转换器,并兼有其他许多功能,这里不作介绍。

我们使用时只需将AD信号,通过数据总线读取出来就好。

2.时序:SPI总线

CS:设备选择,XPT2046同时挂载多个设备,而通信线是共用的,用CS来选择与哪个设备通信。

DCLK:时钟信号,上升沿输入,下降沿输出

DIN:输入数据(对从机而言,主机对从机输入)

DOUT:输出数据,注意后面用0填充,后面要考,0的位数由MODE决定。

DIN控制位介绍:

A2-A0:选择获取什么信息的(温度,光等等),详情见代码。

MODE:决定Dout是几位。

SER/DFR:如果在触摸屏二维平面选差分,这里选单端即可。

六、实战:AD转换(XPT2046)

1.集成:

//XPT2046触摸屏AD转换器
sbit XPT2046_CS = P3 ^ 5;
sbit XPT2046_DCLK = P3 ^ 6;
sbit XPT2046_DIN = P3 ^ 4;
sbit XPT2046_DOUT = P3 ^ 7;#define XPT2046_XP_8    0x9C //这里是调A2-0的
#define XPT2046_YP_8    0xDC
#define XPT2046_VBAT_8  0xAC
#define XPT2046_AUX_8   0xEC#define XPT2046_XP_12    0x94
#define XPT2046_YP_12    0xD4
#define XPT2046_VBAT_12  0xA4
#define XPT2046_AUX_12   0xE4unsigned int XPT2046_ReadAD(unsigned char Command)
{unsigned char i;unsigned int ADVAlue = 0;XPT2046_DCLK = 0;XPT2046_CS = 0;for (i = 0; i < 8; i++){XPT2046_DIN = Command & (0x80 >> i);XPT2046_DCLK = 1;XPT2046_DCLK = 0;}for (i = 0; i < 16; i++){XPT2046_DCLK = 1;XPT2046_DCLK = 0;if (XPT2046_DOUT == 1) { ADVAlue |= (0x8000 >> i); }}XPT2046_CS = 1;if (Command & 0x08)//Command这一位决定用8位还是12位{return ADVAlue >> 8;//这里右移因为Dout后用0填充}else {return ADVAlue >> 4;}
}

2.应用:

unsigned int ADValue = 0;
void main()
{LCD_Init();LCD_ShowString(1, 1, "ADJ  NTC  RG");while (1){ADValue = XPT2046_ReadAD(XPT2046_XP_8);LCD_ShowNum(2, 1, ADValue, 3);		ADValue = XPT2046_ReadAD(XPT2046_XP_8);LCD_ShowNum(2, 5, ADValue, 3);		ADValue = XPT2046_ReadAD(XPT2046_XP_8);LCD_ShowNum(2, 9, ADValue, 3);Delay(10);}
}

七、实战:DA转换(PWM)

与上篇代码很像,可以参考上一篇理解。

sbit DA = P2 ^ 1;
unsigned char Counter, Compare, i;
void main()
{Time0_Init();while (1){for (i = 0; i < 100; i++){Compare = i;Delay(10);}		for (i = 100; i > 0; i--){Compare = i;Delay(10);}}
}
void Timer0_Routine() interrupt 1
{TH0 = 0x9C;TL0 = 0xFF;Counter++;Counter %= 100;if (Counter < Compare){DA = 1;}else{DA = 0;}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1558886.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

给网站加加速!下一代CDN(EdgeOne/边缘安全加速)使用与配置体验

随着访问量的增加和用户需求的多样化&#xff0c;服务器的带宽有限&#xff0c;面对一些图片数据&#xff0c;显得“力不从心”。CDN技术&#xff0c;就很好的解决了这个问题&#xff0c;但是价格也是用户思考的问题。 EdgeOne不仅继承了传统CDN的核心优势&#xff0c;更在速度…

uni-app 开发的应用快速构建成鸿蒙原生应用

uni-app 是一个使用 Vue.js 开发所有前端应用的框架&#xff0c;它支持编译到 iOS、Android、小程序等多个平台。对于 HarmonyOS&#xff08;鸿蒙系统&#xff09;&#xff0c;uni-app 提供了特定的支持&#xff0c;允许开发者构建鸿蒙原生应用。 一、uni-app 对 HarmonyOS 的支…

【用户管理 添加用户 超级用户 用户和组】

用户管理 添加用户超级用户用户和组 添加用户 介绍用户的管理操作 比如&#xff0c;添加一个用户 sudo useradd -m test1 其中&#xff0c;sudo表示管理员身份运行 修改用户密码 sudo passwd test1 删除用户 sudo userdel test 超级用户 1.首次使用时&#xff0c;需要给roo…

以光塑形:光固化3D打印机原理图文解析

公众号端&#xff1a; 光固化打印机介绍https://mp.weixin.qq.com/s?__bizMzkwMjc0MTE3Mw&mid2247484073&idx1&sn0d0fd026b373b06cd7c340ec8f56a006&chksmc0a1af73f7d62665a632baebbde4e5e00ffb9c6bd31bf547b4a86855d5524535619a6175a428#rd 光固化打印机…

IDEA上Mybatis介绍和使用

MyBatis是一款优秀的持久层框架&#xff0c;用于简化JDBC的开发。 创建项目 在springboot项目中添加Mybatis和MySQL依赖项。 找到数据库选项&#xff0c;点击新建 -> 数据库源&#xff0c;选择MySQL。 输入完成信息后&#xff0c;可以先进行测试&#xff0c;可以成功连接再…

逻辑回归LogisticRegression

一、逻辑回归的基础介绍 逻辑回归是一个分类模型 它可以用来预测某件事发生是否能够发生。分类问题是生活中最常见的问题&#xff1a; 生活中&#xff1a;比如预测上证指数明天是否会上涨&#xff0c;明天某个地区是否会下雨&#xff0c;西瓜是否熟了 金融领域&#xff1a;…

p20 docker自己commit一个镜像 p21 容器数据卷 p22mysql同步数据(国内镜像被封锁暂时往后放)p23具名挂载和匿名挂载

如何自己commit一个镜像 这里还是先引用一下老师的笔记 关于如何自己commit一个镜像这个问题目前因为从仓库中拉下来的Tomcat里面是没有项目的&#xff0c;所以把webapps.dist里面的拷贝到webapps里面去作为自己的镜像在commit一下 这里用Tomcat举例子首先把镜像拉取下来执…

MySql数据库---存储过程

存储过程概念 MySQL 5.0 版本开始支持存储过程。 简单的说&#xff0c;存储过程就是一组SQL语句集&#xff0c;功能强大&#xff0c;可以实现一些比较复杂的逻辑功能&#xff0c;类似于JAVA语言中的方法&#xff0c;类似Python中的函数&#xff1b; 存储过就是数据库 SQL 语言…

多项目管理怎么进行❓看这篇就够了

多项目管理是一个复杂而细致的过程&#xff0c;涉及多个项目的同时进行和协调。首先&#xff0c;明确每个项目的目标和范围至关重要。在项目开始之初&#xff0c;应对所有项目进行全面评估&#xff0c;确定其战略价值、影响范围和资源需求。这有助于为每个项目设定清晰的优先级…

反应香精市场报告:预计2030年全球市场规模将达到264.3亿美元

“反应香精”通常是指通过在食品或饮料加工过程中发生的物理、化学或酶反应而产生的风味剂。可以有意添加这些香料以增强最终产品的味道、香气或其他感官方面。它们通常用于食品和饮料行业&#xff0c;以保持一致性、提高适口性或创造独特的风味特征。生产工艺香料的方法有多种…

新网站做谷歌SEO为什么短期内很难看到显著效果?

对于一个全新的网站来说&#xff0c;SEO的效果往往不会在短期内显现。这是因为SEO需要时间来积累权重和信任度。谷歌对新网站通常会有一个观察期&#xff0c;在这段时间内&#xff0c;网站的表现不稳定&#xff0c;排名也会波动较大&#xff0c;这是正常情况&#xff0c;这时候…

excel表格转换为在线成绩查询怎么制作?

在当前“双减”政策的背景下&#xff0c;学生的考试成绩不再被公开展示&#xff0c;这是对学生隐私的一种保护。然而&#xff0c;这同时也带来了一个新的问题&#xff1a;家长们对于孩子成绩的关切并未减少&#xff0c;他们依然迫切想要了解孩子的学习情况。以往&#xff0c;成…

使用Provide和Inject设计Vue3插件

使用provide和inject的Vue依赖项注入非常适合构建Vue3插件或避免prop多层传递。 尽管不经常使用它&#xff0c;但是您可以仅使用两个内置方法来实现依赖项注入&#xff1a;provide和inject。 查看Composition API文档&#xff0c;在Vue 3.0中&#xff0c;使用Provide和Inject进…

深度学习:循环神经网络—RNN的原理

传统神经网络存在的问题&#xff1f; 无法训练出具有顺序的数据。模型搭建时没有考虑数据上下之间的关系。 RNN神经网络 RNN&#xff08;Recurrent Neural Network&#xff0c;循环神经网络&#xff09;是一种专门用于处理序列数据的神经网络。在处理序列输入时具有记忆性…

基于RSSI原理的蓝牙定位程序(matlab代码,3维空间、基站数量>3即可,可自适应)

目录 商品描述 商品描述 这款基于接收信号强度指示&#xff08;RSSI&#xff09;原理的蓝牙定位程序&#xff0c;专为需要高效、可靠定位解决方案的开发者和研究人员设计。无论是在室内环境还是复杂的三维空间&#xff0c;该程序都能通过N个蓝牙锚点&#xff0c;实现对未知点的…

20.安卓逆向-frida基础-hook分析调试技巧2-hookDES

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 内容参考于&#xff1a;图灵Python学院 本人写的内容纯属胡编乱造&#xff0c;全都是合成造假&#xff0c;仅仅只是为了娱乐&#xff0c;请不要盲目相信。 工…

【在Linux世界中追寻伟大的One Piece】DNS与ICMP

目录 1 -> DNS(Domain Name System) 1.1 -> DNS背景 2 -> 域名简介 2.1 -> 域名解析过程 3 -> 使用dig工具分析DNS 4 -> ICMP协议 4.1 -> ICMP功能 4.2 -> ICMP报文格式 4.3 -> Ping命令 4.4 -> traceroute命令 1 -> DNS(Domain Na…

HTB:Markup[WriteUP]

目录 连接至HTB服务器并启动靶机 1.What version of Apache is running on the targets port 80? 2.What username:password combination logs in successfully? 使用Yakit并使用TOP1000字典对密码进行爆破 3.What is the word at the top of the page that accepts use…

Python基础之List列表用法

1、创建列表 names ["张三","李四","王五","Mary"] 2、列表分片 names[1]&#xff1a;获取数组的第2个元素。 names[1:3]&#xff1a;获取数组的第2、第3个元素。包含左侧&#xff0c;不包含右侧。 names[:3]等同于names[0:3]&…

AD中显示Selection includes locked items.Continue?

因为框选拖动组里包含锁定的元器件&#xff0c;所以出现如下提示&#xff1b; 可以单击锁定元器件&#xff0c;点击location的锁形标记即可显示解锁的状态。 解锁之后&#xff1a; 然后就可以拖动框选的元器件了。