51单片机——ADC模数转换实验

这篇具有很好参考价值的文章主要介绍了51单片机——ADC模数转换实验。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一、功能描述

二、ADC介绍

2.1 逐次逼近型ADC转换原理

2.2 ADC的主要技术指标

三、XPT2046芯片介绍

3.1 XPT2046外部引脚

3.2 XPT2046的命令字

3.3 XPT2046时序图

四、测试文件test.c

五、实验现象


一、功能描述

        我们使用的 STC89C51单片机内部不含 ADC 接口,所以需要外接一个 ADC 转换芯片将模拟信号转换成数字信号供单片机处理。我们开发板上集成了一个 ADC 模数转换电路,选用的 ADC 芯片是 12 位的 AD 芯片-XPT2046。本次实验通过ADC转换电路,采集电位器AD的电压值、热敏电阻NTC电路的电压值、光敏电阻GR电路的电压值,并将转换后的数字量显示在LCD1602上。

二、ADC介绍

        我们知道 51 单片机系统内部运算时用的全部是数字量,即 0 和 1,因此对单片机系统而言,无法直接操作模拟量,必须将模拟量转换成数字量。所谓数字量,就是用一系列 0 和 1 组成的二进制代码表示某个信号大小的量。用数字量表示同一个模拟量时,数字位数可以多也可以少,位数越多则表示的精度越高, 位数越少表示的精度就越低。

2.1 逐次逼近型ADC转换原理

        采用逐次逼近法的 AD 转换器是有一个比较器、DA 转换器、缓冲寄存器和控 制逻辑电路组成,如下图所示:

51单片机——ADC模数转换实验

        逐次逼近法的转换过程是:初始化时将逐次逼近寄存器各位清零,转换开始时,先将逐次逼近寄存器最高位置 1,送入 DA 转换器,经 DA 转换后生成的模拟量送入比较器,称为 U0,与送入比较器的待转换的模拟量 Ux 进行比较,若U0<Ux,该位1保留,否则清除。然后再将逐次逼近寄存器次高位置 1,将寄存器中新的数字量送 DA 转换器,输出的 U0 再与 Ux 比较,若 U0<Ux,该位1保留,否则清除。重复此过程,直至逼近寄存器最低位。转换结束后,将逐次逼近寄存器中的数字量送入缓冲寄存器,得到数字量的输出。逐次逼近的操作过程是在一个控制电路的控制下进行的。

2.2 ADC的主要技术指标

  1. 分辨率:是指对于允许范围内的模拟信号,它能输出离散数字信号值的个数。12位ADC的分辨率就是12位,一个 10V满刻度的 12位 ADC能分辨输入电压变化最小值是:10Vx(1÷12)=2.4mv。
  2. 转换速率:是能够重复进行数据转换的速度,即每秒转换的次数。而完成一次 A/D转换所需的时间(包括稳定时间),则是转换速率的倒数。

三、XPT2046芯片介绍

        XPT2046是一种典型的逐次逼近型模数转换器(SAR ADC),包含了采样/保持、模数转换、串口数据输出等功能。 XPT2046的通信方式是SPI。

3.1 XPT2046外部引脚

51单片机——ADC模数转换实验

  • CS:片选端。
  • DIN:串行数据输入端
  • DCLK:外部时钟输入端
  • DOUT:串行数据输出端
  • X+、Y+、X-、Y-:位置选择端
  • VBAT:电池监视输入端
  • AUX:ADC辅助输入通道

CS、DIN、DCLK和DOUT分别接单片机的对应引脚,X+、Y+、VBAT分别输入要转换的模拟信号。

3.2 XPT2046的命令字

51单片机——ADC模数转换实验

 51单片机——ADC模数转换实验 其中选择通道位A2-A0,如下图所示:

51单片机——ADC模数转换实验

3.3 XPT2046时序图

