AD/DA介绍
•AD(Analog to Digital):模拟-数字转换,将模拟信号转换为计算机可操作的数字信号
•DA(Digital to Analog):数字-模拟转换,将计算机输出的数字信号转换为模拟信号
•AD/DA转换打开了计算机与模拟信号的大门,极大的提高了计算机系统的应用范围,也为模拟信号数字化处理提供了可能
![](https://i-blog.csdnimg.cn/blog_migrate/d6820130180ed72677eade74b5de9a6c.png)
硬件电路模型
![](https://i-blog.csdnimg.cn/blog_migrate/99e66a0c689b09346307700b689a8707.png)
•AD转换通常有多个输入通道,用多路选择开关连接至AD转换器,以实现AD多路复用的目的,提高硬件利用率
•AD/DA与单片机数据传送可使用并口(速度快、原理简单),也可使用串口(接线少、使用方便)
•可将AD/DA模块直接集成在单片机内,这样直接写入/读出寄存器就可进行AD/DA转换,单片机的IO口可直接复用为AD/DA的通道
硬件电路
![](https://i-blog.csdnimg.cn/blog_migrate/e0395e099747def062f20ac3b3264c5c.png)
运算放大器
•运算放大器(简称“运放”)是具有很高放大倍数的放大电路单元。内部集成了差分放大器、电压放大器、功率放大器三级放大电路,是一个性能完备、功能强大的通用放大电路单元,由于其应用十分广泛,现已作为基本的电路元件出现在电路图中
•运算放大器可构成的电路有:电压比较器、反相放大器、同相放大器、电压跟随器、加法器、积分器、微分器等
•运算放大器电路的分析方法:虚短、虚断(负反馈条件下)
![](https://i-blog.csdnimg.cn/blog_migrate/7278187c72e69d8419325ae41f297bd6.png)
运放电路
![](https://i-blog.csdnimg.cn/blog_migrate/539f13f6203b6f5748a8f901918f6af0.png)
![](https://i-blog.csdnimg.cn/blog_migrate/e4c89635c54697ba377b4ab258fe1940.png)
DA原理
•T型电阻网络DA转换器:
![](https://i-blog.csdnimg.cn/blog_migrate/bca35d6726a4143083f76d74917b8059.png)
DAC0832所用
![](https://i-blog.csdnimg.cn/blog_migrate/0bff208c2848ae5f26cb156b73299d8d.png)
V_REF为参考电压
PWM型DA转换器:
![](https://i-blog.csdnimg.cn/blog_migrate/b6194fb269fd013be2c70c5b462b95f9.png)
![](https://i-blog.csdnimg.cn/blog_migrate/caf3afe7cecf9d5e34e3f31f7af456bb.png)
AD\DA性能指标
•分辨率:指AD/DA数字量的精细程度,通常用位数表示。例如,对于5V电源系统来说,8位的AD可将5V等分为256份,即数字量变化最小一个单位时,模拟量变化5V/256=0.01953125V,所以,8位AD的电压分辨率为0.01953125V,AD/DA的位数越高,分辨率就越高
•转换速度:表示AD/DA的最大采样/建立频率,通常用转换频率或者转换时间来表示,对于采样/输出高速信号,应注意AD/DA的转换速度
XPT2046介绍
![](https://i-blog.csdnimg.cn/blog_migrate/ac46abdc6c56b1e997fc9cff428c8cd6.png)
时序图
![](https://i-blog.csdnimg.cn/blog_migrate/733b28bdbf3e574133926471f85037db.png)
![](https://i-blog.csdnimg.cn/blog_migrate/df87bb2db536f3908cccb90a128f275b.png)
AD转换
1)主程序
#include <REGX52.h>
#include "XPT2046.h"
#include "Delay.h"
#include "LCD1602.h"
unsigned int ADVAlue=0;
void main ( )
{
LCD_Init();
LCD_ShowString(1,1,"ADJ");
while(1)
{
ADVAlue=XPT2046_ReadAD(XPT2046_XP_8);
LCD_ShowNum(2,1,ADVAlue,4);
}
}
2)XPT2046.c
#include <REGX52.h>
sbit XPT2046_CS=P3^5;
sbit XPT2046_DCLK=P3^6;
sbit XPT2046_DIN=P3^4;
sbit XPT2046_DOUT=P3^7;
unsigned int XPT2046_ReadAD(unsigned char Command)
{
unsigned char i;
unsigned int ADVAlue;
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)
{
ADVAlue|=(0x8000>>i);
}
}
XPT2046_CS==1;
if(Command&0x08)
{
return ADVAlue>>8;
}
else
{
return ADVAlue>>4;
}
}
3)XPT2046.h
#ifndef __XPT2046_H__
#define __XPT2046_H__
#define XPT2046_XP_8 0x8C//0x9C
#define XPT2046_YP_8 0xDC
#define XPT2046_VBAT_8 0xAC
#define XPT2046_AUX_8 0xEC
#define XPT2046_XP_12 0x84//0x94
#define XPT2046_YP_12 0xD4
#define XPT2046_VBAT_12 0xA4
#define XPT2046_AUX_12 0xE4
unsigned int XPT2046_ReadAD(unsigned char Command);
#endif
原理图
![](https://i-blog.csdnimg.cn/blog_migrate/85a71c43b48ab32b3e3c8d2c31122268.png)