普中51单片机学习(AD转换)

AD转换

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

量化误差
ADC把模拟量变为数字量,用数字量近似表示模拟量,这个过程称为量化。量化误差是ADC的有限位数对模拟量进行量化而引起的误差。实际上,要准确表示模拟量,ADC的位数需很大甚至无穷大。一个分辨率有限的ADC的阶梯状转换特性曲线与具有无限分辨率的ADC转换特性曲线(直线)之间的最大偏差即是量化误差。

偏移误差
偏移误差是指输入信号为零时,输出信号不为零的值,所以有时又称为零值误差。假定ADC没有非线性误差,则其转换特性曲线各阶梯中点的连线必定是直线,这条直线与横轴相交点所对应的输入电压值就是偏移误差。

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

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

绝对精度
在一个转换器中,任何数码所对应的实际模拟量输入与理论模拟输入之差的最大值,称为绝对精度。对于ADC而言,可以在每一个阶梯的水平中点进行测量,它包括了所有的误差。

转换速率
ADC的转换速率是能够重复进行数据转换的速度,即每秒转换的次数。而完成一次A/D转换所需的时间(包括稳定时间),则是转换速率的倒数。
在这里插入图片描述
逐次逼近式ADC的转换原理
在这里插入图片描述
逐次逼近式AD转换器与计数式A/D转换类似,只是数字量由“逐次逼近寄存器SAR”产生。SAR使用“对分搜索法”产生数字量,以8位数字量为例,SAR首先产生8位数字量的一半,即10000000B,试探模拟量Vi的大小,若Vn>Vi,清除最高位,若Vn<Vi,保留最高位。在最高位确定后,SAR又以对分搜索法确定次高位,即以低7位的一半y1000000B(y为已确定位) 试探模拟量Vi的大小。在bit6确定后,SAR以对分搜索法确定bit5位,即以低6位的一半yy100000B(y为已确定位) 试探模拟量的大小。重复这一过程,直到最低位bit0被确定,转换结束。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 如果要检测转换电位器模拟信号,控制字命令寄存器值为0X94或者0XB4.
  • 如果要检测转换热敏电阻模拟信号,控制字命令寄存器值为0XD4.
  • 如果要检测转换光敏电阻模拟信号,控制字命令寄存器值为0XA4.
  • 如果要检测转换AIN3通道上模拟信号,控制字命令寄存器值为0XE4.

在这里插入图片描述

实验代码

XPT2046.h

#ifndef _XPT2046_H
#define _XPT2046_H#include "reg52.h"
#include "intrins.h"#ifndef uchar
#define uchar unsigned char
#endif#ifndef uint
#define uint unsigned int
#endifsbit DOUT=P3^7;
sbit CLK=P3^6;
sbit DIN=P3^4;
sbit CS=P3^5;uint Read_AD_Data(uchar cmd);
uint SPI_Read(void);
void SPI_Write(uchar dat);#endif

XPT2046.c

#include "XPT2046.h"void SPI_Write(uchar dat)
{uchar i;CLK=0;for(i=0;i<8;i++){DIN=dat>>7;dat<<=1;CLK=0;CLK=1;}
}uint SPI_Read(void)
{uint i,dat=0;CLK=0;for(i=0;i<12;i++){dat<<=1;CLK=1;CLK=0;dat|=DOUT;}return dat;
}uint Read_AD_Data(uchar cmd)
{uchar i;uint AD_Value;CLK=0;CS=0;SPI_Write(cmd);for(i=0;i<6;i++){	}CLK=1;_nop_();_nop_();CLK=0;_nop_();_nop_();AD_Value=SPI_Read();CS=1;return AD_Value;
}

main.c