51单片机——ADC模数转换实验

  1. 主机通过DIN,发送命令字给XPT2046,XPT2046在DCLK高电平时读取数据。
  2. XPT2046将转换好的数字量通过DOUT发送给主机,主机在DCLK高电平时读取数据。

程序如下:

#include <REGX52.H>
sbit XPT2064_DIN=P3^4;
sbit XPT2064_CS=P3^5;
sbit XPT2064_DCLK=P3^6;
sbit XPT2064_DOUT=P3^7;
/*
     *函数名:	 XPT2064_ReadAD(unsigned char command)
     *函数功能: 主机发送命令字给XPT2046,XPT2046将转换的数字量发送给主机
     *输入:	 command:命令字
     *输出:	 D_num:转换好的数字量
*/
unsigned int XPT2064_ReadAD(unsigned char command)
{
	unsigned int D_num=0;
	unsigned char i=0;
	XPT2064_CS=0;
	for(i=0;i<8;i++)
	{	
		XPT2064_DIN=command&(0x80>>i);
		XPT2064_DCLK=1;
		XPT2064_DCLK=0;
	}
	for(i=0;i<16;i++)
	{
		XPT2064_DCLK=1;
		if(XPT2064_DOUT==1)D_num|=0x8000>>i;
		XPT2064_DCLK=0;
	}
	return D_num/128;
}

四、测试文件test.c

#include <REGX52.H>
#include "Delay.h"
#include "LCD1602.h"
#include "XPT2046.h"
#define XPT2046_XP   0x9c
#define XPT2046_YP   0xdc
#define XPT2046_VBAT 0xac
#define XPT2046_AUX  0xec
int main()
{
	unsigned int AD,NTC,GR=0;
	LCD_Init();
	while(1)
	{
		AD=XPT2064_ReadAD(XPT2046_XP);
		NTC=XPT2064_ReadAD(XPT2046_YP);
		GR=XPT2064_ReadAD(XPT2046_VBAT);
		LCD_ShowString(1,1,"AD");
		LCD_ShowString(1,5,"NTC");
		LCD_ShowString(1,9,"GR");
		LCD_ShowNum(2,1,AD,3);
		LCD_ShowNum(2,5,NTC,3);
		LCD_ShowNum(2,9,GR,3);
		Delay(10);
	}
}

五、实验现象

        当转动电位器、传递热量给热敏电阻NTC或者改变环境的光照,也就是改变电压模拟量,通过ADC转换后得到对应的数字量,并把它们显示在LCD1602上。文章来源地址https://www.toymoban.com/news/detail-459192.html

到了这里,关于51单片机——ADC模数转换实验的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 基于51单片机 + MQ-3酒精传感器 + ADC0832模数转换器 + LCD1602液晶显示器的酒精检测系统

    废话不多说,直接上东西。本文是基于51单片机的酒精检测系统设计,用的元器件有:51单片机、MQ-3酒精传感器、ADC0832模数转换器、 LCD1602液晶显示器、喇叭等元器件。 1、MQ-3 酒精检测传感器,用于检测酒精浓度。当然采集到的数据是模拟的还需要通过ADC0832模数转换器将其转

    2024年02月12日
    浏览(61)
  • 【51单片机Keil+Proteus8.9+ADC0804】ADC实验 模拟转数字实验

    一、实验名称 ADC实验 模拟转数字实验 二、设计思路 电路设计 1.选用AT89C51单片机作为电路核心单元,外接8位单通道AD转换器ADC0804芯片和LM016L显示器以及滑动变阻器等其它常用元器件构成电路。 2.将ADC0804芯片的控制引脚RD,WR,INTR接到AT89C51芯片对应引脚,再将ADC0804电压输入引脚

    2024年01月20日
    浏览(42)
  • Proteus8仿真:51单片机A/D转换(ADC0808)

    元器件 名称 排阻 RESPACK-8 51单片机 AT89C51 数码管 7SEG-MPX4-CA-BLUE ADC芯片 ADC0808 滑动变阻器 POT-HG ADC0808引脚作用 项目 Value ADDA-C 选择IN通道 IN0-7 模拟量输入 VREF+ ADC参考电压 VREF- ADC参考地 CLOCK 时钟 VREF+ ADC参考电压 OUT1-8 数字信号输出 START 起始信号 OE 输出使能 EOC 结束信号 ADC080

    2024年02月11日
    浏览(38)
  • 单片机学习笔记---AD模数转换&DA数模转换

    目录 AD模数转换 XPT2046.c XPT2046.h main.c DA数模转换 main.c 上一篇博客讲了AD/DA转换的工作原理,也介绍了运算放大器的工作原理,这节开始代码演示! 新创建一个工程:AD模数转换 第一个工程将用到LCD1602和Delay函数,所以首先将我们之前讲过的代码模块添加进来 然后创建主程序

    2024年02月19日
    浏览(51)
  • 单片机——C51实验含Proteus仿真(AD转换器(数字电压表),DA转换器(波形发生器))

    分为两部分:AD转换器实现数字电压表,DA转换器实现波形发生器(在仿真部分详细说明) 所用到的原理图:  AD转换器实现数字电压表部分         需要打开main函数中LCD_init(),ADC(),display()三个注释其中电压的输出显示用到了LCD1602关于这部分详情见(96条消息) 单片机——

    2024年02月08日
    浏览(56)
  • 【单片机】51单片机,TLC2543,驱动程序,读取adc

    TLC2543 是一款 12 位精密模数转换器 (ADC)。 1~9、11、12——AIN0~AIN10为模拟输入端; 15——CS 为片选端; 17——DIN 为串行数据输入端;(控制字输入端,用于选择转换及输出数据格式) 16——DOUT为A/D转换结果的三态串行输出端;(A/D转换结果的输出端。) 19——EOC为转换结束端

    2024年02月14日
    浏览(48)
  • 单片机】51单片机,TLC2543,驱动程序,读取adc

    TLC2543 是一款 12 位精密模数转换器 (ADC)。 1~9、11、12——AIN0~AIN10为模拟输入端; 15——CS 为片选端; 17——DIN 为串行数据输入端;(控制字输入端,用于选择转换及输出数据格式) 16——DOUT为A/D转换结果的三态串行输出端;(A/D转换结果的输出端。) 19——EOC为转换结束端

    2024年02月14日
    浏览(56)
  • 基于51单片机的电压采集(ADC0809)

    1.ADC0809简介 IN0~IN7 : 8路模拟量输入端; D0~D7:8位数字量输出端; ADDA、ADDC、ADDC:3位地址输入线,用于选择8路模拟通道中的一路; ALE:地址锁存允许信号,输入,高电平有效; START:A/D转换启动信号,输入,高电平有效; EOC:A/D转换结束信号,输出。当启动转换时,高引脚为低电

    2023年04月18日
    浏览(52)
  • 基于51单片机的电压采集(ADC0804)

    1.ADC0804简介 工作电压:+5V,即VCC=+5V。 模拟转换电压范围:0~+5V,即0≤Vin≤+5V。 分辨率:8位,即分辨率为1/(2^8)=1/256,转换值介于0~255之间。 转换时间:100us(fCK=640KHz时)。 转换误差:±1LSB。 参考电压:2.5V,即Vref/2=2.5V。 Vin(+)、Vin(-):两个模拟信号输入端,可以接

    2023年04月08日
    浏览(41)
  • STC89C51系列单片机与ADC0832通信

    ADC0832是一种常用的8位模数转换器,它可以将模拟信号转换为数字信号,以供单片机进行处理。STC89C51系列单片机是一款常见的8位单片机,具有强大的处理能力和丰富的外设资源,可以与ADC0832通信,实现模拟信号采集的功能。 本文将介绍如何使用STC89C51单片机与ADC0832通信,并

    2024年02月13日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包