AD、DA介绍

AD(Analog to Digital):模拟-数字转换,将模拟信号转换为计算机可操作的数字信号

DA(Digital to Analog):数字-模拟转换,将计算机输出的数字信号转换为模拟信号

AD/DA转换打开了计算机与模拟信号的大门,极大的提高了计算机系统的应用范围,也为模拟信号数字化处理提供了可能

硬件电路模型

AD转换通常有多个输入通道,用多路选择开关连接至AD转换器,以实现AD多路复用的目的,提高硬件利用率

AD/DA与单片机数据传送可使用并口(速度快、原理简单),也可使用串口(接线少、使用方便)

可将AD/DA模块直接集成在单片机内,这样直接写入/读出寄存器就可进行AD/DA转换,单片机的IO口可直接复用为AD/DA的通道

硬件电路

运算放大器

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

LM358芯片:内部有两个运算放大器

AD/DA性能指标

分辨率:

指AD/DA数字量的精细程度,通常用位数表示。例如,对于5V电源系统来说,8位的AD可将5V等分为256份,即数字量变化最小一个单位时,模拟量变化5V/256=0.01953125V,所以,8位AD的电压分辨率为0.01953125V,AD/DA的位数越高,分辨率就越高

转换速度:

表示AD/DA的最大采样/建立频率,通常用转换频率或者转换时间来表示,对于采样/输出高速信号,应注意AD/DA的转换速度

XPT2046

功能说明
XPT2046是一款4线制电阻式触摸屏控制器,内含12位分辨率125KHz转换速率逐步逼近型A/D转换器。XPT2046支持从1.5V到5.25V的低电压I/0接口。XPT2046能通过执行两次A/D转换查出被按的屏幕位置,除此之外,还可以测量加在触摸屏上的压力。内部自带⒉.5V参考电压,可以作为辅助输入、温度测量和电池监测之用,电池监测的电压范围可以从0V到6V。XPT2046片内集成有一个温度传感器。在2.7V的典型工作状态下,关闭参考电压,功耗可小于0.75mW。XPT2046采用微小的封装形式:TSSOP-16, QFN-16和VFBGA一48。工作温度范围为-40℃~+85℃。与 ADS7846、TSC2046、AK4182A完全兼容

即开发板上的AD转换芯片用的是一种触摸屏芯片,运放电路比较复杂,使用芯片则可以直接忽略其内部逻辑,按照设定的时序即可通过芯片将模拟量转换为数字量

AD转换:XPT2046时序

类似于SPI通信

XTP2046.c文件

#include <REGX52.H>sbit XPT2046_DIN   = P3^4;
sbit XPT2046_CS    = P3^5;
sbit XPT2046_DCLK  = P3^6;
sbit XPT2046_DOUT  = P3^7;unsigned 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;      //跳过时序图中BUSY高电平的部分,来到读取开始的时序XPT2046_DCLK = 0;if(XPT2046_DOUT){ADvalue |= (0x8000 >>i);   //读取数据,数据是十六位的}}XPT2046_CS = 1;//返回数字量if(Command & 0x08 == 1)     //取出MODE位判断{return ADvalue>>8;    //因为数据读的是16位,当MODE位是1时,选择8位为转换分辨率,所以要右移8位得到真实数值}else{return ADvalue>>4;  //当MODE位是0时,选择12位为转换分辨率,16-12=4,就右移4位得到数据 }
}

main.c文件

