嵌入式(六)模数转换ADC | ADC 工作模式 寄存器 轮询和中断方式

文章目录

  • 1 CC2530的ADC模块
  • 2 ADC工作模式
  • 3 ADC相关寄存器
    • 3.1数据寄存器
    • 3.2 控制寄存器
  • 4 ADC初始化配置
  • 5 ADC使用方式
    • 5.1 轮询方式
    • 5.2 中断方式

模拟/数字转换 (Analog to Digital Converter,简称ADC)

是将输入的模拟信号转换为数字信号。

各种被测控的物理量(如:速度、压力、温度、光照强度、磁场等)是一些连续变化的物理量,传感器将这些物理量转换成与之相对应的电压和电流就是模拟信号。单片机只能接收数字信号,要处理这些信号就必须转换成数字信号,模拟/数字转换是数字测控系统中必须的信号转换。

原理是进行,以一定的频率采样电压值,连续采样一段时间

1 CC2530的ADC模块

CC2530的ADC模块 支持最高14位二进制 的模拟数字转换具有12位的有效数据位。

它包括一个输入多路切换器,具有8个各自可配置的通道;以及一个参考电压发生器。

转换结果通过DMA(直接内存访问)写入存储器,还具有多种运行模式。

先介绍运行模式

2 ADC工作模式

1 输入

ADC模块的输入——从哪些端口输入

对于CC2530的ADC模块,端口P0引脚可以配置为ADC输入端,

依次为AIN0~AIN7。

可以把输入配置为单端或差分输入

在选择单端输入的情况下,通道号码0-7

在选择差分输入的情况下,通道号码8-11,差分输入包括输入对AIN0-AIN1、

AIN2-AIN3、AIN4-AIN5和AIN6-AIN7 共四对、

通道12-15分别是GND,预留通道,温度传感器,AVDD5 在应用中这个输入可以实现一个电池电压监测器的功能。

为什么要进行差分输入,差分输入方式比单端输入来说,有更强的抗干扰能力

序列ADC转换与单通道ADC转换

3 ADC相关寄存器

3.1数据寄存器

ADC有两个数据寄存器:用来存放转换结果

ADCL(0xBA)-ADC数据低位寄存器、

ADCH(0xBB)-ADC数据高位寄存器,

3.2 控制寄存器

APCFG

8位模拟量输入来自I/O引脚,不必通过编程将这些引脚变为模拟输入。但是,当相应的模拟输入端在APCFG寄存器中被禁用时,此通道将被跳过。当使用差分输入时,相应的两个引脚都必须在APCFG寄存器中设置为模拟输入引脚。

APCFG寄存器描述如图所示

在这里插入图片描述

ADC还有三个控制寄存器:ADCCON1、ADCCON2和ADCCON3

ADCCON1

ADCCON1.ST用于启动一个转换序列。当没有转换正在运行时这个位设置为高电平

ADCCON1.STSEL位选择哪个事件将启动一个新的转换序列。该选项可以选择为外部引脚P2.0上升沿或外部引脚事件,之前序列的结束事件,定时器1的通道0比较事件或ADCCON1.ST是1。

ADCCON2

寄存器位ADCCON2.SCH用于定义一个ADC转换序列,如果ADCCON2.SCH设置为一个小于8的值,ADC转换序列包括

从0通道开始,直到并包括所设置的通道号码。当ADCCON2.SCH设置为一个8和12之间的值,转换序列包括

从通道8开始差分输入,到ADCCON2.SCH所设置的通道号码结束。

ADCCON2.SREF用于选择参考电压。

ADCCON2.SDIV位用来选择抽取率,抽取率的设置决定分辨率和完成一个转换所需要的时间。

ADCCON2.SCH设置转换序列的最后一个通道数

ADCCON3

单通道ADC转换通过写ADCCON3寄存器触发,转换立即开始。

除非一个转换序列已经正在进行,在这种情况下序列一完成,单个通道的ADC转换就会被执行。

