52832 3通道ADC笔记

因为业务需要, 需要在52832上, 采集3个pin的电压.
52832的ADC, 分为什么single, 连续, 扫描模式
single就是只有一个通道并采集一次, 连续就是不停的扫描, 如果要捕捉声音之类, 就配合DMA, 连续不停的采集, 转换就行了.
扫描模式就是如果是多通道, 就一开始初始化多个通道, 存放数据的数组, 以及采样次数, 然后全扫, 扫完回调中去拿数据即可.

初始化:

// 初始化SAADC,配置使用的SAADC通道的参数和缓存
void saadc_3c_init(void) {ret_code_t err_code;// 使用NRF_SAADC_INPUT_AIN7通道,即P0.31引脚, 生成一个通道配置结构体nrf_saadc_channel_config_t channel_config = NRFX_SAADC_DEFAULT_CHANNEL_CONFIG_SE(NRF_SAADC_INPUT_AIN7);err_code = nrf_drv_saadc_init(NULL, saadc_callback);APP_ERROR_CHECK(err_code);// 初始化ADC通道0err_code = nrfx_saadc_channel_init(0, &channel_config);APP_ERROR_CHECK(err_code);// 为NRF_SAADC_INPUT_AIN5, 初始化ADC 通道1channel_config.pin_p = NRF_SAADC_INPUT_AIN5;err_code = nrfx_saadc_channel_init(1, &channel_config);// 为NRF_SAADC_INPUT_AIN6, 初始化ADC 通道2APP_ERROR_CHECK(err_code);channel_config.pin_p = NRF_SAADC_INPUT_AIN6;err_code = nrfx_saadc_channel_init(2, &channel_config);APP_ERROR_CHECK(err_code);// 双缓存模式err_code = nrfx_saadc_buffer_convert(m_buffer_pool[0], ADC_SAMPLES_BUFFER_LEN);APP_ERROR_CHECK(err_code);err_code = nrfx_saadc_buffer_convert(m_buffer_pool[1], ADC_SAMPLES_BUFFER_LEN);APP_ERROR_CHECK(err_code);}

这里使用的是双缓存模式, 采样的数据量为ADC_SAMPLES_BUFFER_LEN, 因为是3个通道, 所以采样3次就行了, 或者你喜欢浪费时间, 采样3的倍数也可以,如果不是3的倍数, 就会出现数据错位.

注册的回调时saadc_callback
这里使用的是非阻塞模式, 因为毕竟有蓝牙, 你阻塞好像不是那么回事.


// SAADC事件回调函数,只有一个缓存填满后才会进入事件回调函数
static void saadc_callback(nrfx_saadc_evt_t const *p_event) {float val; // 保存SAADC采样数据计算的实际电压值if (p_event->type == NRFX_SAADC_EVT_DONE) {ret_code_t err_code;// 设置好缓存,为下一次采样准备err_code = nrfx_saadc_buffer_convert(p_event->data.done.p_buffer, ADC_SAMPLES_BUFFER_LEN);APP_ERROR_CHECK(err_code);int i;// 串口输出ADC采样值。// NRF_LOG_INFO("ADC event number: %d \n", (int) m_adc_evt_counter);for (i = 0; i < ADC_SAMPLES_BUFFER_LEN; i++) {// 如果直接输出采样结果,使用这个代码int16_t adc_result = p_event->data.done.p_buffer[i];// NRF_LOG_INFO("Sample value: %d \n", adc_result);// 电压值 = 采样值 * 3.6 /2^10// val = p_event->data.done.p_buffer[i] * 3.6 / 1024;// NRF_LOG_INFO("Voltage = %.3fV\n", val);}uint8_t batVolPercentage = get_battery_percentage(p_event->data.done.p_buffer[0]);NRF_LOG_INFO("batVolPercentage:%d \n", batVolPercentage);dis_battery_level_update_handle(batVolPercentage);// 事件次数加1m_adc_evt_counter++;}
}

回调中, 先转换, 然后就可以打印每个数据的内容, 查看adc的采样值. 并根据业务需要, 比如把adc值转成mv为单位的电压值, 然后做char值修改等等.

static uint8_t get_battery_percentage(nrf_saadc_value_t adc_result) {uint16_t batt_lvl_in_milli_volts;batt_lvl_in_milli_volts = ADC_RESULT_IN_MILLI_VOLTS(adc_result) + DIODE_FWD_VOLT_DROP_MILLIVOLTS;NRF_LOG_INFO("battery = %d mv \n\r", batt_lvl_in_milli_volts);return bat_mini_volt_to_percentage(batt_lvl_in_milli_volts);
}

这里是adc转mv, 下面是我老板写的, mv转百分数.

// 针对4.2伏特锂电池的点亮百分比算法.
uint8_t bat_mini_volt_to_percentage(uint16_t mvolts) {uint8_t battery_level;if (mvolts >= 4200) {battery_level = 100;} else if (mvolts > 3720) {battery_level = 100 - (4200 - mvolts) / 6;} else if (mvolts > 3200) {battery_level = 20 - (3720 - mvolts) / 26;} else {battery_level = 0;}return battery_level;
}

原谅有这么多魔术数字, 你自己写的时候可不能这样哦…

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

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

相关文章

Lua-http库写一个爬虫程序怎么样 ?

以下是一个使用Lua-http库编写的一个爬虫程序&#xff0c;该爬虫使用Lua语言来抓取www.snapchat.com的内容。 代码必须使用以下代码&#xff1a;get_proxy -- 导入所需的库 local http require("http") local json require("json")-- 定义爬虫IP服务器 …

安装docker ,更换docker版本

docker dockerd & containerd Dockerd&#xff08;Docker 守护进程&#xff09;在其底层使用 Containerd 来管理容器。Containerd 是一个开源的容器运行时管理器&#xff0c;由 Docker 公司于2017年开发并开源&#xff0c;它负责实际的容器生命周期管理。 以下是 Docker 守…

力扣每日一题49:字母异位词分组

题目描述&#xff1a; 给你一个字符串数组&#xff0c;请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。 字母异位词 是由重新排列源单词的所有字母得到的一个新单词。 示例 1: 输入: strs ["eat", "tea", "tan", "ate&quo…

清华训练营悟道篇之浅谈操作系统

文章目录 前言系统软件执行环境操作系统的功能操作系统组成 前言 操作系统是一个帮助用户和应用程序使用和管理计算机资源的软件&#xff0c;它控制着嵌入式设备、更通用的系统&#xff08;如智能手机、台式计算机和服务器&#xff09;以及巨型机等各种计算机系统 系统软件 …

Element的MessageBox自定义图标

Element的MessageBox 弹框如何自定义图标_如何替换 el message box 的图标-CSDN博客

【前段基础入门之】=>CSS3新增渐变颜色属性

导语&#xff1a; CSS3 新增了&#xff0c;渐变色 的解决方案&#xff0c;这使得我们可以绘制出更加生动的炫酷的的配色效果 线性渐变 多个颜色之间的渐变&#xff0c; 默认从上到下渐变 background-image: linear-gradient(red,yellow,green); /*默认从上到下渐变*/默认从上…

期中考核复现

web 1z_php ?0o0[]1A&OoO[]2023a include "flag.php"&#xff1a;尝试包含名为 "flag.php" 的文件。这意味着它会尝试引入一个名为 "flag.php" 的脚本文件&#xff0c;其中可能包含一些敏感信息或标志。 error_reporting(0)&#xff1a;…

腾讯待办是不是停了?能准时提醒待办事项的APP

有不少网友会使用“腾讯待办”小程序来记录待办的事情&#xff0c;并且设置提醒时间&#xff0c;进行任务管理。不过有不少网友最近在使用腾讯待办小程序的时候&#xff0c;看到了“业务关停通知”的弹窗&#xff0c;想问一下&#xff0c;腾讯待办是不是停了&#xff1f;确实如…

node.js中express框架cookie-parser包设置cookie的问题

后端使用node.js express cookie-parser技术栈设置cookie的时候出现了无法成功设置的问题 前端发送axios请求部分代码&#xff1a; axios({method: "post",data: {content: remark,relatedArticles: relatedArticleId,userId: userId,userEmail: userEmail,topRema…

如何在Puppeteer中设置User-Agent来绕过京东的反爬虫机制?

概述 京东作为中国最大的电商平台&#xff0c;为了保护其网站数据的安全性&#xff0c;采取了一系列的反爬虫机制。然而&#xff0c;作为开发者&#xff0c;我们可能需要使用爬虫工具来获取京东的数据。 正文 Puppeteer 是一个由 Google 开发的 Node.js 库&#xff0c;它提供…

JAVA 同城服务预约家政小程序开发的优势和运营

随着社会节奏的加快&#xff0c;人们对家庭清洁和维护的需求日益增长。为了满足这一需求&#xff0c;JAVA同城服务预约家政小程序应运而生。本文将详细介绍该小程序开发的优势及运营策略&#xff0c;帮助读者更好地了解其价值和潜力。 一、开发优势 方便快捷&#xff1a;用户…

RHEL 软件包管理 rpm yum 源码编译

rpm安装&#xff1a; rpm -ivh xxx.rpm rpm查询:rpm -q zsh rpm -qa |grep zsh rpm -ql zsh |more #查看一个软件包安装后产生的目录及文件 rpm -qpi /mnt/Packages/lrzsz-0.12.20-36.el7.x86_64.rpm #列出rpm包的详细信息&#xff08;还未安装的rpm包&#xff09; rpm -qi zsh…

Spring Security—OAuth2 客户端认证和授权

一、认证—JWT Bearer 关于 JWT Bearer 客户端认证的进一步详情&#xff0c;请参考OAuth 2.0客户端认证和授权许可的 JSON Web Token (JWT)简介。 JWT Bearer 客户端认证的默认实现是 NimbusJwtClientAuthenticationParametersConverter&#xff0c;它是一个 Converter&#…

VMware虚拟机中ubuntu网络连接不上

VMware虚拟机中ubuntu中网络连接不上 解决方案其他虚拟机网络 解决方案 1.选择VMware中编辑-虚拟网络编辑器-更改&#xff1a; 设置为你喜欢的模式&#xff0c;这里为NET模式 2.选中ubuntu虚拟机&#xff08;关机后的虚拟机&#xff09;&#xff0c;点击&#xff1a;编辑虚拟机…

GoLong的学习之路(八)语法之Map

文章目录 Map初始化方式判断某个键是否存在map的遍历对value值遍历。对key值遍历 使用delete()函数删除键值对按照指定顺序遍历map元素为map的切片值为切片类型的map 做个题吧 Map 哈希表是一种巧妙并且实用的数据结构。它是一个无序的key/value对的集合&#xff0c;其中所有的…

【十四】记一次MySQL宕机恢复过程,MySQL INNODB 损坏恢复

记一次MySQL宕机恢复过程 简介&#xff1a;一个业务数据库疏于运维管理&#xff0c;突然在今天崩溃宕机了&#xff0c;真是让人抓狂&#xff0c;上面也不知道积累了多久的数据&#xff0c;平时也没有定期做好备份&#xff0c;这下岂不是瞎了啊&#xff0c;经过不断的收集信息和…

什么是网络API以及用例

什么是API&#xff1f; API&#xff08;application programming interface&#xff0c;应用程序编程接口&#xff09;可使不同的应用程序通过一套机制和协议相互通信。同样&#xff0c;网络 API 可实现网络与应用程序、网络浏览器和数据库之间的通信。 使用表征状态传输&…

LeetCode977——有序数组的平方

LeetCode977——有序数组的平方 给你一个按 非递减顺序 排序的整数数组 nums&#xff0c;返回 每个数字的平方 组成的新数组&#xff0c;要求新数组也按 非递减顺序 排序。 输入&#xff1a;nums [-4,-1,0,3,10] 输出&#xff1a;[0,1,9,16,100] 解释&#xff1a;平方后&…

面试算法36:后缀表达式

题目 后缀表达式是一种算术表达式&#xff0c;它的操作符在操作数的后面。输入一个用字符串数组表示的后缀表达式&#xff0c;请输出该后缀表达式的计算结果。假设输入的一定是有效的后缀表达式。例如&#xff0c;后缀表达式["2", "1", "3", &q…

javaScript 使用indexOf 撸一下模糊查询

说明&#xff1a;把代码直接粘到HTML文件用浏览器打开即可体验 body的数据 <input class"keyWord" type"text" placeholder"查询关键字"><button class"searchBtn">查询</button><div><ul class"res…