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

server/2024/10/18 0:26:57/

一、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.ppmy.cn/server/131279.html

相关文章

笔试算法总结

文章目录 题目1题目2题目3题目4 题目1 使用 StringBuilder 模拟栈的行为&#xff0c;通过判断相邻2个字符是否相同&#xff0c;如果相同就进行删除 public class Main {public static String fun(String s) {if (s null || s.length() < 1) return s;StringBuilder builde…

python发邮件附件:配置SMTP服务器与认证?

python发邮件附件技巧&#xff1f;Python发送多附件邮件的方法&#xff1f; Python作为一种强大的编程语言&#xff0c;提供了丰富的库和工具来实现这一功能。AokSend将深入探讨如何使用Python发邮件附件&#xff0c;并详细介绍配置SMTP服务器与认证的关键步骤。 python发邮件…

自然语言处理问答系统:技术进展、应用与挑战

自然语言处理&#xff08;NLP&#xff09;问答系统是人工智能领域的一个重要分支&#xff0c;它通过理解和分析用户的提问&#xff0c;从大量的文本数据中提取相关信息&#xff0c;并以自然语言的形式回答用户的问题。随着深度学习技术的发展&#xff0c;尤其是预训练语言模型&…

JavaScript设计案例

JavaScript设计案例详解 JavaScript&#xff08;JS&#xff09;作为Web开发的核心技术之一&#xff0c;不仅在前端交互中扮演着至关重要的角色&#xff0c;还在数据处理、动画效果、游戏开发等多个领域展现出强大的功能。本文将通过几个实际的JavaScript设计案例&#xff0c;深…

YoloV8改进策略:BackBone改进|CAFormer在YoloV8中的创新应用,显著提升目标检测性能

摘要 在目标检测领域,模型性能的提升一直是研究者和开发者们关注的重点。近期,我们尝试将CAFormer模块引入YoloV8模型中,以替换其原有的主干网络,这一创新性的改进带来了显著的性能提升。 CAFormer,作为MetaFormer框架下的一个变体,结合了深度可分离卷积和普通自注意力…

Apache DolphinScheduler社区9月进展记录

各位热爱 Apache DolphinScheduler 的小伙伴们&#xff0c;社区 9 月月报更新啦&#xff01;这里将记录 Apache DolphinScheduler 社区每月的重要更新&#xff0c;欢迎关注&#xff01; 月度 Merge Star 感谢以下小伙伴上个月为 Apache DolphinScheduler 做的精彩贡献&#x…

仿IOS桌面悬浮球(支持拖拽、自动吸附、自动改变透明度与点击、兼容PC端与移动端)

使用 pointerdown/pointermove/pointerup 实现仿IOS桌面悬浮球效果&#xff0c;支持拖拽、指定拖拽选对容器&#xff0c;指定拖拽安全区、自动吸附、自动改变透明度与点击&#xff0c;兼容PC端与移动端。 效果展示 https://code.juejin.cn/pen/7423757568268304421 代码实现 …

27-云计算下一个十年技术Serverless

├──27-云计算下一个十年技术Serverless | ├──1-Serverless深度实战之Knative | | ├──1-使用Knative平台环境说明 | | ├──2-现阶段云原生应用领域介绍 | | ├──3-为什么要引入Serverless | | ├──4-Serverless应用场景 | | ├──5-Serve…