STC89C51之AD模数转换 ---- 自学笔记

发布者:DazzlingSmile最新更新时间:2021-11-02 来源: eefocus关键字:STC89C51  模数转换 手机看文章 扫描二维码
随时随地手机看文章

一、AD 模数转换及其相关名词解释

A模拟信号

D数字信号

AD模数转换 模拟信号转换为数字信号

二、AD转换器的主要技术指标

2.1、分辨率

ADC的分辨率是指使输出数字量变化一个相邻数码所需输入模拟电压的变化量,常用二机制的位数表示,例如12位ADC的分辨率就是12位,或者说分辨率位满刻度的1/(2^12)。一个10V满刻度的12位ADC能分辨输入电压变化最小值是10v*1/(2^12)=2.4mv


xpT2046


2.2、量化误差

量化过程:ADC把模拟量变为数字量,用数字量近似表示模拟量这个过程为量化。


要准确的表示模拟量,ADC的位数需要很大、甚至无穷大。


量化误差:一个分辨率有限的ADC的阶梯状态转换特性曲线与具有无限分辨率的ADC转换特性曲线(直线)之间的最大偏差

2.3、偏移误差

偏移误差:输入信号为零时,输出信号不为零的值,所以有时又称位零值误差。

假定ADC没有非线性误差,则其转换特性曲线各阶梯中点的连线必定是直线,这条直线与横轴相交点所对的输入电压就是偏移误差。


2.4、满刻度误差

又称增益误差,ADC的满刻度误差是指满刻度输出数码所对应的实际输入电压与理想输入电压之差。


2.5、线性度

线性度有时又称非线性度,它是转换器实际的转换特性与理想直线的最大偏差。


2.6、绝对精度

在一个转换器中,任何数码所对应的实际模拟量输入与理论模拟输入之差的最大值,又称绝对精度。

对于ADC而言,可以在每一个阶段的水平中点进行测量,它包括了所有的误差。


2.7、转换速率

ADC的转换速率是能够重复进行数据转换的速度,即每秒转换的次数。而完成一次A/D转换所需的时间(包括稳定时间),则是转换速率的倒数。


A/D转换器的转换速度主要取决与转换电路的类型,不同类型A/D转换器的转换速度相差很大。


双积分型A/D转换器的转换速度最慢,需几百毫秒左右。

逐次逼近式A/D转换器的转换速度较慢,需要几十微秒。

逐次逼近式AD转换器与计数式A/D转换类似,只是数字量由“逐次逼近寄存器SAR”产生。SAR使用“对分搜索法”产生数字量,以8位数字量为例,SAR首先产生8位数字量的一半,即10000000B,试探模拟量Vi的大小,若Vn>Vi,清除最高位,若Vn

并行比较型A/D转换器的转换速度最快,仅需几十纳秒。


三、XPT2046芯片

3.1、原理图

3.2、封装形式

 

3.3、引脚功能

3.4、时序图

 

 

 

四、程序

4.1、主函数(main.c)


   /*

数码管前4位显示电位器检测的AD值,范围是0-4095(2的12次方4096),一般达不到最大,这个受供电电压的影响

   1,单片机-->AD/DAC模块

    P34-->DI

P35-->CS

P36-->CL

P37-->DO

   2,单片机-->动态数码管模块

    J22-->J6

P22-->J9(A)

P23-->J9(B)

P24-->J9(C)

*/

 

#include "reg52.h"

#include "XPT2046.h"

typedef unsigned int u16;    //对数据类型进行声明定义

typedef unsigend char u8;

 

sbit LSA = P2^2;

sbit LSB = P2^3;

sbit LSC = P2^4;

u8 disp[4]; // 八位数码管显示前4位

