|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
开源蓝牙心率防水运动手环 ——疯壳·智能穿戴开发系列 电池电量检测
6 f, |" G7 f3 `3 P0 t9 Z# a& V
( V- [ D/ u, t# d) S; y4 X. e" G% P$ a: }) A; x$ ]* B% I Z5 O
2 ]+ l7 @: l8 \. H! z* z1 D ^3 }* p2 y+ O% P! e
1 ADC 简介: o% Q5 n6 \+ [. q+ ~: a o
( w; M# x* h& Z ADC(Analog-to-Digital Converter),模/数转换器或者模数转换器,是指将连续变化的模拟信号转换为离散的数字信号的器件。
9 r9 G& }7 U6 b% K" g5 R 我们 DA14580 集成一个高速超低功耗的 10 位通用模数转换器。可以工作于单端模式也可以工作于差分模式。ADC 模块有一个 1.2V 的电压校准器,作为满量程的参考电压。
' g/ } p! R: ?# k, } 该 ADC 模块是 10 位动态模数转换,转换时间为 65ns;最大的采样率为3.3MHz;超低功耗(在 100KHz 的采样速率下典型供电电流为 5uA);有单端与差分两个输入比例;有 4 个单端或者 2 个差分输入通道;电池检测功能;斩波器功能;偏移和零刻度调整;公共端模式输入电平调整。
! i5 |' v# Q$ X 由于电池电压与其放电时长成负相关关系,我们就可以通过 DA14580 的 ADC测量电池电压,直接判断我们所使用的电池剩余电量大小。
0 V* l8 a" A" j1 u
( i) _% z G; S5 U2 硬件设计
1 A: O9 Z7 H, Q7 A) d3 |
8 D* m& a, i2 g( J7 U 本次 DA14580 采用 P01 脚直接测量电源电压。. ~% ]* l2 r8 S5 A; n
% q- j8 j! H: U' z8 n7 T* T" ? }" ^
4 J' r+ B' P) S/ o' N1 j图 12 `' U& j% l6 J l: h: d
! \, e, A" Y! H3 O$ O/ X+ ~, }" N3 软件设计8 [6 ^0 @+ j/ @. V# g3 \; P
! A% e7 e% |1 W1 Y' r6 } 软件开始,第一步要进行的是系统初始化。
9 S" r. x( P h8 I: D; Z: A* M! P1 v
+ Q- }" g3 R7 w6 J: r9 M) c7 n: l
+ _4 |, n6 t: v5 b3 x 由于我们要使用串口打印,就要配置我们要使用的串口。首先,要点调用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 个流程,就可以通过串口打印信息了。8 n! T* F* X7 _; Z+ j) f
关于 ADC 采集电压,主要是调用下边的函数5 P1 ]+ U9 Z$ g5 S- C7 V
4 C. o. I( S) K" Q3 \% U( V5 E( j8 V1 t
! e* o7 B0 X$ N+ C2 ]5 ?* T1 R; v
' S, b( ~0 ?. X' O
- S, @6 D0 h# ]; c, g) s" F( n, M/ g6 _; o
在这个函数中, 首先是采用 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。8 j) @; {, C6 _9 Z+ g9 J/ x( m
完成 ADC 初始化后,就要使能相关的 ADC 通道。adc_enable_channel(uint16_t input_selection),本次使用的是通道 ADC_CHANNEL_VBAT3V。3 W( j& u y# S1 p8 c* e+ i
完成 ADC 的初始化和通道使能后,就可以调用 adc_get_sample(void)获取数字电压。
+ m. N( @4 E# ?; W2 p/ |2 h& g; i4 ~2 u
* ^! |! _, W; N: X! N( _
' q% d% e( R3 z7 e5 M; D, ~1 Z2 N+ V8 q9 J
最后就是通过下面函数将数字电压转换为剩余电量百分比。
; P3 {# T5 y- L Q" \' L$ ~+ d7 B3 T; R+ f% z
+ p) ~( ]4 f3 Z! ~) S
3 F# Y9 |" ^2 N7 t
( Q' \6 \/ \. `' V- X! @1 N
这是函数采用的分段的形式,这是由于我们的电池电压与电池剩余电量的关系是一条曲线,通过分段计算,可以提高精度。当然,大家也可以根据自己的实际情况改动上述函数。4 v9 h$ \9 R0 a2 U
" p# f; q5 A' }% `! H: h
0 b& Z9 s$ \7 a X" Y! _- H* l
4 实验现象
% d7 Q4 o1 J: M. k {: X* p! y9 s' c: r3 z4 |
首先,插好 Jlink 和 USB 转串口,然后打开打开串口调试助手。
w& n+ U4 v$ Y
1 a2 k" }: e( N, z* N/ t5 r (1)选择串口号,我们图中是 COM1,这个根据实际情况选择。( [! `1 b: _1 g0 A: ?% c$ ~. M
- D+ _ S4 h* W. y
(2)配置串口参数,波特率为 115200,数据位 8,停止位 1,没有校验位和控制流,与下图一致。
: e) s; `" m5 q4 i! H
' |! q3 s5 g- S* m$ U. X* m# ]& k9 p (3)点击打开串口。
4 q2 L2 y9 ^% z: g* W8 a7 ^$ l
0 d# N B& l5 R- c5 q) F
+ \7 X6 g% V! d图 2
% i8 V- E" ~; I7 j3 Q2 \配置完串口之后,打开我们提供的代码。
$ b* Q9 c1 G9 r0 u( p; @7 [
! r. a& k- u% K" R(1)点击仿真按键。7 C& d- n* H9 }$ p
/ E0 I/ O K' Q" X) j
, Q; [8 P8 _$ H: J图 3
6 X" r6 \- x: v: f5 W1 p(2)点击运行代码。7 Q# L# w; Y, T5 ~8 {) f" S# x
u3 `# G# W, ]0 v$ g
9 X/ k6 H1 W1 ~9 Z5 b
图 4, X. h( g2 o; R' V0 `) }: @8 H
3 F/ H4 n& K7 C& ]' _2 @) X) V$ F* p0 c2 _: M \' W6 q" X6 H3 T* ?
完成之后,就能看到串口调试助手接收框信息如下。4 G, `4 C" N+ y5 M% ]
% S. K9 p# X7 @4 P
- m# |5 r/ q' S, H2 L! K! K+ V图 5$ P9 t7 V% ~6 P7 v+ P# ^4 Y
Z( {) O y8 A
+ p3 F( f. W& k6 T
: t4 U* ]) _$ a4 h文件下载请点击:
3_(100%开源)蓝牙心率防水运动手环_电池电量检测.pdf
(772.76 KB, 下载次数: 0)
5 {6 j9 t2 b* ^/ Q/ {
. Y' M: P; I/ `% u: b. {9 L |
|