|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
开源蓝牙心率防水运动手环 ——疯壳·智能穿戴开发系列 电池电量检测 . g! f- O, I/ c3 r7 {7 T
+ D7 }3 {, H2 f6 Z/ } G
- k9 f; |3 N9 o8 e6 p: l( ^) i( E( e( o" T# \$ ?0 A
7 R8 ~. s& k, f* M: d
1 ADC 简介
# z: W% O- f; r" U( e3 F: f F+ @) d, k* u) s5 G
ADC(Analog-to-Digital Converter),模/数转换器或者模数转换器,是指将连续变化的模拟信号转换为离散的数字信号的器件。4 h; X! m2 _7 G* |1 _; w' Z; f
我们 DA14580 集成一个高速超低功耗的 10 位通用模数转换器。可以工作于单端模式也可以工作于差分模式。ADC 模块有一个 1.2V 的电压校准器,作为满量程的参考电压。
2 Z# I: e) O+ I, x8 r3 k 该 ADC 模块是 10 位动态模数转换,转换时间为 65ns;最大的采样率为3.3MHz;超低功耗(在 100KHz 的采样速率下典型供电电流为 5uA);有单端与差分两个输入比例;有 4 个单端或者 2 个差分输入通道;电池检测功能;斩波器功能;偏移和零刻度调整;公共端模式输入电平调整。9 l* S3 d8 y$ B, x
由于电池电压与其放电时长成负相关关系,我们就可以通过 DA14580 的 ADC测量电池电压,直接判断我们所使用的电池剩余电量大小。; i( S2 X: {1 i3 T( I1 c: W: F
# F( y+ r2 j* V2 v
2 硬件设计
! r" U/ I4 w$ r- ?) |! N1 }% W7 Y. r) q5 m0 x1 |) k
本次 DA14580 采用 P01 脚直接测量电源电压。
/ H; ^% u& H: y2 n- [1 \! @9 m. c8 f, U
; S' h, F: p# C7 S' e0 X; n
图 1
2 n2 x9 P- b# S" \# d( z9 L1 P: M# `3 E
3 软件设计
: k. ^9 U8 N3 q5 i5 g" q, n6 G$ _
/ d$ g( p, @ e! x4 s, G! J 软件开始,第一步要进行的是系统初始化。
# K$ t3 l5 r/ ] b! L+ P% u6 G c5 B1 F0 S2 i
9 K3 X. |* ^( m3 B
由于我们要使用串口打印,就要配置我们要使用的串口。首先,要点调用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 r8 t( z" A# d. S' L
关于 ADC 采集电压,主要是调用下边的函数9 j) m, a0 C- g) r8 l* }6 y! C
( J$ Q5 o, T" N* L. A; C6 U
. h0 l$ d3 I$ H
9 W/ g- `3 J0 ?% P* m3 r
# w2 }+ p- ]; H/ f' p# `. n
6 @) g- ^0 H; t' {5 B/ k' v
- w- _3 o' S+ ~ 在这个函数中, 首先是采用 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。
' }: W6 m' g* W" t# g 完成 ADC 初始化后,就要使能相关的 ADC 通道。adc_enable_channel(uint16_t input_selection),本次使用的是通道 ADC_CHANNEL_VBAT3V。
- P' K2 {4 U7 `3 t! i: W, L+ { 完成 ADC 的初始化和通道使能后,就可以调用 adc_get_sample(void)获取数字电压。
& o: e3 c9 Z) X
, e1 R# H7 f7 y1 o' c4 d! V6 `
5 m, O9 F* ?5 b$ {
7 O1 X6 v& \( q" L: h! C1 E; t7 Q$ f1 E# r0 b0 _4 r7 x& v+ I
最后就是通过下面函数将数字电压转换为剩余电量百分比。' ]& O% Z. b* j; E1 H' ~
) N7 W/ H$ A% [2 d5 [# Y. k5 _' y5 g. M9 T2 [) n
4 F* e, ^# M* \2 n1 s6 X6 L# O \* D6 x8 `2 R
这是函数采用的分段的形式,这是由于我们的电池电压与电池剩余电量的关系是一条曲线,通过分段计算,可以提高精度。当然,大家也可以根据自己的实际情况改动上述函数。
6 x: v( {# q+ x7 S# j% X1 u r0 G/ k9 q4 b/ @ O
7 Z/ N+ C7 ?2 r1 t( t3 o4 实验现象" f2 n- Q7 s0 o) e
8 D/ V& m6 t6 y: ], ?* s% \ 首先,插好 Jlink 和 USB 转串口,然后打开打开串口调试助手。2 r7 ~& A. ~! k5 ?& o; d* \; V7 H
3 h5 y* U' h" v2 Y% V- K' ~
(1)选择串口号,我们图中是 COM1,这个根据实际情况选择。5 x1 ?, B, E1 A* d
, q W, o, g! U- `5 O
(2)配置串口参数,波特率为 115200,数据位 8,停止位 1,没有校验位和控制流,与下图一致。
) i: a. \5 G7 e. ?* E
) C1 Z3 g" w9 E7 _% \+ I4 N (3)点击打开串口。8 z2 A Q( s3 m1 [- F v* t1 k4 I {
% R9 F& A6 c9 b" t/ s8 _
9 g$ z1 D- P) ~4 P* |4 F$ Q图 2
/ [" p2 a2 H, Z' F5 V配置完串口之后,打开我们提供的代码。
$ c+ d& ^0 O4 ]; e4 f. C# g! ^. ~4 l Z
(1)点击仿真按键。
# y+ y1 v& G3 x5 i; \1 D6 i9 Y% S. @7 g# D# S0 k5 U6 h
" D3 C5 t m) J" {! d: U$ I r
图 3
b8 R+ u3 j; ]' V+ q(2)点击运行代码。
& r. G" h4 H7 F- X" [0 E. m/ H0 w
1 D% U, ~3 Q& _1 }' f% E9 k7 D
图 4
" f! W F! @& R' t
9 @" o3 Q8 I5 y0 m2 J7 f# N- R/ w* u9 K# v. B; p% W
完成之后,就能看到串口调试助手接收框信息如下。
8 { Z( S( Z P/ W5 l, Q
5 J) F; _7 R+ {' \1 z
+ E6 A) O6 U: I; W; E4 |
图 5
0 U9 P2 F$ Y( \ b2 Z3 r# \. L* w& ^: y
- s. _" u* k* p7 S) s4 R+ s9 P/ d' t+ G
文件下载请点击:
3_(100%开源)蓝牙心率防水运动手环_电池电量检测.pdf
(772.76 KB, 下载次数: 0)
* P/ ?5 N5 h; \# l2 ^ S
8 R5 p* \" }3 Y/ x
|
|