u8 code smgduan[10] = ={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; // 显示0~9的数字

 

void delay(u16 i)    //  延时函数

{

while(i--);

}

  

void datapros(){ // 数据处理函数

  u16 temp;

  static u8 i;

  if(i=50)

  {

  i=0;

  temp = Read_AD_Data(0x94); // AIN0电位器  如果要检测转换电位器模拟信号,控制字命令寄存器值为0X94或者0XB4.

 

  }

  i++;

disp[0]=smgduan[temp/1000];//千位

disp[1]=smgduan[temp%1000/100];//百位

disp[2]=smgduan[temp%1000%100/10]; // 十位

disp[3]=smgduan[temp%1000%100%10]; //个位

  }


void DigDisplay() //  数码管显示函数

  {

  

  u8 i;

for(i=0;i<4;i++)

{

    switch(i) // 位选,选择点亮的数码管

{

case(0): 

   LSA=1;LSB=1;LSC=1;break;  //   显示第0位

case(1):

   LSA=0;LSB=1;LSC=1;break;  //   显示第1位

case(2):

   LSA=1;LSB=0;LSC=1;break;  //   显示第2位

case(3):

   LSA=0;LSB=0;LSC=1;break;  //  显示第3位

}

P0=disp[i];  // 发送数据

delay(100);  // 间隔一段时间扫描

P0=0x00;   // 消隐

}

  }

 

 

  void main() // 主函数  程序执行的入口

  {

     while(1)

  {

     datapros();

     DigDisplay();

  }

  }


如果要检测转换电位器模拟信号,控制字命令寄存器值为0X94或者0XB4.

如果要检测转换热敏电阻模拟信号,控制字命令寄存器值为0XD4.

如果要检测转换光敏电阻模拟信号,控制字命令寄存器值为0XA4.

如果要检测转换AIN3通道上模拟信号,控制字命令寄存器值为0XE4.


4.2、XTP2046芯片使用函数头文件

#ifndef _XPT2046_H_ // 外部文件引用此文件的名称定义

#define _XPT2046_H_

 

// 包含头文件

#include

#include

 

// 关键字重定义

#ifndef uchar                //  如果uchar没有被定义

#define uchar unsigned char  //  那么就把它定义为char类型

#endif                  //  结束标志

 

#ifndef uint 

#define unint  unsigned int

#endif     

 

#ifndef ulong

#define ulong  unsigned long

#endif

 

// IO口定义

sbit DOUT = P3^7;  // 输出

sbit CLK  = P3^6;  // 时钟

sbit DIN  = P3^4;  // 输入

sbit CS   = P3^5;  // 片选

 

// XPT2046.c文件中函数的声明

uint Read_AD_Date(uchar cmd);  

uint SPI_Read(void);

void SPI_Write(uchar dat);

 

#endif   // XPT2046.h文件声明结束

4.3、XTP2046使用函数

#include "XPT2046.h"

// 写入函数

void SPI_Write(uchar dat) // dat :写入数据

{

uchar i=1;

CLK =0;

for(i=0;i<8;i++){ // 1字节 = 8bit 

DIN =dat >> 7; //右移7位

 

dat <<=1;      // 左移移位  

CLK=0;        // 上升沿放置数据至数据线

 

CLk=1;

   }

}

 

// dat:读取数据

uint SPI_Rea(void)

{

uint ,i,dat=0;

CLK=0;

for(i=0;i<12;i++) // 接收到

{

dat<<-1;

CLk=1;

CLK=0;

 

dat|=DOUT;   // dat = dat | DOUT

}

  return dat;

}

 

uint Read_AD_Data(uchar cmd)

{

 

    uchar i;

uint AD_Value;   // int类型 AD_Value

CLK = 0;         // 低电平

CS  = 0;         // 低电平

SPI_Write(cmd);  cmd写入SPI_Wri

for(i=6; i>0; i--); //延时等待转换结果

CLK = 1;   //发送一个时钟周期,清除BUSY

_nop_();      // 延迟一个指令周期

_nop_();       // 延迟一个指令周期

CLK = 0;

_nop_(); // 延迟一个指令周期

_nop_(); // 延迟一个指令周期

AD_Value=SPI_Read();

CS = 1;

return AD_Value;

}

关键字:STC89C51  模数转换 引用地址:STC89C51之AD模数转换 ---- 自学笔记

上一篇:AD转换之光敏电阻AIN2 ---- 学习笔记
下一篇:DS1302时钟 ---- 自学笔记

推荐阅读最新更新时间:2024-11-06 10:28

STC89C52单片机UART AD DA测试实验
/////////////////////////////////////////////////////////////////////////// 实现功能: 调节实验板上的标号为AD0的电位器改变电压,通过PCF8591的采集,把 数据传输给单片机,单片机通过处理把采集到的电压值,显示在数码管 上,同时把通过AD0采集到的数据重新写入PCF8591,让其转换成模拟信 号,改变开发板上D11的亮暗程度,而且把采集到的数据通过串口发送到 电脑上。注意所采用的通道为第0通道,也就 是说调节的是AD0电位器 实验板型号:KBL-XYD-C52 实验名称: UART AD DA测试实验
[单片机]
五环内全开通 智己汽车IM AD高速高架NOA年底将覆盖全国
9月15日,智己汽车公布 IM AD 高速高架NOA版图新进展。五环内高速高架 NOA 全开通,正式版本预计将于9月底推送L7、LS7全量用户。 IM AD高速高架NOA BETA版公测全新登陆六省九城,面向智己 L7、LS7 公测用户开放。包括广东省、山东省、云南省、贵州省、四川省、海南省的省域高速,以及东莞市、佛山市、济南市、青岛市、昆明市、贵阳市、常州市、南通市、台州市的市内高速高架路段。 截至目前,IM AD高速高架NOA已覆盖全国 12 省 26 城,预计今年年底将覆盖全国范围。 截止至 2024 年,IM AD 将实现 通勤模式、百城齐开 ;2025 年,迈入 Door to Door(全场景通勤)时代,
[汽车电子]
五环内全开通 智己汽车IM <font color='red'>AD</font>高速高架NOA年底将覆盖全国
STC12C5410AD学习板---红外解码
这个是我自制STC12C5410AD学习板的红外解码程序,此程序是针对SAA3010红外编码芯片来做解码的。如果换了其他芯片,只要修改红外芯片的头文件就可以了。 视频演示地址: http://v.youku.com/v_show/id_XMTUyMzQwMjg4.html 以下是详细程序: /*****Program Author : ZhengWen(ClimberWin) *****/ /*****E_mail : cooldianzi@163.com *****/ /******************************************************
[单片机]
STC12C5410<font color='red'>AD</font>学习板---红外解码
基于ADμC812单片机的多路温湿度测控系统
1 引言 由美国模拟器件公司新近推出的ADμC812单片机,其内部包含了高精度的8通道12位模数变换器(ADC),2通道12位数模变换器(DAC)以及可编程的8位(与8051单片机兼容)微控制器单元(MCU),另有8Kbytes闪速/电擦除程序存储器,640B的闪速/电擦除数据存储器,通用异步收发信机(UART),串行外围接口(SPI) 和I?2C串行总线端口,还有看门狗,电源监控等功能。它可广泛地应用于各种测控系统。本文主要介绍ADμC812单片机在多路温湿度测控系统中的应用。 2 ADμC812单片机介绍 2.1 功能方框图 ADμC812单片机的功能如图1所示。 2.2 模数转换部分 它包含了5μs、8通
[测试测量]
基于<font color='red'>AD</font>μC812单片机的多路温湿度测控系统
ADC技术帮助实现更精确测量
任何计量和医疗测量应用的一个关键考虑和成功因素就是模数转换器(ADC)模块。仪表和监视器将真实世界中的信号,即(定义上所说的)模拟信号,转换到数字电子领域来处理、记录和应对。用微控制器(MCU)读取并由ADC模块进行转换的最常见的测量信号是电压和电流,因为所有传感器都能够转换到这一电子领域。系统设计人员为其应用选择一款带有最合适ADC模块的MCU,并不像寻找信号粒度那样简单。分辨率只是部分考虑因素,除此之外,还要分析速度、线性度、噪声和其他导致测量误差的因素,并了解它们的影响。首先要找到一款合适的MCU产品,其次是了解ADC模块并使用该模块,以最大程度地减少不利影响,甚至将这些因素转化为系统的优势。 电表、高精度医疗设备等应用需
[测试测量]
ADC技术帮助实现更精确测量
低噪声、高通过率模数转换AD7731
1. 概述      AD7731是美国ADI公司开发的具有低噪声、高通过率等特性的∑-Δ模数转换器。它可直接接收来自传感器的输入信号,适合于测量具有广泛动态范围的低频信号,可广泛应用于应变测量、温度测量、压力测量及工业过程控制等领域。      AD7731可以作为过程控制应用的完整模拟前端,其独特的前端增益可编程功能允许AD7731直接接受来自传感器(如压力传感器或温度传感器)的各种范围的输入信号。AD7731采用三线模式串行接口,易于与微处理器或数字信号处理器接口,可广泛应用于数据采集系统和可编程逻辑控制系统。AD7731内含12个片内寄存器,通过串行口访问这些片内寄存器可以灵活设置器件的工作方。   AD77
[模拟电子]
基于MSC1210Y5的多通道数据采集系统
1 引言 以MSC1210Y5为核心的数据采集部分在工作时投放与水下、工作在无人值守的自容方式。由于海洋环境恶劣,所以仪器必须具有很好的可靠性及精确度,否则,就有可能给航行在测点附近海域的船舶提供不准确的海洋环境参数,笔者在灯船水文气象实测数据自动显示助航系统水下分机的设计中,成功应用了具有增强型8051内核微控制器和闪存的精密模数转换器MSC1210Y5,避免了微控制器和AD转换电路的单独分立设计,简化了电路,降低了功耗,增强了可靠性,提高了整个系统的工作速度。 2 MSC1210Y5的特性 MSC1210Y5是TQFP-64封装的低功耗完全集成混合信号IC,供电电压为2.7V-5.25V,它具有高精度的积分型模数转换器,
[工业控制]
艾默生网络能源发布AD8078瓦交流-直流电源适配器AD80
  艾默生(Emerson)下属公司艾默生网络能源公司(Emerson Network Power)进一步扩充其产品种类,推出高效78瓦交流-直流电源适配器。新款AD80电源适配器可充分调节90至264伏的交流输入电,生成一路高达3.25安的24伏连续输出电流,适合用户在世界各地使用。AD80为仪器、测试和测量系统、电讯、计算机辅助设备等各种便携式和桌面应用,提供极其灵活且经预先批准的电源解决方案。   AD80采用高效开关模式设计,符合能源之星(Energy Star)/蓝色天使(Blue Angel)的1瓦待机要求;其一般转换效率为84%。该适配器配备3针(C14型号)IEC320交流电源插口,以及方便用户使用的内部交流输入
[手机便携]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
更多每日新闻

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved