FR8012HAQ利用ADC实现检测电池电压检测的解决方案

2023-05-16

今天要跟大家分享的是FR8012HAQ利用ADC实现检测电池电压检测的解决方案。
FR8012HAQ是富芮坤的一款通用蓝牙芯片。特性介绍如下图:

 


我们再来看FR8012HAQ的PMU,它强大的地方还在于内置了充电模块。


FR801xH具有完整的集成电源管理单元(PMU),包括单电感单输出(SISO) DC-DC转换器,用于系统不同功率域的各种ldo,用于电池充电的恒流恒压(CCCV)充电器,充电检测电路,中断控制器,开关逻辑,BLE睡眠计数器,RTC,看守狗,键盘扫描,QDEC, PWM,校准块和GPIO监视器。模拟电源管理单元(PMU)的系统原理图如下图所示。
 

 PMU虽然强大,但是我们的电池电压的检测没用到,我们主要是利用ADC的电池监控功能,
下面我们来看看这个款芯片的ADC特性:
SARADC的主要特性如下:

  • 10位动态ADC, 1MHz采样率。
  • 电池监控功能
  • 8通道单端输入
  • 支持32字节FIFO深度四路模拟输入
  • 支持固定通道模式和循环通道扫描模式

由ADC特性可以看到,它的采样率还是可以的,但是精度只有10位,有点拉胯了。
我们因为要用到ADC的外部通道,而且又要用到它的电池监控功能,但是ADC只有一个,那只能分时复用了,下面给出实现代码

复制
 if(Vbat_Start_Tick++>=BASE_5S)

        {

                

        struct adc_cfg_t cfg;

        uint16_t result, ref_vol;

        

        memset((void*)&cfg, 0, sizeof(cfg));

        cfg.src = ADC_TRANS_SOURCE_VBAT;

        cfg.ref_sel = ADC_REFERENCE_INTERNAL;

        cfg.int_ref_cfg = ADC_INTERNAL_REF_1_2;

        cfg.clk_sel = ADC_SAMPLE_CLK_24M_DIV13;

        cfg.clk_div = 0x3f;

        adc_init(&cfg);

        adc_enable(NULL, NULL, 0);



        adc_get_result(ADC_TRANS_SOURCE_VBAT, 0, &result);

                ref_vol = adc_get_ref_voltage(ADC_REFERENCE_INTERNAL);

        vbat_voltage = (result * 4 * ref_vol) / 1024;                

                printf("vbat_vol=%d\r\n",vbat_voltage);



                        

                if(vbat_voltage<=3100)

                {

                        if(mdStateMach.FSM!=Charge)

                        {

                                SetStaticLED281x(Orange,1);

                        }

                        

                }else if(vbat_voltage<=2900)

                {

                        mdStateMach.FSM=Shutdown;

                }

                Vbat_Start_Tick=0;

                

        }else if(Vbat_Start_Tick==1){

                Switch_ADC_Soucer();

        }

这段代码是在10ms定时器中执行的, if(Vbat_Start_Tick++>=BASE_5S)这个条件是5S一个周期执行一次切换ADC转换源为VBAT,以检测VBAT电压,
vbat_voltage = (result * 4 * ref_vol) / 1024;这条公式算出的是mV电压,当5S之后又切换回ADC_TRANS_SOURCE_PAD。如下代码:
 

复制
    struct adc_cfg_t cfg;

    system_set_port_mux(GPIO_PORT_D, GPIO_BIT_4, PORTD4_FUNC_ADC0);

    memset((void*)&cfg, 0, sizeof(cfg));

    cfg.src = ADC_TRANS_SOURCE_PAD;

    cfg.ref_sel = ADC_REFERENCE_AVDD;

    cfg.channels = 0x01;  //ch0    一个 bit 表示一个通道:PD4=BIT0=通道 0、PD5=BIT1=通道 1、PD6=BIT2=通道 2、PD7=BIT3=通道 3;

    cfg.route.pad_to_sample = 1;

    cfg.clk_sel = ADC_SAMPLE_CLK_24M_DIV13;

    cfg.clk_div = 0x3f;

    adc_init(&cfg);

    adc_enable(NULL, NULL, 0);


最后我们再来看看adc_get_result(ADC_TRANS_SOURCE_PAD, 0x01, &Hxresul);这个函数,如下图: 


第一个参数,是ADC 采集的数据源,adc_trans_source_t 定义如下:

enum adc_trans_source_t {

    ADC_TRANS_SOURCE_VBAT,

    ADC_TRANS_SOURCE_PAD,

};

ADC_TRANS_SOURCE_VBAT是采集电池电压的。
ADC_TRANS_SOURCE_PAD可以采集外部输入电压。