#include "reg52.h"
#include "XPT2046.h"typedef unsigned int u16;
typedef unsigned char u8;sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;u8 disp[4];
u8 code smgduan[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};void delay(u16 i)
{while(i--);
}void datapros()
{u16 temp;static u8 i;if(i==50){i=0;temp=Read_AD_Data(0x94);}i++;disp[0]=smgduan[temp/1000];disp[1]=smgduan[temp%1000/100];disp[2]=smgduan[temp%100/10];disp[3]=smgduan[temp%10];
}void DigDisplay()
{u8 i;for(i=0;i<4;i++){switch(i)	 //位选,选择点亮的数码管,{case(0):LSA=0;LSB=0;LSC=0; break;//显示第0位case(1):LSA=1;LSB=0;LSC=0; break;//显示第1位case(2):LSA=0;LSB=1;LSC=0; break;//显示第2位case(3):LSA=1;LSB=1;LSC=0; break;//显示第3位	}P0=disp[3-i];//发送数据delay(100); //间隔一段时间扫描	P0=0x00;//消隐}		
}void main()
{while(1){datapros();DigDisplay();}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/700455.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Kafka】消息重复场景及解决

目录 生产者阶段重复根本原因过程记录顺序问题解决方案 生产者和broker阶段消息丢失原因解决 消费者阶段重复根本原因解决 生产者阶段重复 根本原因 生产发送的消息没有收到正确的broke响应&#xff0c;导致生产者重试。 生产者发出一条消息&#xff0c;broke落盘以后因为网…

【报错】在等待缓存锁:无法获得锁 /var/lib/dpkg/lock-frontend。锁正由进程 4832(apt)持有... 30秒

1 背景 在安装多种多媒体解码器(包括H.264解码器)的时候,使用如下命令: sudo apt install ubuntu-restricted-extras然后报错如下: 在等待缓存锁:无法获得锁 /var/lib/dpkg/lock-frontend。锁正由进程 4832(apt)持有... 30秒 2 解决方法 输入如下命令: sudo rm /v…

精读《前端未来展望》

1. 引言 前端展望的文章越来越不好写了&#xff0c;随着前端发展的深入&#xff0c;需要拥有非常宽广的视野与格局才能看清前端的未来。 笔者根据自身经验&#xff0c;结合下面几篇文章发表一些总结与感悟&#xff1a; A Look at JavaScript’s Future前端开发 20 年变迁史前…

2024/02/19

额&#xff0c;忘了&#xff0c;&#xff0c;&#xff0c;&#xff0c; 我再想想&#xff0c;&#xff0c;&#xff0c;今日星期一好像今天分配给我的任务就是以后远程xd现场。

torch报错:[winerror 126] 找不到指定的模块torch_python.dll“ or one of its dependencies.

[winerror 126] 找不到指定的模块。 error loading "d:\miniconda\envs\action_env\lib\site-packages\torch\lib\torch_python.dll" or one of its dependencies. 在使用这个yolov5模块的时候发现了这个错误&#xff0c;错误原因是因为python版本和torch版本冲突。…

linux drm mipi dsi lcd 点屏之设备树配置

linux drm mipi dsi lcd 点屏之设备树配置 设备树文档&#xff1a; https://elixir.bootlin.com/linux/v6.8-rc5/source/Documentation/devicetree/bindings/display/dsi-controller.yaml https://elixir.bootlin.com/linux/v6.8-rc5/source/Documentation/devicetree/binding…

网络安全笔记总结

IAE引擎 1.深度检测技术--DFI和DPI技术 DFI和DPI都是流量解析技术&#xff0c;对业务的应用、行为及具体信息进行识别&#xff0c;主要应用于流量分析及流量检测。 DPI&#xff1a;深度包检测技术 DPI是一种基于应用层的流量检测和控制技术&#xff0c;对流量进行拆包&#x…

6.openEuler系统服务的配置和管理(二)

openEuler OECA认证辅导,标红的文字为学习重点和考点。 如果需要做实验,建议安装麒麟信安、银河麒麟、统信等具有图形化的操作系统,其安装与openeuler基本一致。 3.任务管理 任务的概念和相关术语: 当你在终端或控制台工作时,可能不希望由于运行一个作业而占住了屏幕,因…

我花了5天时间,开发了一个在线学习的小网站

大三寒假赋闲在家&#xff0c;闲来无事&#xff0c;用了5天时间做了一个在线学习的小网站&#xff0c;一鼓作气部署上线&#xff0c;制作的过程比较坎坷。内心经历过奔溃&#xff0c;也经历过狂喜。 按照惯例先放出网址&#xff0c;欢迎大家来访问学习&#xff1a;www.pbjlove…

LabVIEW串口通信的激光器模块智能控制

LabVIEW串口通信的激光器模块智能控制 介绍了通过于LabVIEW的VISA串口通信技术在激光器模块控制中的应用。通过研究VISA串口通信的方法和流程&#xff0c;实现了对激光器模块的有效控制&#xff0c;解决了数据发送格式的匹配问题&#xff0c;为激光器模块的智能控制提供了一种…

【Nginx】微信小程序后端开发、一个域名访问多个服务

【Nginx】微信小程序后端开发、一个域名访问多个服务 1. 微信小程序后端开发 对于后端程序员&#xff0c;其实你们的职责就是干老本行&#xff0c;即写接口和服务&#xff0c;让前端能够访问你的接口就行&#xff0c;必要时需要查看微信小程序开发文档去向微信服务器发请求。…

题目 1262: 邮局选址问题

题目描述: 在一个按照东西和南北方向划分成规整街区的城市里&#xff0c;n个居民点散乱地分布在不同的街区中。用x 坐标表示东西向&#xff0c;用y坐标表示南北向。各居民点的位置可以由坐标(x,y)表示。街区中任意2 点(x1,y1)和(x2,y2)之间的距离可以用数值|x1-x2||y1-y2|度量…

基于STM32的RFID与指纹识别门禁系统设计

基于STM32的RFID与指纹识别门禁系统设计 摘要 本文详细介绍了基于STM32微控制器的RFID与指纹识别门禁系统的设计和实现。系统结合了无线射频识别(RFID)和生物识别技术中的指纹识别,旨在提供一种既安全又便捷的门禁解决方案。文章从系统设计的角度出发,对硬件和软件设计进…

c#高级——插件开发

案例&#xff1a;WinForm计算器插件开发 1.建立插件库&#xff0c;设置各种自己所需的插件组件 如下图所示&#xff1a;进行了计算器的加减法插件计算组件 Calculator_DLL为总插件父类 Calculator_DLL_ADD 为插件子类的控件对象 Calculator_DLL_Sub Calculator_DLL_Factory 为…

即时设计和Axure对比,哪一个好用?

无论是国外页面设计工具&#xff0c;页面设计工具的发展从来没有停滞过&#xff0c; Axure&#xff0c;无论是国产设计工具即时设计&#xff0c;其功能都在不断更新迭代&#xff0c;为设计带来更高效的设计体验。今天对比两个设计工具&#xff0c;帮你找到最适合自己的&#xf…

用友NC65与用友NCC对接集成NC65-凭证列表查询打通凭证新增

用友NC65与用友NCC对接集成NC65-凭证列表查询打通凭证新增 数据源平台:用友NC65 用友NC是为集团与行业企业提供的全线管理软件产品&#xff0c;由亚太本土最大的企业管理软件提供商用友公司研发提供&#xff0c;用友NC率先采用J2EE架构和先进开放的集团级开发平台UAP&#xff0…

计算机网络-无线通信网

1.各种移动通信标准 1G&#xff1a;第一代模拟蜂窝&#xff1a;频分双工FDD。2G&#xff1a;第二代数字蜂窝 I.GDM&#xff08;全球移动通信&#xff09;采用TDMA。II.CDMA&#xff08;码分多址通信&#xff09;。2.5G&#xff1a;第2.5代通用分组无线业务GPRS。2.75G&#xf…

C语言-指针详解速成

1.指针是什么 C语言指针是一种特殊的变量&#xff0c;用于存储内存地址。它可以指向其他变量或者其他数据结构&#xff0c;通过指针可以直接访问或修改存储在指定地址的值。指针可以帮助我们在程序中动态地分配和释放内存&#xff0c;以及进行复杂的数据操作。在C语言中&#…

Redis篇之Redis持久化的实现

持久化即把数据保存到可以永久保存的存储设备当中&#xff08;磁盘&#xff09;。因为Redis是基于内存存储数据的&#xff0c;一旦redis实例当即数据将会全部丢失&#xff0c;所以需要有某些机制将内存中的数据持久化到磁盘以备发生宕机时能够进行恢复&#xff0c;这一过程就称…

如何用爬虫软件导出抖店商家的联系方式

介绍&#xff1a; 抖店是一款电商平台&#xff0c;许多商家在抖店上开设店铺进行销售。如果你想与抖店商家取得联系&#xff0c;可以通过爬虫软件来导出商家的联系方式。本文将介绍如何使用Python编写爬虫代码来实现这个功能。 步骤&#xff1a; 环境准备&#xff1a; 安装Pyt…