自学内容网 自学内容网

单片机学习(17)--AD/DA

16.1AD/DA的基础知识

1.AD/DA介绍

AD(AnalogtoDigital):模拟-数字转换,将模拟信号转换为计算机可操作的数字信号
DA(DigitaltoAnalog):数字-模拟转换,将计算机输出的数字信号转换为模拟信号
AD/DA转换打开了计算机与模拟信号的大门,极大的提高了计算机系统的应用范围,也为模拟信号数字化处理提供了可能

2.硬件电路模型

在这里插入图片描述
AD转换通常有多个输入通道,用多路选择开关连接至AD转换器,以实现AD多路复用的目的,提高硬件利用率
AD/DA与单片机数据传送可使用并口(速度快、原理简单),也可使用串口(接线少、使用方便)
可将AD/DA模块直接集成在单片机内,这样直接写入/读出寄存器就可进行AD/DA转换,单片机的IO口可直接复用为AD/DA的通道

3.硬件电路

在这里插入图片描述

4.运算放大器

**运算放大器(简称“运放”)是具有很高放大倍数的放大电路单元。**内部集成了差分放大器、电压放大器、功率放大器三级放大电路,是一个性能完备、功能强大的通用放大电路单元,由于其应用十分广泛,现已作为基本的电路元件出现在电路图中运算放大器可构成的电路有:电压比较器、反相放大器、同相放大器、电压跟随器、加法器、积分器、微分器等运算放大器电路的分析方法:虚短、虚断(负反馈条件下)
在这里插入图片描述

5.运放电路

在这里插入图片描述
在这里插入图片描述

6.DA原理

在这里插入图片描述
在这里插入图片描述

6.AD原理

在这里插入图片描述

7.AD/DA性能指标

分辨率:指AD/DA数字量的精细程度,通常用位数表示。例如,对于5V电源系统来说,8位的AD可将5V等分为256份,即数字量变化最小一个单位时,模拟量变化5V/256=0.01953125V,所以,8位AD的电压分辨率为0.01953125V,AD/DA的位数越高,分辨率就越高
转换速度:表示AD/DA的最大采样/建立频率,通常用转换频率或者转换时间来表示,对于采样/输出高速信号,应注意AD/DA的转换速度

8.XPT2046

在这里插入图片描述
在这里插入图片描述

16.2AD模数转换&DA数模转换

1.AD模数转换

(1)工程目录

在这里插入图片描述

(2)main.c函数

#include <REGX52.H>
#include "Delay.h"
#include "LCD1602.h"
#include "XPT2046.h"

unsigned int ADValue;
void main()
{
LCD_Init();
LCD_ShowString(1,1,"ADJ  NTC  RG");
while(1)
{
ADValue=XPT2046_ReadAD(XPT1602_XP_8);
LCD_ShowNum(2,1,ADValue,3);
ADValue=XPT2046_ReadAD(XPT1602_YP_8);
LCD_ShowNum(2,6,ADValue,3);
ADValue=XPT2046_ReadAD(XPT1602_VBAT_8);
LCD_ShowNum(2,11,ADValue,3);
}
}

(3)XPT2046.c函数

#include <REGX52.H>
#include "Delay.h"
#include "LCD1602.h"
#include "XPT2046.h"

unsigned int ADValue;
void main()
{
LCD_Init();
LCD_ShowString(1,1,"ADJ  NTC  RG");
while(1)
{
ADValue=XPT2046_ReadAD(XPT1602_XP_8);
LCD_ShowNum(2,1,ADValue,3);
ADValue=XPT2046_ReadAD(XPT1602_YP_8);
LCD_ShowNum(2,6,ADValue,3);
ADValue=XPT2046_ReadAD(XPT1602_VBAT_8);
LCD_ShowNum(2,11,ADValue,3);
}
}

(4)XPT2046.h函数

#ifndef __XPT2046_H_
#define __XPT2046_H_

#define XPT1602_XP_8 0x9C//0x8C
#define XPT1602_YP_8 0xDC
#define XPT1602_VBAT_8 0xAC
#define XPT1602_AUX_8 0xEC

#define XPT1602_XP_12 0x94//0x84
#define XPT1602_YP_12 0xD4
#define XPT1602_VBAT_12 0xA4
#define XPT1602_AUX_12 0xE4

unsigned int XPT2046_ReadAD(unsigned char Command);

#endif

2.DA数模转换

在15.2直流电机调速稍微改动main函数即可

#include <REGX52.H>
#include "Key.h"
#include "Delay.h"
#include "Timer0.h"
#include "Nixie.h"


sbit DA=P2^1;
unsigned char Counter,Compare;
unsigned char i;
void main()
{
Timer0_Init();
Compare=5;
while(1)
{
for(i=0;i<100;i++)
{
Compare=i;
Delay(10);
}
for(i=100;i>0;i--)
{
Compare=i;
}
}
}

void Timer0_Routine() interrupt 1
{

TL0 = 0xA4;
TH0 = 0xFF;
Counter++;
if(Counter>=100)
{
Counter=0;

}
if(Counter<Compare)
{
DA=1;
}
else
{
DA=0;
}

}

原文地址:https://blog.csdn.net/LHYYUYG/article/details/140269897

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!