FR8012HAQ利用ADC实现检测电池电压检测的解决方案
今天要跟大家分享的是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所有,任何人未经允许禁止转载。
FR8012HAQ利用ADC实现检测电池电压检测的解决方案相关推荐
- 利用RGB-D数据进行人体检测 带dataset
利用RGB-D数据进行人体检测 LucianoSpinello, Kai O. Arras 摘要 人体检测是机器人和智能系统中的重要问题.之前的研究工作使用摄像机和2D或3D测距器.本文中我们提出一种 ...
- ICMP 隧道——将流量封装进 IMCP 的 ping 数据包中,旨在利用 ping 穿透防火墙的检测...
利用 ICMP 隧道穿透防火墙 转自:http://xiaix.me/li-yong-icmp-sui-dao-chuan-tou-fang-huo-qiang/ 以前穿透防火墙总是使用 SSH 隧道 ...
- DL之SSD:基于tensorflow利用SSD算法实现目标检测(21类)
DL之SSD:基于tensorflow利用SSD算法实现目标检测(21类) 目录 输出结果 SSD代码 输出结果 VOC_LABELS = {'none': (0, 'Background'),'ae ...
- 利用HOG特征进行人体检测--简述
1.HOG特征: 方向梯度直方图(Histogram of Oriented Gradient, HOG)特征是一种在计算机视觉和图像处理中用来进行物体检测的特征描述子.它通过计算和统计图像局部区域的 ...
- “泰迪杯”挑战赛 -利用非侵入式负荷检测进行高效率数据挖掘(完整数学模型)
目录 1 研究背景与意义 2 变量说明 3 问题分析 4 问题一 4.1 数据预处理 4.1.1 降噪处理 4.1.2 数据变换 4.2 负荷特征分析 4.2.1 暂态特征 4.2.2 稳态特征 5 ...
- 杰理-AC632X系列之电池电压检测时间
启动系统过后,默认输出的相关log如下: [00:26:30.690]bv:483, bl:9 , check_vbat:0 [00:26:30.701]bv:483, bl:9 , check_vb ...
- Haar+Adaboost级联分类器分解(三):利用并查集合并检测结果窗口
转载:http://www.aichengxu.com/view/1501260 前一篇文章分析了OpenCV级联分类器结构,即"强分类器串联,弱分类器并联",这一节我们来聊聊 ...
- 利用霍夫变换来进行圆环检测。
利用霍夫变换来进行圆环检测. cv2中进行霍夫圆环检测的函数: cv2.HoughCircles(image, method, dp, minDist, circles=None, param1=No ...
- 用深度学习实现异常检测/缺陷检测
点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 作者:Mia Morton 编译:ronghuaiyang(新机器视觉) 导读 创建异常检测模型,实现 ...
最新文章
- Windows安全软件长臂管辖的折中方案?
- python处理pdf文件_好玩的Python 篇一:用Python显示和处理PDF文件
- 客户就可以查看到货物签收信息
- MySql根据经纬度查询任意距离范围内数据
- 软件技术专业-就业提示(三、Java工程师必备技能)
- 笔试编程常用函数(Java)
- session.merge 缓存不更新_如何保证缓存与数据库双写时的数据一致性?
- 远程连接oracle无监听
- Netty工作笔记0042---Netty入门--编写客户端
- 快速配置vs2012+opencv
- 虚拟Linux 訪问win7共享文件夹方法
- Python中的盆地跳跃【Basin Hopping】优化
- 神经网络的深度、宽度
- [计算机数值分析]拉格朗日插值公式
- 《别做正常的傻瓜》笔记……
- 鳥哥的 Linux 私房菜 -- 例行性工作排程的建立 cron,郁闷一下午
- The authentication type 10 is not supported
- Redis数据库的使用
- Arduino实验三:继电器实验
- python人脸识别opencv_python中使用Opencv进行人脸识别