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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
蓝牙心率防水运动手环
——疯壳·智能穿戴开发系列
电池电量检测
' f1 Q' r, S$ D2 D$ G7 r# i# {
: J) Q" |( T  {$ V
# Y1 ~9 {1 X( @

% o4 R. V4 p( c. w1 j! y9 M3 g6 P4 E/ V6 V3 n; c
1  ADC 简介; |; R. q3 N% k& N

# Q8 I0 A, @- V. ]& n  ADC(Analog-to-Digital Converter),模/数转换器或者模数转换器,是指将连续变化的模拟信号转换为离散的数字信号的器件。3 g% y" H: j1 R' D3 r
  我们 DA14580 集成一个高速超低功耗的 10 位通用模数转换器。可以工作于单端模式也可以工作于差分模式。ADC 模块有一个 1.2V 的电压校准器,作为满量程的参考电压。
4 j) d& _# j1 y  d  该 ADC 模块是 10 位动态模数转换,转换时间为 65ns;最大的采样率为3.3MHz;超低功耗(在 100KHz 的采样速率下典型供电电流为 5uA);有单端与差分两个输入比例;有 4 个单端或者 2 个差分输入通道;电池检测功能;斩波器功能;偏移和零刻度调整;公共端模式输入电平调整。
' w1 n$ j3 u4 }  由于电池电压与其放电时长成负相关关系,我们就可以通过 DA14580 的 ADC测量电池电压,直接判断我们所使用的电池剩余电量大小。& G  s) Y: E3 t7 h$ F

1 a" t& P" |& f5 N  r7 N/ j2  硬件设计: D7 G- F/ ~) L
/ I! Z% [3 d5 V0 M$ L6 E$ B% [$ ?# s. t
  本次 DA14580 采用 P01 脚直接测量电源电压。" a1 K/ g' q( ]1 ]! L7 \- C3 F- L

3 q. G- h% _. |8 @$ y- l $ A  k4 M. z! [+ }
图 1
& C" ]: K4 g) L% y; @2 {* g; B5 q0 f5 h7 H
3  软件设计$ R! m) D: Q- W2 {/ i/ V! ]
! z. z! J1 h% t! q
  软件开始,第一步要进行的是系统初始化。& R: _8 ?! W2 X
  [! P% {0 d' q' P3 q1 b, I

8 ]. W: k& \7 u% F! E1 v9 z 5 g" C$ Z# H/ z3 n$ t

7 o7 p$ ~: n2 x6 R
$ Q. X1 z! E7 }9 E; l7 B( E  由于我们要使用串口打印,就要配置我们要使用的串口。首先,要点调用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 个流程,就可以通过串口打印信息了。
: E) g5 Y+ m; d2 z0 \  关于 ADC 采集电压,主要是调用下边的函数) N1 c; d. R. k# J0 ]+ b# G

! |  E% r, B' b) l$ d
9 u! }( {1 q4 @ ' @% y4 A0 s& u/ l* k3 B" d. E

" e6 A. p! j% @9 F1 Y4 f  S0 e! Y) t1 v
  在这个函数中, 首先是采用 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。% g5 a' C# t+ \
  完成 ADC 初始化后,就要使能相关的 ADC 通道。adc_enable_channel(uint16_t input_selection),本次使用的是通道 ADC_CHANNEL_VBAT3V。
- T( f; |5 j: J0 p" ~1 c& W4 ^+ p: N  完成 ADC 的初始化和通道使能后,就可以调用 adc_get_sample(void)获取数字电压。& Q: Z- c9 h5 Y* `

* _; f9 u: A$ u" ]! c9 j' U  K# s1 _, b

7 {; Q" {* g5 B: G2 P% g  J6 X8 N( u6 r( q9 Q) G
  最后就是通过下面函数将数字电压转换为剩余电量百分比。+ s5 @' E- @- Y8 \" j
' m) j/ l: L, I- U) g" L9 K9 g
) p* I7 Z. P6 C8 f
' ]' Y! K$ @6 m& ?% B
  这是函数采用的分段的形式,这是由于我们的电池电压与电池剩余电量的关系是一条曲线,通过分段计算,可以提高精度。当然,大家也可以根据自己的实际情况改动上述函数。* {+ H7 X( s: e! p# h
+ D5 f) W3 _+ |) i0 i1 N

6 F1 U2 E4 y2 I1 o( X# G8 d4   实验现象. ]. m( V' @. e' p- F" t* Z
9 g  ~8 K2 y% M
  首先,插好 Jlink 和 USB 转串口,然后打开打开串口调试助手。4 X- C) X5 h- C5 Q( }2 }* _; O

, [" k( r7 B7 N( _$ N( V# J$ z1 K  (1)选择串口号,我们图中是 COM1,这个根据实际情况选择。
4 {8 @2 m/ @5 Q4 Y* H  D$ ?& y+ ^
  (2)配置串口参数,波特率为 115200,数据位 8,停止位 1,没有校验位和控制流,与下图一致。
6 T2 D8 j# E7 I  ]7 N' Z! E: k. r0 A, ]: c
  (3)点击打开串口。" I. @' u' [% ]+ ~$ [0 @

* r# F7 p7 C4 Y 2 M" P9 o' f) G# d7 k( ?
图 2; @9 t* n) J6 ]/ I$ K0 d0 ^* }
配置完串口之后,打开我们提供的代码。- C; ~* C% `1 I
5 B, {% ~1 O/ _' `8 P
(1)点击仿真按键。9 x3 d. P" X! O* ~5 \! C
) c0 T4 _) m+ K& y' u
; l& a8 P, `/ ?0 m
图 3! A5 l! z; S+ S9 s! ~8 l- h. e
(2)点击运行代码。
. t! F; k5 e: e0 _
  {. z4 {5 H+ w4 t! h; U* Q         * C+ D- b. a5 E5 P
图 4* I; B& ~( J1 ]

' N0 D) l8 O( J/ F/ Q$ z* ]3 ~( z# o/ g' F
完成之后,就能看到串口调试助手接收框信息如下。7 P2 M) U- y0 ~1 v* `, O
0 [: _2 t7 g' u  e7 ?

7 }9 R9 H( r& k0 A9 H* v! b# l图 5
& l" D* U) ?* @0 |
/ k3 a. ]1 ?& i. u
4 U- F+ a0 A! ~' l8 U
" I! {7 x( o  ~' y
& A0 ?% R! e6 f0 P$ K

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-10-28 19:50 , Processed in 0.171875 second(s), 26 queries , Gzip On.

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

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

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