找回密码
 注册
关于网站域名变更的通知
查看: 150|回复: 1
打印 上一主题 下一主题

【开源教程5】疯壳·开源蓝牙心率防水运动手环-电池电量检测

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2022-8-12 14:59 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
蓝牙心率防水运动手环
——疯壳·智能穿戴开发系列
电池电量检测

8 @, B( [' n) t# J0 a0 P
2 H4 j$ T0 M/ A
+ n# `# C& O0 j. W" J5 p: B5 O6 O" i6 {. I* U/ _* @% `
" O' y; V/ `0 l2 o& q! \0 r) w
1  ADC 简介, L5 G  U" N% U: Q
; q$ `) F6 q7 m+ E' `
  ADC(Analog-to-Digital Converter),模/数转换器或者模数转换器,是指将连续变化的模拟信号转换为离散的数字信号的器件。- x2 l# J4 j2 b2 F. {
  我们 DA14580 集成一个高速超低功耗的 10 位通用模数转换器。可以工作于单端模式也可以工作于差分模式。ADC 模块有一个 1.2V 的电压校准器,作为满量程的参考电压。' }$ |  A* z- V: b5 X
  该 ADC 模块是 10 位动态模数转换,转换时间为 65ns;最大的采样率为3.3MHz;超低功耗(在 100KHz 的采样速率下典型供电电流为 5uA);有单端与差分两个输入比例;有 4 个单端或者 2 个差分输入通道;电池检测功能;斩波器功能;偏移和零刻度调整;公共端模式输入电平调整。
/ B8 L8 j2 m" `- K$ g  由于电池电压与其放电时长成负相关关系,我们就可以通过 DA14580 的 ADC测量电池电压,直接判断我们所使用的电池剩余电量大小。! U+ T4 G9 N2 {, _* q; M9 D
; X* l5 _0 j5 ^
2  硬件设计( I2 [) _6 E% B5 ]1 T) C6 U
1 v" M, s7 E1 s, u  l
  本次 DA14580 采用 P01 脚直接测量电源电压。" K1 c6 ]( i: {4 U! l
/ r0 h: G7 o6 U4 o$ J- d- f& N! K7 Q2 W

$ O8 U" q4 ^1 l3 `" Z, i图 1
) [- g" P+ d7 M; ], u; @: j; h
" C2 W! c6 l) U* z3  软件设计
5 U# S$ S/ w2 e% L8 v! b8 Z5 W5 c1 p6 q
  软件开始,第一步要进行的是系统初始化。1 \- C: X% d* F- l* S& \; N; [+ f

8 ^- _+ b7 Z& G0 I# K( V  W9 S. G8 D+ `' r
/ B$ H. g9 s$ g' Z% t0 X7 ]
0 |  H& A4 u+ M1 |, `1 k; t0 f
( k+ D0 e& m3 ~7 d
  由于我们要使用串口打印,就要配置我们要使用的串口。首先,要点调用GPIO_ConfigurePin(UART2_GPIO_PORT,   UART2_TX_PIN,   OUTPUT,  PID_UART2_TX,false) GPIO_ConfigurePin(UART2_GPIO_PORT, UART2_RX_PIN, INPUT, PID_UART2_RX, false)配置我们使用的串口管脚,然后使用 SetBits16(CLK_PER_REG, UART2_ENABLE,1) 来使能我们要使用的串口 2 , 最后调用uart2_init(UART2_BAUDRATE,UART2_DATALENGTH)初始化串口。完成以上的 3 个流程,就可以通过串口打印信息了。+ ]0 ?! K& ]; d* k1 t3 w9 G
  关于 ADC 采集电压,主要是调用下边的函数
/ H, G3 o) L7 U: j* g3 U. R8 ~! x
% \0 k, ~* x0 d2 j9 R3 @
$ f5 p  M- j  q. W
% U; B# B! X; o1 T( y* G4 [0 a$ W
1 r! b6 }6 x9 v9 ?7 z9 q! q% h% v( h) _2 }8 A1 T& T
  在这个函数中, 首先是采用 adc_init(uint16_t mode, uint16_t sign, uint16_tattn),对 ADC 进行初始化。第一个参数 mode 是 ADC 模式选择,0 表示差分模式,GP_ADC_SE(0x800)表示单端模式,我们采用的是 GP_ADC_SE,单端模式。第二个参数 sign,0 表示默认模式,这里用P_ADC_SIGN(0x0400),选择通过相反的ADC 符号获取两个采样值来取消内部的偏置电压。最后的参数 attn 设置输入最大电压值,0 对应 1.2v,这里选 GP_ADC_ATTN3X(0x0002)对应 3.6v。
. Q* P3 }0 S' q2 c9 W# b  完成 ADC 初始化后,就要使能相关的 ADC 通道。adc_enable_channel(uint16_t input_selection),本次使用的是通道 ADC_CHANNEL_VBAT3V。
9 Q8 w7 N; t/ k) s: K8 D5 w  完成 ADC 的初始化和通道使能后,就可以调用 adc_get_sample(void)获取数字电压。
3 B8 w3 ^8 Z$ b2 f% Q) c* S4 m! F4 Y5 b5 O3 y) t7 B, ]; R
  ^& N, @. Q4 E
; A& U* i0 E) `+ l& k7 O: K, h

8 y% S$ m! ]/ S! A7 Y  最后就是通过下面函数将数字电压转换为剩余电量百分比。
* w3 ?; J( K$ Q, d9 Y$ N4 X2 M: V- Y- h& @' O( c; f% x
* O8 P2 J7 _% s# r8 z7 r
+ T' f) {* a7 K& {4 P& q1 w
  这是函数采用的分段的形式,这是由于我们的电池电压与电池剩余电量的关系是一条曲线,通过分段计算,可以提高精度。当然,大家也可以根据自己的实际情况改动上述函数。3 Z, T8 F; e6 m8 g" G
. n, s( [4 h  g; c" R
1 V! p% e; {; n1 L
4   实验现象; M7 W+ r7 Y$ z* |! s6 B# [# k6 S0 ^
. u& v' @% y, Z; P' |( d
  首先,插好 Jlink 和 USB 转串口,然后打开打开串口调试助手。% d% @- K3 f3 [$ ?
* C: c# x2 f. z) |
  (1)选择串口号,我们图中是 COM1,这个根据实际情况选择。! l4 D: M1 l6 A2 P/ ^

- E- {0 n' j3 X/ V# c* r" u  (2)配置串口参数,波特率为 115200,数据位 8,停止位 1,没有校验位和控制流,与下图一致。
2 x" h0 D  h+ W/ V
+ S# o) R( Z+ U: y; I  (3)点击打开串口。6 s3 \% I8 z$ k9 W
& t, z5 ~9 \8 a( J% Y- I% B* ?

4 s1 A- }/ r: E图 2. i# i6 g- u1 A4 P, x
配置完串口之后,打开我们提供的代码。* ?+ n" h2 B1 L+ v8 V; L2 S
. B  B2 ]9 U" u8 A
(1)点击仿真按键。
) G4 V" z4 `! C7 B; q: {" L3 R) B4 S) d5 T/ s7 l5 o9 r
7 E6 X2 D' o" a: r3 @
图 3
8 O& ~+ t( s+ @) F6 r* k$ M(2)点击运行代码。1 N/ V3 L$ Z( \4 B6 T$ H5 x  l

- \, e: @, `) [         - J% ]/ `5 V6 c3 c& E$ q/ j9 c/ J
图 4
2 U9 X9 _/ j2 N4 o3 t9 `+ ^& \1 g6 `0 k
9 y+ l( d9 K( f4 b* ?
完成之后,就能看到串口调试助手接收框信息如下。$ t0 C: t% G8 r& T

. p/ S7 L& J% F, P3 i3 I' [) o5 Z
/ L, @3 J+ s8 a& O% r. S% i图 5+ |: z# \# H2 J$ M4 G* a9 K, @
7 ?; |9 `4 m$ r3 e' Y& G
0 t  g& Q! {! g* p8 ]

% A% ^" o( Y' r- I7 _0 t) A% X3 K" {& b: e

该用户从未签到

2#
发表于 2022-8-17 18:41 | 只看该作者
IO口多一点比较方便,可以预留很多控制部件
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-7-22 05:14 , Processed in 0.125000 second(s), 26 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表