当前位置: 首页 > news >正文

【LM401】ADC采集代码解读

本文主要实现基于LM401模组,,测试ADC低功耗采集,详细解析代码基于计算方式

对于小白理解ADC有更详细的理解

【LM401】ADC采集代码解读

  • 1. 单片机ADC与DAC简单理解
  • 2. 模组ADC通道介绍
  • 3. ADC初始化
  • 4. 采集值的计算
  • 5.测试结果

硬件基于易智联的LM401的LoRa模组,用的 LM401-pro-kit开发板,开发板资料以及参考资料如下:

基于STM32WL的LM401 Lora评估板

【STM32WLE5之lora:5、易智联LM40评估板ADC定时采集上报】

1. 单片机ADC与DAC简单理解

  • ADC:模数转换,单片机的IO口接一个传感器,传感器输出模拟值,单片机读取模拟量转化为数字量。( 单片机输入模拟值,转化为数字值

  • DAC:数模转换,给单片机数字值,从单片机的IO口输出模拟信号量。( 单片机IO口输出模拟信号量

2. 模组ADC通道介绍

12位DAC、2Msps 低功耗采样保持电路 ,12通道,采用 16-bit 硬件过采样,转化范围1.62—3.6V,给出部分引脚,具体查看手册

PB1 — ADC_IN5 PB2 — ADC_IN4

PB3 — ADC_IN2 PB4 — ADC_IN3

PB13 — ADC_IN0 PB14 — ADC_IN1

其中三个通道说明:

#define ADC_CHANNEL_VREFINT                (LL_ADC_CHANNEL_VREFINT)         // 内部参考电压
#define ADC_CHANNEL_TEMPSENSOR             (LL_ADC_CHANNEL_TEMPSENSOR)      // MCU 内部温度,精确度不高 1度左右
#define ADC_CHANNEL_VBAT                   (LL_ADC_CHANNEL_VBAT)            // 外部连接电压值

3. ADC初始化

void MX_ADC_Init(void)
{/** Configure the global features of the ADC (Clock, Resolution, Data Alignment and number of conversion)*/hadc.Instance = ADC;hadc.Init.ClockPrescaler = ADC_CLOCK_SYNC_PCLK_DIV4;  // 时钟分频数hadc.Init.Resolution = ADC_RESOLUTION_12B;    // 分辨率为 12bithadc.Init.DataAlign = ADC_DATAALIGN_RIGHT;    // 一般选择右对齐hadc.Init.ScanConvMode = ADC_SCAN_DISABLE;   // 单通道(单次)或者多通道(扫描)模式选择,扫描的话就是序列的形式hadc.Init.EOCSelection = ADC_EOC_SINGLE_CONV;  // 单一转换结束hadc.Init.LowPowerAutoWait = DISABLE;     // 低功耗hadc.Init.LowPowerAutoPowerOff = DISABLE;hadc.Init.ContinuousConvMode = DISABLE;hadc.Init.NbrOfConversion = 1;hadc.Init.DiscontinuousConvMode = DISABLE;hadc.Init.ExternalTrigConv = ADC_SOFTWARE_START;hadc.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;hadc.Init.DMAContinuousRequests = DISABLE;      // 不使用 DMAhadc.Init.Overrun = ADC_OVR_DATA_PRESERVED;hadc.Init.SamplingTimeCommon1 = ADC_SAMPLETIME_160CYCLES_5;hadc.Init.SamplingTimeCommon2 = ADC_SAMPLETIME_160CYCLES_5;hadc.Init.OversamplingMode = ENABLE; //使能过采样hadc.Init.Oversampling.Ratio = ADC_OVERSAMPLING_RATIO_16; // ,16倍过采样hadc.Init.Oversampling.RightBitShift = ADC_RIGHTBITSHIFT_4;hadc.Init.Oversampling.TriggeredMode = ADC_TRIGGEREDMODE_SINGLE_TRIGGER;hadc.Init.TriggerFrequencyMode = ADC_TRIGGER_FREQ_HIGH;if (HAL_ADC_Init(&hadc) != HAL_OK){Error_Handler();}/* USER CODE BEGIN ADC_Init 2 *//* USER CODE END ADC_Init 2 */}

4. 采集值的计算

比如,demo中通过PA11引脚读取ADC的值,读取后的计算方式:

注意::计算时用的12位分辨率,和ADC初始化设置的分辨率要对应

bat_v = SYS_GetBatteryLevel();	// 获取内部参考电压-> ADC_ReadChannels(ADC_CHANNEL_VREFINT);  
temp = GetADC_PA11();
pa11_v = __LL_ADC_CALC_DATA_TO_VOLTAGE(bat_v, temp,ADC_RESOLUTION_12B); // 将PA11的ADC转换成电压,单位mV  通过这个函数计算出实际电压值,单位是 mV/// @brief   将采集到的模拟电压值转换为实际电压值,计算结果单位是 mV
/// @param   参数1:ADC转换环境的参考电压值  
///			 参数2:采集到的模拟电压值   
///			 参数3:AD芯片分辨率(本系列可可以是6 8 10 12)
#define __HAL_ADC_CALC_DATA_TO_VOLTAGE(__VREFANALOG_VOLTAGE__,\__ADC_DATA__,\__ADC_RESOLUTION__) \
__LL_ADC_CALC_DATA_TO_VOLTAGE((__VREFANALOG_VOLTAGE__),\(__ADC_DATA__),\(__ADC_RESOLUTION__))

(VREF/2n)∗AdcData(VREF/2^n)*AdcData (VREF/2n)AdcData

5.测试结果

测试 PB4PB3 两路ADC,分别将PB3直接接地,PB43.3v,测试过程代码
说明:本例 参考电压为 3.3v 用的12位ADC

#define VREF_MV         (3300UL)
#define ADC_MAX_RESULT  ((1 << 12)-1) // 12 bit ADCuint16_t batteryLevel = SYS_GetBatteryLevel();  // 获取系统的参考电压  单位 mv(3300mv)
APP_PRINTF("batteryLevel= %d \r\n",batteryLevel);uint16_t ADC_PB3_Value = GetADC_PB3_Value();uint16_t ADC_PB4_Value = GetADC_PB4_Value();APP_PRINTF("ADC_PB3_Value= %d \r\n", ADC_PB3_Value);APP_PRINTF("ADC_PB4_Value= %d \r\n ",ADC_PB4_Value);APP_PRINTF("*********************************** \r\n ");APP_PRINTF("ADC_PB3_Value= %d \r\n",(ADC_PB3_Value * VREF_MV) / ADC_MAX_RESULT);APP_PRINTF("ADC_PB4_Value= %d \r\n ",(ADC_PB4_Value * VREF_MV) / ADC_MAX_RESULT);

打印信息如下:

在这里插入图片描述

相关文章:

【LM401】ADC采集代码解读

本文主要实现基于LM401模组,&#xff0c;测试ADC低功耗采集&#xff0c;详细解析代码基于计算方式 对于小白理解ADC有更详细的理解 【LM401】ADC采集代码解读1. 单片机ADC与DAC简单理解2. 模组ADC通道介绍3. ADC初始化4. 采集值的计算5.测试结果硬件基于易智联的LM401的LoRa模组…...

CSDN 编程竞赛四十期题解

竞赛总览 CSDN 编程竞赛四十期&#xff1a;比赛详情 (csdn.net) 竞赛题解 题目1、小鱼的航程 有一只小鱼&#xff0c;它上午游泳150公里&#xff0c;下午游泳100公里&#xff0c;晚上和周末都休息&#xff08;实行双休日)。假设从周x&#xff08;1<x<7&#xff09;开…...

【TypeScript学习之路】泛型

【TypeScript学习之路】泛型 文章目录【TypeScript学习之路】泛型写在前面前言一、认识泛型1.1 什么是泛型1.2 泛型函数的使用二、泛型接口与泛型类2.1 泛型接口2.2 泛型类三、泛型约束写在前面 &#x1f917;这里是前端程序员小张&#xff01; &#x1f33b;人海茫茫&#xff…...

数据分析学习项目:东京奥运会跳水评论分析

“中国跳水梦之队” ————有关东京奥运会跳水评论分析 导语 第32届夏季奥林匹克运动会于2021年07月23日-2021年08月08日在日本东京举办。 四年一届的奥运会可以说是世界瞩目的盛会&#xff0c;奥运健儿们在赛场上的精神风貌不只是代表了他们自身的运动精神&#xff0c;更昭…...

Winform/Csharp中使用Linq的Where条件筛选、Select字段映射(左外连接并设置无匹配时默认值)、OrderBy(排序并自定义排序规则)

场景 Java8新特性-Stream对集合进行操作的常用API&#xff1a; Java8新特性-Stream对集合进行操作的常用API_streamapi操作集合_霸道流氓气质的博客-CSDN博客 上面讲的是在Java中使用Stream中对集合的常用操作。 在C#中Linq是有对应的类似的api。 完整和详细的用法可自行查…...

Linux-常用的Shell命令

文章目录前言常用的Shell命令文件和目录管理查看文件、目录信息查看文件内容查看文件类型查找文件查找内容查看目录大小创建文件删除文件拷贝文件移动文件创建目录删除目录拷贝目录压缩文件解压文件路径相关操作目录切换显示当前路径用户、用户组管理创建用户删除用户创建用户组…...

Go语言基础:数组定义及循环遍历

前言 大家好&#xff0c;我是沐风晓月&#xff0c;本文go语言入门-掌握go语言函数收录于《go语言学习专栏》专栏&#xff0c;此专栏带你从零开始学习go语言&#xff0c;持续更新中&#xff0c;欢迎点赞收藏。 &#x1f3e0;个人主页&#xff1a;我是沐风晓月 &#x1f9d1;个人…...

【树与二叉树】二叉树顺序结构实现以及堆的概念及结构--详解介绍

​ ​&#x1f4dd;个人主页&#xff1a;Sherry的成长之路 &#x1f3e0;学习社区&#xff1a;Sherry的成长之路&#xff08;个人社区&#xff09; &#x1f4d6;专栏链接&#xff1a;数据结构 &#x1f3af;长路漫漫浩浩&#xff0c;万事皆有期待 文章目录1. 二叉树顺序结构2.…...

天狗实战(二)SpringBoot API开发详解 --SpringMVC注解+封装结果+支持跨域+打包(下)

本文目录 前言专栏介绍一、创建SpringBoot项目1.1 添加springboot依赖1.2 创建启动类1.3 创建控制器类1.4 Run 或 Debug二、开发图书管理API2.1 web层BookAdminControllerBookVO2.2 service层BookServiceBookServiceImplBookBO2.3 dal层...

实验一 Windows系统安全实验【网络安全】

实验一 Windows系统安全实验【网络安全】前言推荐实验一 Windows系统安全实验3.1 帐户和口令的安全设置3.1.1 实验目的3.1.2 实验环境3.1.3 实验内容和步骤1. 删除不再使用的帐户并禁用guest帐户2.启用密码策略和帐户锁定策略3.查看“用户权限分配”4.查看“用户组权限分配”5.…...

蓝桥杯正确的解题姿势

在做算法题的过程中最忌讳的就是上来就一顿乱敲&#xff0c;一开始我就是这样&#xff0c;但随着不断的刷题和老师的指导&#xff0c;总结了自己的刷题方法 示例题目 三角回文数 问题描述 对于正整数 n, 如果存在正整数 k使得 n123...kk(k1)/2 , 则 n 称为三角数。例如, 66066 …...

【mysql】性能优化

目录一、硬件与操作系统二、架构设计层面的优化三、mysql程序配置优化四、mysql执行优化一、硬件与操作系统 1.使用高性能cpu&#xff0c;提高计算能力 2.增大可用内存&#xff0c;提高读取能力 3.提高硬盘的读写速度&#xff0c;使用专用的固态硬盘 4.增大网络带宽&#xff0c…...

Jupyter安装与远程使用过程记录

Jupyter安装与远程使用过程记录 文章目录Jupyter安装与远程使用过程记录Jupyter在线试用在服务器上安装Jupyter Notebook配置服务器远程连接首先保证ip地址连通性其次开启服务器访问端口然后在服务器启动服务最后测试连通性后续使用教程Jupyter在线试用 官网适用&#xff0c;感…...

Swift入门

基本数据类型 Int、UInt&#xff1a;整数型、非负整数Float、Double&#xff1a;单精度浮点数、双精度浮点数Bool&#xff1a;布偶值String、Character&#xff1a;字符串、字符 其他类型 Array, Dictionary&#xff1a;数组、字典StructClassvar&#xff1a;变量let&#x…...

【HashMap】jdk1.8中HashMap的插入扩容源码学习分析

jdk1.8中HashMap的插入扩容源码学习分析 一、成员变量 首先介绍HashMap中各个成员变量的作用&#xff0c;在HashMap中有以下成员变量 size记录了HashMap中键值对的个数 loadFactor&#xff08;加载因子&#xff09;用来决定size达到容量的百分之多少时触发扩容机制 默认是0…...

Linux编译器-gcc/g++ 使用

在介绍gcc/g的使用前我们先了解一下两者的不同 gcc时主要编译c语言&#xff0c;而g主要编译c的&#xff0c;但是两者的选项是相同的&#xff0c;因此我们以gcc和c语言为例来讲解。背景知识 gcc和g都是编译器其核心作用将文本类文件翻译成二进制可执行 那么其过程是怎样的&…...

网络安全专家最爱用的9大工具

网络安全专家&#xff0c;不是你认为的那种搞破坏的 “黑客”。网络安全专家&#xff0c;即 “ethical hackers”&#xff0c;是一群专门模拟网络安全专家攻击&#xff0c;帮助客户了解自己网络的弱点&#xff0c;并为客户提出改进建议的网络安全专家。 网络安全专家在工作中&a…...

Linux内核设计与实现第四章学习笔记

文章目录Linux内核设计与实现第四章学习笔记具体场景Linux调度算法传统的调度公平调度调度的实现时间记账调度器实体虚拟实时进程选择调度器入口睡眠和唤醒抢占和上下文切换用户抢占内核抢占实时调度策略Linux内核设计与实现第四章学习笔记 进程优先级&#xff1a;Linux中采用…...

i.MX9352——介绍一款多核异构开发板

本篇来介绍一款多核异构的Linux开发板——OK-MX9352-C开发板。 1 开发板硬件介绍 OK-MX9352-C开发板由核心板和底板组成&#xff0c;核心板采用处理器芯片为NXP的i.MX9352&#xff0c;这是一款多核异构的芯片&#xff0c;核心板基础配置如下 CPU&#xff1a;2Cortex-A551.5G…...

【Python】一文学会面向对象?当然可以的

文章目录前言一、万物皆对象二、类也是对象三&#xff0c;元类总结前言 在大家学习python的时候&#xff0c;一定听说过一句话&#xff1a; 在我们python中万物皆对象&#xff0c;不管是整数、字符串、列表、字典这些基本数据类型&#xff0c;还是函数、以及自定义类创建出来…...

Ubuntu 22.04 下配置 Arduino IDE 2.x:从安装到第三方库的完整避坑指南

1. 准备工作&#xff1a;下载Arduino IDE 2.x 在Ubuntu 22.04上配置Arduino开发环境&#xff0c;第一步自然是获取官方IDE。我推荐直接从Arduino官网下载最新版本&#xff0c;避免使用老旧软件包带来的兼容性问题。打开浏览器访问arduino.cc/en/software&#xff0c;你会看到两…...

CentOS 8 安装 Docker 超详细教程

CentOS 8 安装 Docker 超详细教程 适用于 CentOS 8 / CentOS Stream 8&#xff0c;从零开始直到运行第一个容器。 一、准备工作 1. 检查系统版本 cat /etc/redhat-release看到 CentOS Linux release 8.5.2111 或 CentOS Stream release 8 即可继续。 2. 卸载旧版本 Docker …...

嵌入式Linux CAN通信实战:从原理到SocketCAN编程与调试

1. 项目概述&#xff1a;在国产工业板上玩转CAN-BUS最近在做一个工业数据采集的项目&#xff0c;需要把几台分散的设备数据汇总到一个主控单元。现场布线复杂&#xff0c;干扰又大&#xff0c;RS485虽然经典&#xff0c;但主从轮询的机制在实时性上总觉得差点意思&#xff0c;而…...

设计程序统计共享单车使用分布数据,优化投放点位,解决市民短途出行找不到车辆出行难题。

构建一个共享单车使用分布统计与投放点位优化的商务智能示例项目&#xff0c;去营销化、中立化&#xff0c;仅用于学习与工程实践参考。一、实际应用场景描述在城市短途出行场景中&#xff0c;共享单车已成为重要补充&#xff1a;- 覆盖公交、地铁“最后一公里”- 解决 1–3 公…...

在Ubuntu上快速搭建LVGL模拟器开发环境

1. 为什么选择Ubuntu搭建LVGL模拟器 LVGL作为当下最流行的嵌入式图形库之一&#xff0c;以其高度可裁剪性和低资源占用的特性赢得了广大开发者的青睐。在实际开发中&#xff0c;我们经常需要先在PC端完成界面原型设计&#xff0c;再移植到嵌入式设备。Ubuntu作为Linux发行版中的…...

从零打造智能互动魔法杖:嵌入式系统与创客DIY全流程解析

1. 项目概述&#xff1a;打造你的专属互动魔法杖几年前&#xff0c;我痴迷于各种漫展和角色扮演活动&#xff0c;总想为自己扮演的角色制作一件独一无二、能真正“发光发热”的道具。市面上能买到的发光道具要么太玩具感&#xff0c;要么价格高昂且功能单一。于是&#xff0c;我…...

基于哈希匹配的PT断种自动化修复工具Reseed部署与实战

1. 项目概述&#xff1a;一个被忽视的种子修复工具如果你在PT&#xff08;Private Tracker&#xff09;圈子里混过一段时间&#xff0c;尤其是玩过一些对分享率要求极为苛刻的站点&#xff0c;那你大概率听说过“断种”这个词。一个热门资源&#xff0c;下载者众多&#xff0c;…...

广东公考机构全景测评:粉笔凭极致性价比与本土教研实力领跑

随着2026年广东省考备考热潮的持续升温&#xff0c;选择一家靠谱的培训机构成为广大考生关注的焦点。在广东这片公考竞争激烈的热土上&#xff0c;除了粉笔、华图和中公三大巨头&#xff0c;以笨鸟教育、及第林教育为代表的本土精品机构也凭借极强的地域针对性异军突起。本次测…...

构建思想知识图谱:NLP与Elasticsearch在结构化资料库中的应用

1. 项目概述与核心价值最近在整理一些历史资料和思想研究时&#xff0c;我接触到了一个名为“mao-zedong-perspective”的项目。这个项目名直译过来就是“毛泽东视角”&#xff0c;它并非一个传统的软件应用&#xff0c;而更像是一个数字化的思想资料库或研究框架。作为一名长期…...

保姆级拆解:用代码和图示彻底搞懂YOLOv7的Backbone与Head(附ELAN模块详解)

保姆级拆解&#xff1a;用代码和图示彻底搞懂YOLOv7的Backbone与Head&#xff08;附ELAN模块详解&#xff09; 在计算机视觉领域&#xff0c;目标检测一直是热门研究方向。YOLO系列作为其中的佼佼者&#xff0c;以其高效和准确著称。YOLOv7作为该系列的最新成员&#xff0c;在速…...