#include <REGX52.H>
#include "LCD1602.h"
#include "XPT2046.h"
#include "Delay.h"unsigned int ADvalue;void main()
{LCD_Init();LCD_ShowString(1,1,"AD1  NTC1  GR1");while(1){ADvalue = XPT2046_ReadAD(XPT2046_AIN0_8);  //调用读取AD函数,并传入控制命令,对电位器的模拟量进行转换LCD_ShowNum(2,1,ADvalue,3);ADvalue = XPT2046_ReadAD(XPT2046_AIN1_8);  //调用读取AD函数,并传入控制命令,对热敏电阻的模拟量进行转换LCD_ShowNum(2,6,ADvalue,3);ADvalue = XPT2046_ReadAD(XPT2046_AIN2_8); //调用读取AD函数,并传入控制命令,对光敏电阻的模拟量进行转换LCD_ShowNum(2,12,ADvalue,3);Delay(100);}
}

指令的设置

其中A2-A0取值如下图

XTP2406.h文件

#ifndef __XPT2046_H__
#define __XPT2046_H__/*宏定义,控制字的控制位,其中A2、A1、A0看对应电路图中的AIN0、AIN1、AIN2、AIN3,
看数据手册的单端模式输入配置(SER!DFR = 1)
AIN0  ==  X+     ==    XP
AIN1  ==  Y+     ==    YP
AIN2  ==  VBAT
AIN3  ==  AUX
*///MODE为1,选择8位为转换分辨率
#define XPT2046_AIN0_8 0x9C         //1001 1100
#define XPT2046_AIN1_8 0xDC         //1101 1100
#define XPT2046_AIN2_8 0xAC         //1010 1100
#define XPT2046_AIN3_8 0xEC         //1110 1100//MODE为0,选择12位为转换分辨率
#define XPT2046_AIN0_12 0x94        //1001 0100
#define XPT2046_AIN1_12 0xD4        //1101 0100
#define XPT2046_AIN2_12 0xA4        //1010 0100
#define XPT2046_AIN3_12 0xE4        //1110 0100unsigned int XPT2046_ReadAD(unsigned char Command);
#endif

DA转换:其实就是PWM,把PWM的代码改一下端口就行

51开发板用ADC采集模拟量相关推荐

  1. STC15W408AS单片机通过ADC端口采集模拟量并从串口打印数值

    STC15W408AS单片机通过ADC端口采集模拟量并从串口打印数值 0-1023数据采集 STC15W408AS引脚功能图 STC15系列单片机的A/D转换器 A/D转换器的结构 STC15系列单片 ...

  2. 51开发板上为什么会有多个晶振

    51开发板上为什么会有多个晶振? 有时是12MHZ,有时是11.0592MHZ?有什么区别么? 1. 12.000是给PL-2303使用的吧?因为usb通信需要严格的12m时钟. 单片机用11.059 ...

  3. Proteus仿真51开发板

    用的B站江科大自化协的51开发板教程,原理图.资料在B站up主发的有.这里只是Proteus仿真,仿真和实物有不同,有些对时序要求高的可以用实物来测试.仿真不全,学习使用,仅供参考. Proteus安 ...

  4. 【Renesas RA6M4开发板之I2C(模拟)驱动ssd1306 OLED屏幕】

    [Renesas RA6M4开发板之I2C(模拟)驱动ssd1306 OLED屏幕] 1.0 OLED 1.1产品特性: 1.2产品参数: 2. RT-theard配置 2.1 硬件需求 2.2 软件 ...

  5. 用单片机普通IO口(不用ADC功能)采集模拟量

    http://www.51hei.com/bbs/dpj-126017-1.html 以下介绍的这个方法是用没有 ADC 功能的芯片来检测模拟量,采集温度: 1. 温度检测电路图 :   2. 温度检 ...

  6. linux 开发板模拟u盘,S5P4418开发板Linux下实现模拟U盘教程飞凌嵌入式

    飞凌嵌入式ARMCortex-A9 S5P4418开发板上能否满足U盘的功能?其实可通过修改内核配置和文件系统相关内容,在OK4418开发板上实现模拟U盘功能,模拟U盘可以帮助我们实现开发板与Wind ...

  7. 计算机怎么采集模拟量信号,如何采集模拟量和数字量

    在工业自动化控制中,我们经常会遇到开关量,数字量,模拟量,脉冲量等各种概念,对于这些概念应该如何理解.我们又是如何采集他们呢?本文引用地址:http://www.eepw.com.cn/article ...

  8. 如何实现RS485串口通讯采集模拟量

    一.准备一台YX-AI-DO2S两路模拟量输入设备 二.将YX-AI-DO2S与模拟量传感器.上位机进行物理连接如下图 三.通过配置软件配置串口通讯参数让YX-AI-DO2S与上位机.下位机传感器物理 ...

  9. 郭天祥51开发板——超声波测距+lcd1602

    使用超声波模块实现测距功能,测量结果显示在LCD1602上.并通过串口发送给电脑,测量距离大于或小于5~400cm,LCD1602显示"Waring!"同时蜂鸣器报警.串口发送&q ...

  10. Android Camera相机开发示例、Android 开发板 USB摄像头采集、定期拍照、定时拍照,安卓调用摄像头拍照、Android摄像头预览、监控,USB摄像头开发、摄像头监控代码

    我们有个需求,在机器上加个摄像头,定时拍照: 我到网上搜索,发现没有快速上手和简单使用的: 个人感觉,大部分博客写得很乱,或者长篇大论: 而我只想简单实现功能,并不打算学习多少理论: 下面代码是我写来 ...

最新文章

  1. 微观世界探索者:15家值得关注的纳米技术公司
  2. C语言访问MYSQL数据库的完整的代码例子
  3. 关于python中requests模块导入问题-python中requests模块的使用方法
  4. Day14作业 二、有两个List集合怎么取两个无重复的并集
  5. yolo极大抑制_pytorch实现yolov3(4) 非极大值抑制nms
  6. 反射获取类_新人也能看懂?如何使用 Java 反射?反射的用法及案例
  7. 绘制3d散点图报错ax = fig.gca(projection = ‘3d‘)TypeError: gca() got an unexpected keyword argument
  8. 项目管理pmp学习中的记录
  9. 冒泡排序正序逆序例子
  10. 绘图杂记【3】Python / R语言 制作峰峦图
  11. 超级!超级!超级好用的视频标注工具
  12. 【Opencv】目标追踪——高斯混合模型分离算法(MOG)
  13. 百旺信息服务器端口,各省百旺参数设置服务器地址
  14. 对C语言的关键字及部分关键字用法的简单理解
  15. 汽车动力总成-基于GCAir和GCKontrol的TCU硬件在环HiL测试
  16. 再谈数据标准落标,论数据模型设计工具
  17. bootstrap页面sidebar
  18. 数学菜鸟的AI学习攻略 | 数学符号轻松入门
  19. java架构模式与设计模式(十)--失效模式与影响分析
  20. Springboot自动识别404页面

热门文章

  1. Cisco配置DHCP中继代理
  2. debezium系列之:理解database.server.name和database.history.kafka.topic
  3. 创业找市场——从逛街开始(转)
  4. 南京信息工程大学计算机考研资料汇总
  5. win10修改用户名_大神帮您win10系统用户文件夹改名的修复方法
  6. java的setbounds_Swing-setBounds()用法-入门
  7. [HITML]哈工大2020秋机器学习复习笔记
  8. 最具创新价值人工智能产品 Imagination PowerVR NNA再获殊荣
  9. 损失函数(MSE和交叉熵)
  10. 一行 Python 的丧心病狂