第二个参数是,配置的是ADC的通道数的,第0位表示ch0,第1位表示ch1,置1开启通道,清零关闭。
第三个参数是采样结果,按照配置的顺序摆放。
如配置通道0和1,那么数组temp[4]中temp[0]、temp[2]表示通道0数据,temp[1]、temp[3]表示通道2的。
---------------------
作者:lilijin1995
链接:https://bbs.21ic.com/icview-3278320-1-1.html
来源:21ic.com
此文章已获得原创/原创奖标签,著作权归21ic所有,任何人未经允许禁止转载。

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

FR8012HAQ利用ADC实现检测电池电压检测的解决方案 的相关文章

  • 基于qwt3D 的3D航迹图的实现

    前言 使用qt实现三维空间直角坐标系中的航迹实时绘制网上很难查到资料 在qt下实现3D绘图通常实现方式有OpenGL VTK qwt3d QtDataVisualization等 Qcharts QCustomPlot只支持2D绘图 这里给
  • 树莓派4b连接RealSense T265

    使用的是树莓派4 8G版本 准备连接RealSense T265的双目相机 T265目前官方编译好的的只有Ubuntu16和18 其他的系统版本需要自己编译realsense驱动 安装ubuntu20 10 https ubuntu com
  • Dockerfile文件解释

    一 先来看一个简单的 Dockerfile 这个Dockerfile作用是打一个python3项目环境 FROM python 3 alpine WORKDIR app ADD app RUN pip3 install r requirem
  • 一文读懂BLOB算法

    算法执行效果 相关参考资料 看着玩的 BLOB算法简述 https blog csdn net icyrat article details 6594574 话说这老哥写的也太 简 了吧 完全口水话 把blob算法说的很神秘 说什么把blo
  • Sobel算法优化 AVX2与GPU

    国庆假期 一口气肝了10篇博客 基本上把最近的成果都做了遍总结 假期最后一天 以一个比较轻松的博客主题结束吧 这次是Sobel算法的AVX2优化 执行效果 sobel算法的原理 使用如下的卷积核 c 硬写 span class token
  • 随机Hough直线算法的改进

    背景介绍 随机Hough直线算法相比Hough直线算法 xff0c 算法效率会有提高 xff0c 但仍不能满足工程需求 因此提出使用生长的随机Hough直线算法 该算法对随机Hough直线算法进行改造 xff0c 在随机选点转到Hough空
  • MATLAB编写的读取.mat文件数据并画曲线图的gui程序

    matlab编写的读取sd卡数据的gui程序 界面截图 xff1a 打开文件界面 xff1a 导入数据后截图 xff1a 是不是高端大气上档次 xff0c 不要急 xff0c 慢慢往下看 xff0c 后面更精彩 xff0c 代码会贴出来的
  • px4飞控位置估计lpe移植到vs

    本文主要内容 px4飞控的位置估计有两种方式 xff0c 一是inav xff0c 二是lpe xff0c 用到的传感器用加速度计 xff0c 磁场传感器 xff0c gps xff0c 超声 xff0c 激光 xff0c 气压 xff0c
  • 常见的信号平滑处理方法

    本文介绍了常见的信号平滑处理方法 xff1a xff08 一阶滤波 xff0c 互补滤波 xff0c 卡尔曼滤波 xff09
  • PX4代码学习系列博客(1)——开发环境配置

    写在前面 虽然有很多关于px4博客 xff0c 但还是想自己亲手写 xff0c 一来记录自己的学习过程 xff0c 以备将来复习 xff0c 二来方便后来者参考学习 xff0c 好多西当然要大家分享 关于px4飞控程序的博客 xff0c 我
  • PX4代码学习系列博客(3)——px4固件目录结构和代码风格

    写在前面 px4不是普通的单片机程序 xff0c 其中没有main函数 它实际上是一个操作系统 xff0c 上面运行着很多应用程序 xff08 类比windows xff09 xff0c 比如姿态解算 xff0c 位置解算 xff0c 姿态
  • PX4代码学习系列博客(5)——在px4中添加自己的模块

    怎么在px4中添加自己的模块 在 px4固件目录结构和代码风格 这一节 xff0c 曾经说过NuttX是一个实时的嵌入式系统 xff0c 上面可以像windows那样运行程序 那既然是应用程序 xff0c 那我们应该也能写一些可以在Nutt
  • PX4代码学习系列博客(6)——offboard模式位置控制代码分析

    分析offboard模式的代码需要用到以下几个模块 local position estimator mavlink mc pos control mc att control mixer 程序数据走向 mavlink 一般的offboar
  • selenium安装

    一 安装webdriver 1 下载安装包 下载地址 xff1a CNPM Binaries Mirror 注意 xff1a 下载版本应与自己的chrome的大版本一致 chrome版本查看 xff0c 设置 gt 关于chrome xff
  • 基于惯性轮倒立摆原理的自行车

    背景 自平衡车有很多种 xff0c 其中一种是利用惯性轮倒立摆原理 xff0c 早在2003年 xff0c 日本的村田顽童就已经问世 xff0c 它采用的就是惯性轮倒立摆原理 后来其他研究组织和个人纷纷效仿 xff0c 制作出了五花八门的基
  • 二维码的特征定位和信息识别

    二维码的特征定位和信息识别 背景介绍 视觉的方法可以用来估计位置和姿态 最容易想到的是在目标上布置多个容易识别的特征 xff0c 这样使用opencv相机标定和 相机畸变矫正 轮廓提取 solvepnp来获取目标相对于相机的位姿 在实际使用
  • 学生作业信息管理系统

    一 xff0e 引言 1 1编写目的 首先 xff0c 软件系统的设计报告可以出用户提出的模糊需求分析出具体的工程需求 xff0c 并转化为数据流图 xff0c 程序流程图 xff0c 模块图 xff0c 数据库设计等软件设计必要的底层步骤
  • NVIDIA显卡驱动版本,CUDA版本,cudnn版本之间关系及如何选择

    要配置NVIDIA显卡的CUDA和cudnn xff0c 各种版本之间的依赖关系以及与其他使用GPU的库版本兼容一直没有弄明白 xff0c 最近经过多次卸载重装 xff0c 终于成功配置好了显卡计算环境 xff0c 于是把各个驱动程序和库之
  • 机器人定位误差标定模型

    概述 以工业机器人为基础 xff0c 构建柔性制造单元或柔性生产线 xff0c 实现产品自动化 柔性化 智能化生产必将成为现代制造发展的重点 新型产业环境下 xff0c 工业机器人的应用范围将越来越广泛 作业任务也将越来越精细复杂 xff0
  • 觉得C/C++难懂的、面临找工作面试笔试的,速来看这本书!

    如果你是C C 43 43 的初学者 xff0c 请看这本书 xff0c 因为其他的书也许你看了还不如不看 xff0c 一定要选一本好书 xff1b 如果你正准备求职 xff0c 那么请认真看这本书 xff0c 因为这本书会教会你工作中必备