除可以设置为按序列进行ADC转换之外,CC2530的ADC模块可以编程实现任何单个通道执行一个转换,包括温度传感器(14)和AVDD5/3(15)两个通道。

单通道ADC转换通过写ADCCON3寄存器触发,转换立即开始。除非一个转换序列已经正在进行,在这种情况下序列一完成,单个通道的ADC转换就会被执行。

4 ADC初始化配置

LED初始化

串口通信初始化

AD初始化

注意分辨率与精确度的区别

分辨率 分辨率由比特数决定,比如16位器件,则可以表示65536个独立的数字值,那么对于1bit而言,代表着最小的电平为 A D C 电压范围 × 1 65536 ADC电压范围× \frac{1}{65536} ADC电压范围×655361

精确度 是指对于给定模拟输入,实际数字输出与理论预期数字输出之间的接近度。

理论上精确度和分辨率相同,但由于实际中出现各种误差源,因而不能达到很高的精确度,比如只能16位器件只能提供12位精确度(有效数据),对于这种情况,4LSb(最低有效位)表示ADC中生成的随机噪声

电压计算公式 =ADC/精度*参考电压。

Value=(ADCH*256+ADCL)*3.3/8192。

ADC:把AD转换后得到的ADCL、ADCH做处理,将ADCL(低6位)放在低字节,ADCH(高8位)放在高字节。将一个uint16右移两位(最后两位没有用),即得到14位ADC。精度:根据所选位数,例如本任务位数选14位,精度=2^13=8192。

注意三个ADCCON1,2,3区别

首先通过ADCCON1寄存器将EOC标志清零。若为序列ADC转化则需要用到ADCCON2寄存器,若为单通道ADC转换则需要使用ADCCON3寄存器。通过这两个寄存器其一可以设置ADC转换的参考电压和通道的抽取率(精度)。若为ADCCON2寄存器还可以设置序列转换的范围,对于ADCCON3寄存器可以设置单个通道的转化。最后通过ADCCON1寄存器的STSEL位和ST位来启动ADC转换。

5 ADC使用方式

5.1 轮询方式

