nRF52832 之ADC的使用
简介
实际应用中, 我们经常需要将模拟量转换为数字量供 CPU 处理,如电池电压检测、温度检测等等,对于 CPU 来说,它能处理的是数字量,所以,需要通过 A/D 转换(模数转换)将时间连续、幅值也连续的模拟量转换为时间离散、幅值也离散的数字信号,从而实现 CPU对模拟信号的处理,能够实现A/D转换功能的电路称之为模数转换器(ADC: Analog-to-digitalconverter)。
ADC 的结构和实现原理有多种方式,常见的 ADC 的类型有积分型、逐次逼近型、 并行比较型/串并行型、Σ -Δ调制型等。
nRF52832 集成的是逐次逼近型 ADC,称为 SAADC(Successive approximation analog-todigital converter)。 SAADC 是利用二分法逐步比较,在有效精度范围内找到最接近输入模拟信号的数字量。由此可见,这种结构的 ADC 要完成一次转换,至少要比较 N 次, 所以其转换速度较慢,同时电路结构也比较简单,功耗较低,适用于便携式、穿戴式等低功耗应用领域。
nRF52832 的 SAADC 主要特征
nRF52832的ADC叫做SAADC,其特征如下:
- 8/10/12 位分辨率,使用过采样可达到 14 位分辨率。
- 共 8 个输入通道。
⚫ 单端输入时使用 1 个通道, 2 个通道可组成差分输入。
⚫ 单端和差分输入时均可配置为扫描模式。 - 满量程输入范围(0 to VDD)。
- 可以通过软件触发采样任务启动采样,也可以使用低功耗的 32.768kHz RTC 或更加精确
1/16MHz 定时器通过 PPI 触发采样任务,从而使能 SAADC 具备非常灵活的采样频率。 - SAADC 支持单次模式和扫描模式:
⚫ 单次模式一次采样一个通道。
⚫ 扫描模式按照顺序采样一系列通道。通道之间的采样延迟是 tack + tconv,各个通道
之间的采样延迟可能不一样,因为 tack是软件可配置的。 - 通过 EasyDMA 可以直接将采样结果保存到 RAM。
- 无需外部定时器即可实现连续采样。
- 单个采样和缓冲区满均可产生事件中断。
- 差分和单端采样数据存储为 16 位 2 的补码值。
- 内部电阻串。
- 即时门限监测功能。
nRF52832 的 ADC 支持多达 8 个外部模拟输入通道,它的数字引脚是可以自由映射的,但是模拟输入的引脚是固定的,如下表所示,ADC 和 COMP、 LPCOMP 等其它外设共用模拟输入 AIN0-AIN7,但是这些外设功能需要分配到不同的引脚
代码示例
以P0.04 io单次采样读取AD采样值为例
,对应ADC为 AIN2。
SAADC头文件
#include "nrf_delay.h" //nRF52832延时函数头文件#include "nrf_drv_saadc.h"
SAADC配置
//SAADC事件回调函数,因为是堵塞模式,所以不需要事件,这里定义了一个空的事件回调函数
void saadc_callback(nrf_drv_saadc_evt_t const * p_event){}//初始化SAADC,配置使用的SAADC通道的参数
void saadc_init(void)
{ret_code_t err_code;//定义ADC通道配置结构体,并使用单端采样配置宏初始化,//NRF_SAADC_INPUT_AIN2是使用的模拟输入通道nrf_saadc_channel_config_t channel_config =NRFX_SAADC_DEFAULT_CHANNEL_CONFIG_SE(NRF_SAADC_INPUT_AIN2);//初始化SAADC,注册事件回调函数。err_code = nrf_drv_saadc_init(NULL, saadc_callback);APP_ERROR_CHECK(err_code);//初始化SAADC通道0err_code = nrfx_saadc_channel_init(0, &channel_config);APP_ERROR_CHECK(err_code);}
ADC数值读取
while(1)
{ //启动一次ADC采样(阻塞模式)。nrfx_saadc_sample_convert(0,&saadc_val);//串口输出ADC采样值。printf("Sample value is: %d\r\n", saadc_val);//延时300ms,方便观察SAADC采样数据nrf_delay_ms(500);
}
效果如下
nRF52832 之ADC的使用相关推荐
- NRF52832 saadc
本博客参考https://blog.csdn.net/qq_36347513/article/details/103853796 本博客基于NRF--SDK17.0.0协议栈的ble_app_temp ...
- NRF52810能不能替代NRF52832
NRF52810能不能替代NRF52832?答案是可以的. 主要是FALSH和RAM有点不一样. 先给大家说说他的特征 关键特性 64 MHz的手臂®Cortex-M4 192kb Flash + 2 ...
- NRF52832+DW1000通信系统架构设计
DW1000芯片是一款完全集成的单芯片超宽带(UWB)低功耗低成本收发器IC,符合IEEE802.15.4-2011.它可用于双向测距或时差定位系统,定位精度为10厘米,支持以高达6.8 Mbps的速 ...
- NRF52832官方SDK介绍
SDK(Software Development Kit)是指软件开发包,一般是由官方提供,主要用来介绍开发流程,提供常用的例程代码等等.可以降低开发者使用的门槛,提高开发效率,所以在开发者在进行具体 ...
- 02 nRF52832芯片简介
nRF52832芯片简介 nRF52832 SoC是一款功能强大,高度灵活的超低功耗多协议SoC,非常适合低功耗蓝牙,ANT和2.4GHz超低功耗无线应用.它和普通的单片机如51.stm32等最大的不 ...
- nRF52833及蓝牙5系列NRF52832低功耗蓝牙芯片对比
目录 NRF52833简介 NRF52833结构框图 芯片特性 对比NRF52832 及蓝牙52系列选型参考 NRF52833简介 nRF52833是一款通用多协议SoC,具有蓝牙测向功能,可在-40 ...
- NRF52832学习笔记(33)——低功耗实现
一.功耗模式 nRF52 上只有两种电源模式:SYSTEM_ON 和 SYSTEM_OFF 1.1 SYSTEM_ON低功耗模式 SYSTEM_ON:此状态有持续延迟和低功率子模式.当系统空闲进入 S ...
- NRF52833对比NRF52832低功耗蓝牙5.0芯片
nRF52833是一款通用多协议SoC,具有蓝牙测向功能,可在-40°C至105°C的温度范围内运行.它是行业领先的nRF52系列的第5款产品,系NRF52832升级版,围绕64 MHz Arm Co ...
- 低成本低功耗蓝牙芯片PHY6212可代替NRF52832
PHY6212是一款超低功耗物联网蓝牙无线通信芯片,搭载32位ARM Cortex-M0 CPU,配备138KSRAM/Retention SRAM,具有超低功耗.高性能和无线多模的特点,支持安全性. ...
最新文章
- 矢量图面层和线层相交得到相交后的线层文件(gis相交)
- 用枚举来处理java自定义异常
- php 前端及时同步,php与前端界面的实时通信
- Java通过链表实现队列
- 《啊哈!算法》笔记_Day02
- c语言is stack empty,C语言实现栈的问题
- 按钮不通过表单连接servlet_JavaWeb之Servlet(一)
- sqlserver2008r2安装
- 从小小后视镜看物联网的生态(上)
- 【实际经验】一台无系统PC机连接局域网产生的问题
- mysq命令行导出sql_mysql利用命令导出数据sql语句
- python分词,提高分词准确率
- 要学习使用 calib3D 模块在图像中创建 3D 效果-姿势估计
- 平行四边形不等式优化详解
- [论文笔记]Rob-GAN: Generator, Discriminator, and Adversarial Attacker(CVPR 2019)
- python smtp QQ邮箱 发送附件
- 小米市场魅力所在?你读懂小米了么?
- MySQL 时间戳操作
- 云服务器和共享主机,共享虚拟主机、独享虚拟主机还是云服务器?
- 前端知识总结之基础知识