随机推荐

  • rosdep update错误失败一直timeout解决方法

    更新rosdep 终端输入 rosdep update 失败1 The read operation timed out xff08 包括ERROR unable to process source xff0c ERROR error lo
  • bat, shell脚本ssh自动输入密码

    我电脑是win11 xff0c 并且自带ubuntu系统 xff0c 打开cmd xff0c 然后输入ubuntu xff0c 可以直接进入ubuntu系统 xff0c 然后执行简单的linux命令 我在两个系统下都写了自动连接远程服务的脚
  • FreeRtos 文件结构

    最核心的三个文件 1 xff09 tasks c 2 xff09 list c 3 xff09 queue c tasks c 任务相关 list c 为一个双向链表 queue c 队列 xff0c 信号量用于任务间通讯 4 xff09
  • 论文超详细精读:SMPL: A Skinned Multi-Person Linear Model

    文章目录 前言总览一 Introduction二 Related WorkBlend Skinning xff08 混合蒙皮 xff09 Blend shapes xff08 混合变形 xff09 Learning pose and sha
  • 1、列表推导式、字典推导式

    34 34 34 1 列表推导式 xff1a 作用 快速生成列表 需求1 xff1a 如何快速生成一个 34 data0 34 34 data1 34 34 data99 34 的列表 语法 xff1a y for x in xxx 实现
  • pwm超详细解读,大佬细说pwm的控制方式

    pwm xff0c 也就是常说的脉冲宽度调制脉冲宽度调制技术 目前 xff0c pwm技术的应用是非常多的 为了增进大家对pwm的认识 xff0c 本文将对pwm 的几种控制方法进行详细的阐述 xff0c 保证大家彻底理解 如果你对pwm
  • WiFi信号覆盖面积小?如何扩大Wifi信号覆盖范围?

    WiFi已是现代生活不可缺少的组成之一 xff0c 在WiFi的帮助下 xff0c 一个家庭网络或办公网络 xff0c 能够通过无线的方法连接诸多设备 为增进大家对WiFi的认识 xff0c 本文将对WiFi以及扩大WiFi信号覆盖范围的方
  • 数据存储方式有哪些?这3种数据存储方式了解吗?

    数据存储具有很强的现实意义 xff0c 只有采取合理的数据存储方式 xff0c 才能够有利于数据的管理 检索等 为增进大家对数据存储方式的认识 xff0c 本文将对三种数据存储方式予以介绍 如果你对数据存储方式具有兴趣 xff0c 不妨继续
  • 这里带你了解IR2104驱动电路

    Ir2014驱动电路及自举电容的应用 以前做智能车的时候用H桥驱动电路 xff0c 驱动芯片就是用的IR2104 xff0c MOS管用的IR7843 xff0c 想把以前的知识总结一下 1 为什么需要H桥电路 因为驱动电机正反转 xff0
  • 什么是神经网络模型,常见神经网络模型有哪些?

    神经网络模型是机器学习 深度学习的核心 xff0c 针对不同的问题 xff0c 我们需要搭建不同的神经网络模型 为增进大家对神经网络模型的认识 xff0c 本文将对常见的神经网络模型予以介绍 如果你对神经网络模型具有兴趣 xff0c 不妨继
  • STM32L431使用TencentOS tiny操作系统连接腾讯物联网开发平台

    去年腾讯为了宣传自己针对物联网的开源操作系统TencentOS tiny xff0c 举办了一场试用活动 xff0c 当时幸运获得一块 板子实物就这样 xff0c 没啥好介绍的 xff0c 都是基础的外设 xff0c 如今闲来无事 xff0
  • [总线技术]汽车ECU网络传输-诊断协议测试-基于Canoe软件CAPL脚本编写

    一 xff0e 汽车电子电控结构 先介绍一下汽车电子电控的结构 xff0c 汽车并不像电脑一样 xff0c 只有一个CPU xff0c 而是分为多个 CPU 独立工作 xff0c 就是由很多很多个控制器组成的 xff0c 比如 xff1a
  • [STM32F1]关于STM32F103芯片按钮机制串口发送程序

    就是目前遇到一个项目 xff0c 是监视各个按钮状态并将各个按钮的状态发送至上位机 xff0c 上位机进行整体程序逻辑动作 一般情况下串口发送可以直接一直发送给上位机 xff0c 通过解析不同数据位0和1的状态可以知道具体哪个按钮按下 xf
  • [uCOS/RTOS]freertos——创建任务(一)

    FreeRTOS操作系统学习 前言 FreeRTOS操作系统的学习正式开始 一 了解FreeRTOS FreeRTOS共有32个优先级 xff08 0 31 xff09 使用时0和31不使用 优先级规则 xff1a 数字越大优先级越高 任务
  • 基于FreeRTOS的UART空闲中断框架设计

    设计背景 xff1a 针对大部分国产低端MCU ARM CortexM0 来说 xff0c 并没有空闲中断 xff0c 此时就需要一个定时器Timer配合来完成此任务 对于UART接受不定长数据 xff0c 空闲中断还是非常实用的 xff0
  • 2、可迭代对象与迭代器

    1 Iterable 可迭代对象 概念 xff1a python中能够使用for循环遍历的都是可迭代对象 1 常见的可迭代对象 1 1 序列如 xff1a list str tuple range 1 2 非序列 xff1a dict se
  • 帮你分清嵌入式与单片机

    从事计算机和或电子行业相关领域工作的朋友 xff0c 一般都听说过单片机和嵌入式 但是要问单片机和嵌入式两者之间有什么联系 xff0c 大多数人都不能很好的解释清楚 想要弄清楚嵌入式和单片机有什么联系 xff0c 首先就要弄明白什么是嵌入式
  • [MM32生态]Python,让嵌入式应用开发更便捷、更高效、更专注

    前言 前面分享了基于PikaScript如何在MM32平台上部署Python开发环境的帖子 xff0c 实现了Python基础开发环境的部署 xff0c 可以通过串口终端软件在线编写Python xff0c 然后直接运行得到结果 通过Pyt
  • [STM32]STM32移植freemodbus实现modbusTCP

    上次说到采用STM32F1移植了FreeModbus协议栈进行开发实现ModBus RTU协议来进行一些线圈寄存器的控制 xff08 继电器开关 xff09 和一些保持寄存器的读写 xff08 参数配置灯 xff09 xff0c 这次说一下
  • FR8012HAQ利用ADC实现检测电池电压检测的解决方案

    今天要跟大家分享的是FR8012HAQ利用ADC实现检测电池电压检测的解决方案 FR8012HAQ是富芮坤的一款通用蓝牙芯片 特性介绍如下图 xff1a 我们再来看FR8012HAQ的PMU xff0c 它强大的地方还在于内置了充电模块 F