while(1) {if(ADCCON1>=0x80) { //ADCCON1.EOC,转换完毕判断LED1 = 0; //转换完毕指示LED2= 1; //打开数据处理指示灯temp[1] = ADCL;temp[0] = ADCH;adc |= (uint)temp[1];adc |= ( (uint) temp[0] )<<8;adc>>=2; // ADCL[1:0]没用使用num = adc*3.3/8192;//定参考电压为3.3V。14位分辨率adcdata[1] = (char)(num)%10+48;adcdata[3] = (char)(num*10)%10+48;UartTX_Send_String(adcdata,6); //串口送数LED2= 0; //完成数据处理delay(30000);InitialAD(); //启动下一次转换} 
}

5.2 中断方式

通过设置ADCCON3启动的单次ADC转换完成时才会产生中断。 (序列ADC转换完成不会产生中断)

#pragma vector = ADC_VECTOR
__interrupt void ADC_ISR(void) {float num; char temp[2]; uint adc=0;temp[1] = ADCL;temp[0] = ADCH;adc |= (uint)temp[1];adc |= ( (uint) temp[0] )<<8;adc>>=2; // ADCL[1:0]没用使用num = adc*1.25/8192;//参考电压为1.25V,12位有效位adcdata[1] = (char)(num)%10+48;adcdata[3] = (char)(num*10)%10+48;adcComplete1 = 1; //设置转换完成的全局变量
}

序列转换和单次转换的区别

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

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

相关文章

压缩编码之离散余弦变换(DCT)之不同块大小对图像质量和压缩效果的影响的python实现

原理 离散余弦变换&#xff08;DCT&#xff09;是一种在图像压缩中广泛使用的技术&#xff0c;特别是在JPEG图像格式中。 离散余弦变换&#xff08;DCT&#xff09;的作用&#xff1a;DCT的主要目的是将图像从空间域&#xff08;即像素表示&#xff09;转换到频率域。在频率域…

树莓派4B-Python-使用PCA9685控制舵机云台+跟随人脸转动

系列文章 树莓派4B-Python-控制舵机树莓派-Pico控制舵机树莓派4B-Python-使用PCA9685控制舵机云台跟随人脸转动&#xff08;本文章&#xff09; 目录 系列文章前言一、SG90s舵机是什么&#xff1f;二、PCA9685与舵机信号线的接线图三、控制SG90s云台&#xff08;也可用来测试舵…

Marin说PCB之传输线损耗---趋肤效应和导体损耗01

大家在做RF上的PCB走线或者是车载相机的上走线的时候经常会听那些硬件工程师们说你这个走线一定要保证50欧姆的阻抗匹配啊&#xff0c;还有就是记得加粗走做隔层参考。 有的公司的EE硬件同事会很贴心的把RF走线的注意事项给你备注在原理图上或者是layoutguide上&#xff0c;遇到…

Vue-路由-声明式导航

1. 导航链接 vue-router 提供了一个全局组件 router-link (取代 a 标签) 能跳转&#xff0c;配置 to 属性指定路径(必须) 。本质还是 a 标签 &#xff0c;to 无需 #能高亮&#xff0c;默认就会提供高亮类名&#xff0c;可以直接设置高亮样式 如&#xff1a; <div class&…

UML-顺序图

提示&#xff1a;用例图从参与者的角度出发&#xff0c;描述了系统的需求&#xff08;用例图&#xff09;&#xff1b;静态图定义系统中的类和对象间的静态关系&#xff08;类图、对象图和包图&#xff09;&#xff1b;状态机模型描述系统元素的行为和状态变化流程&#xff08;…

redis数据结构源码分析——跳表zset

文章目录 跳表的基本思想特点节点与结构跳跃表节点zskiplistNode属性 跳跃表链表属性 跳表的设计思想和优势API解析zslCreate&#xff08;创建跳跃表&#xff09;zslCreateNode&#xff08;创建节点&#xff09;zslGetRank&#xff08;查找排位&#xff09;zslDelete&#xff0…

css3 2D与3D转换

css3 2D与3D转换 前言2D变形旋转变形 rotate()transform-origin属性 缩放变形 scale()斜切变形 skew()位移变形 translate() 3D变形3D旋转 rotateX() | rotateY()perspective属性 空间移动 制作一个正方体结语 前言 网页设计不再局限于平面&#xff0c;而是充满了立体感和动态…

人工智能主流技术详解

人工智能&#xff08;Artificial Intelligence&#xff0c;简称AI&#xff09;是当今科技领域发展最迅速、最令人振奋的分支之一。本文将带您深入了解人工智能的主流技术&#xff0c;探索AI如何影响我们的生活、工作以及未来的发展。 一、什么是人工智能&#xff1f; 人工智能&…

烟火检测AI边缘计算智能分析网关V4在安防项目中的应用及特点

一、行业背景 随着社会和经济的发展&#xff0c;公共安全和私人安全的需求都在不断增长。人们需要更高效、更准确的安防手段来保障生命财产安全&#xff0c;而人工智能技术正好可以提供这种可能性&#xff0c;通过智能监控、人脸识别、行为分析等手段&#xff0c;大大提高了安防…

非线性方程求根迭代法(C++)

文章目录 问题描述算法描述不动点迭代法一维情形多维情形 牛顿迭代法单根情形重根情形 割线法抛物线法逆二次插值法 算法实现准备工作一般迭代法割线法抛物线法逆二次插值法 实例分析例1例2 迭代法是一种求解非线性方程根的方法, 它通过构造一个迭代过程, 将一个非线性方程转化…

ssm基于web办事大厅政务预约系统+vue论文

摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本办事大厅政务预约系统就是在这样的大环境下诞生&#xff0c;其可以帮助管理者在短时间内处理完毕庞大的数据…

【MySQL】聚合函数

文章目录 聚合函数是什么&#xff1f;一、AVG和SUM函数二、MIN和MAX函数三、COUNT函数四、GROUP BY1. 基本使用2. 使用多个列分组3. GROUP BY中使用WITH ROLLUP 五、HAVING1. 基本使用2. HAVING 与 WHERE 的区别 六、SELECT的执行过程1. 查询结构2. SELECT执行顺序 综合练习 聚…

关于浏览器下载的时候出现失败,网络错误

我试过所有浏览器&#xff0c;谷歌&#xff0c;firefox,qq浏览器&#xff0c;还是edge都不好使&#xff0c; 1.看网上说是http debugger的问题&#xff0c;但是我没有找到这个服务项 2.也有说可以通过修改或设置下载路径解决 -------- 我通过下载一个叫xdm的软件&#xff…

web前端算法简介之字典与哈希表

回顾 栈、队列 &#xff1a; 进、出 栈&#xff08;Stack&#xff09;&#xff1a; 栈的操作主要包括&#xff1a; 队列&#xff08;Queue&#xff09;&#xff1a; 队列的操作主要包括&#xff1a; 链表、数组 &#xff1a; 多个元素存储组成的 简述链表&#xff1a;数组&…

【Java】IDEA中的JFormDesigner使用教程

目录 1 安装 JFormDesigner 插件2 JFormDesigner 使用教程2.1 新建JFormDesigner Form时的选项2.2 JFormDesigner Form界面布局2.3 JFormDesigner 常用组件 JFormDesigner 是一款用于设计和创建图形用户界面&#xff08;GUI&#xff09;的插件&#xff0c;它允许开发者使用可视…

ZZULIOJ 1112: 进制转换(函数专题)

题目描述 输入一个十进制整数n&#xff0c;输出对应的二进制整数。常用的转换方法为“除2取余&#xff0c;倒序排列”。将一个十进制数除以2&#xff0c;得到余数和商&#xff0c;将得到的商再除以2&#xff0c;依次类推&#xff0c;直到商等于0为止&#xff0c;倒取除得的余数…

ZZULIOJ 1110: 最近共同祖先(函数专题)

题目描述 如上图所示&#xff0c;由正整数1, 2, 3, ...组成了一棵无限大的二叉树。从某一个结点到根结 点&#xff08;编号是1 的结点&#xff09;都有一条唯一的路径&#xff0c;比如从10 到根结点的路径是(10, 5, 2, 1)&#xff0c; 从4 到根结点的路径是(4, 2, 1)&#xff0…

xtu oj 1340 wave

题目描述 一个n列的网格&#xff0c;从(0,0)网格点出发&#xff0c;波形存在平波(从(x,y)到(x1,y))&#xff0c;上升波(从(x,y)到(x1,y1))&#xff0c;下降波(从(x,y)到(x1,y−1))三种波形&#xff0c;请问从(0,0)出发&#xff0c;最终到达(n,0)的不同波形有多少种&#xff1f…

关于 setData 同步异步的问题

小程序官方文档中的回答解释: 所以大概意思就是: 1.setData在逻辑层的操作是同步&#xff0c;因此this.data中的相关数据会立即更新,比如下面的例子: const a 1 this.setData({b: a ? a : , }) console.log(that.data.b) // 1 2. setData在视图层的操作是异步&#xff0c;…

本地开发环境请求服务器接口跨域的问题(vue的问题)

上面的这个报错大家都不会陌生&#xff0c;报错是说没有访问权限&#xff08;跨域问题&#xff09;。本地开发项目请求服务器接口的时候&#xff0c;因为客户端的同源策略&#xff0c;导致了跨域的问题。下面先演示一个没有配置允许本地跨域的的情况&#xff1a; 可以看到&…