你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【经验分享】STM32G031无线温湿度仪开源项目 -7,低功耗的实现

[复制链接]
STMCU小助手 发布时间:2021-11-11 22:00
如果是定时上报温湿度数据的方式,我们可以将这个节点做成低功耗的,这样用电池供电,使用起来就非常方便了。, s% H$ C% h2 A
低功耗实现有2个地方:
5 z7 K! l3 U# E9 j/ X! N1,MCU本身的低功耗;% e$ k9 Y$ Y2 Y4 B
2,DRF169H的低功耗;0 @! t' P) I3 s( ?: g! {) m
AHT10的功耗非常少,我们这个是采用5号电池供电,基本上就不需要考虑了。
, I) v" ?% o7 E% D3 L# }1 x项目做下来,休眠时大约电流是50UA,如果20秒发送一次,电池用一年基本上是没问题的。
# X7 G5 H+ |) A1 \5 L% F下面来分别简述下这2个方面的实现方法:
5 j2 r: h2 t9 W; ?4 ^. W$ g
6 w7 R. V' j& x0 G1,MCU本身的低功耗7 x# `! d; Z$ h/ @8 H5 l7 A! K  X
STM32G0系列的功耗管理函数在这2个文件里面,是ST自带的库函数,实现起来非常方便2 z: i2 ^+ u, U
stm32g0xx_hal_pwr_ex.c. @' w2 E1 r1 Q' n7 d2 ~
stm32g0xx_hal_pwr.c( L' z& Z; k. @
7 ~9 h6 T# D+ n+ d% j6 a" K) M
具体的实现方法:9 W! Q7 C" L; Y  Q: |, |' L8 [9 I
1,关闭LED及设定DRF1609H进入休眠,设定DRF1609H进入休眠是串口发送指令给DRF1609H
5 |' V( L2 C8 `) u& ~" E! Q2,设定RTC中断时间,设定MCU进入低功耗
0 l2 y' X. N0 V5 H3 R* T. h3,RTC中断唤醒MCU休眠% A+ p  v1 Q3 b4 X! Q
4,唤醒后重新初始化MCU(包括系统时钟、串口、IO口、DMA)
9 v5 {8 f: V/ X  c, Y7 v  c5,测量一次温湿度数据3 [; J' S" _* [  N5 M4 |; p& k
6,唤醒DRF1609H,下拉DRF1609H的Function按键唤醒
2 K, S; \, `: l* w$ o$ d! N7,发送温湿度数据; R5 [/ ]. ~) k  g, k% A+ B
8,重复以上1-7
% m, r+ D$ H& n; y# [7 c- w' C; F, P. i4 Y$ f" d
  1.                 // --Enter Low Power Model  -- //
    ; B1 Q- a1 r( ^: P( P* g4 H) A3 v5 I
  2.                 LED2_OFF();
    . a" T0 i/ P& Q/ m- O
  3.                 drf1609h_enterLowPower();
    # y3 _, h5 O- f2 @
  4.                 HAL_Delay(5);
复制代码
  1.                 //--Set wake up time = 0x500B = 10S ----
    ( z' `7 ?' ^; g4 x* C, Y" {
  2.                 //--Set wake up time = 0xA017 = 20S ----
    8 s. x9 a& p4 O: S# }, W; @
  3.                 HAL_RTCEx_SetWakeUpTimer_IT(&hrtc, 0x500B, RTC_WAKEUPCLOCK_RTCCLK_DIV16);
      o# k3 N+ g8 w
  4.                 HAL_PWREx_EnableFlashPowerDown(PWR_FLASHPD_STOP);
    6 v: C3 ~" W% P0 [
  5.                 //HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFI);) c2 W- _5 s' _  x6 v
  6.                 HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFE);
复制代码
  1. SystemClock_Config();
    * K. W; T+ ~8 w
  2. MX_GPIO_Init();
    : S" c% S. C$ Q. ]4 N- j
  3. MX_DMA_Init();; z7 p; O$ H5 v+ ~( c. o$ v
  4. MX_USART1_UART_Init();
    0 z* C- O2 T, C2 H4 {7 k

  5. / C" u8 f  i8 \
  6. LED2_ON();
复制代码
  1. //-------------------1 K  j6 E: Q. z" d0 G, @& ^! O
  2. read_AHT10_once();
复制代码
  1. //--------------------
    ; C' e* ]: H$ N0 C. b/ `. y
  2. drf1609h_outLowPower();
    / Z6 K- C" K3 A$ A1 h  t
  3. HAL_Delay(5);
复制代码
  1. //--Send out the AHT10 Data as point-to-point transfer model -----
    - U/ F& s9 S' r8 y
  2. set_lowpowerSendOutData();<div>HAL_UART_Transmit_DMA( &huart1, lowPowerSendOutData, 8);
    3 w  v! I8 |5 u  f' M4 c8 G; R
  3. HAL_Delay(5);</div>
复制代码
7 b7 M9 @* X: }. j5 S. w1 m2 k
2,DRF169H的低功耗实现! G7 r0 H% K1 T7 x
2.1,进入低功耗
1 o& N, g5 l3 j. }DRF1609H只有工作在End Device节点下才有低功耗功能;
. {6 ~. P% d) C. K1 `7 P发送指令,即可以使DRF1609H进入低功耗,发送指令后是有回复的我们可以等待回复,也可以delay 5MS
1 _* p( @+ d9 s( A  [
  1. drf1609h_enterLowPower();
    - V0 m* X: w$ q* [: L# g6 @9 E7 J
  2. HAL_Delay(5);
    2 x9 Q; h6 M# P; `% C/ ?. i
复制代码

* L; T  u+ z+ f# a/ E- T5 D+ {: [具体可以参考DRF1609H的说明书
' w- f$ ^8 ^9 ^# [8 |8 i* u2 W! o
/ K# [, S- q: W' H
20200213154402218.jpg

) b6 o( C6 @# T
20200213153434699.jpg
2 b( E8 j( j  O: v' k5 y% g+ x
20200213153446292.jpg
$ I8 R/ B2 O- N7 y. ^
20200213153456791.jpg
) O4 m/ A9 l, B/ F- }
2020021315350837.jpg

8 o! s0 o4 P: C. m! a
, M% w6 L  [4 W; [0 `5 q  N# f
  i7 v( C# l  @& }4 n& w. G  ]3 K2.2,退出低功耗
" M+ E, h5 v2 M1 }退出是模拟下拉Function按键5MS实现
$ e3 {( d4 r) l$ N' R( Z( o5 b! U" S' m
  1. drf1609h_outLowPower();
    , Z8 e7 x# h9 X$ {% q- |
  2. HAL_Delay(5);
复制代码
  1. //-----------------------
    $ q: E2 N8 \4 a. X5 G1 g
  2. void drf1609h_outLowPower(void)
    1 h0 `' k: e1 u9 P! j0 T6 J2 ^
  3. {. |# f, y# L* Q
  4.         set_outLowPowerPin_outPut();
    1 c' @( r# E  \/ C% Y
  5.         HAL_Delay(1);' A9 @) ^4 n2 `2 `( K0 U
  6. 8 Z, X$ p! r' K+ S- n$ L
  7.         set_outLowPowerPin_out_1();
    1 b' s4 V4 q9 n  R
  8.         HAL_Delay(1);. g; Q/ W7 ?+ w' P2 `' r

  9. 8 a% q+ u# S$ A+ F$ I2 m
  10.         set_outLowPowerPin_out_0();& G8 C  m' P% @8 G
  11.         HAL_Delay(5);; ?3 n4 f  L9 E' Z7 K7 b+ s

  12. , U3 B" L) m8 u2 j  y
  13.         set_outLowPowerPin_out_1();
    * u% F( t& ], u; f; m7 S8 \
  14.         HAL_Delay(1);
    5 L9 n' y3 ^: s1 F7 d. R5 c$ c
  15. 9 j2 \7 M7 }6 ?& ?- J
  16.         set_outLowPowerPin_input();2 [' t* X5 h" ~3 D8 G- G
  17. }
复制代码

  A8 {0 r( X' `, b2.3,退出低功耗以后的数据传输4 s' @/ d# f. s9 d6 |$ F
DRF1609H进入低功耗以后,将不会自动更新路由路径,所以唤醒后用点对点发送方式,点对点发送方式会自动寻找路由,但是效率比较低,所以一般情况下用透明传输方式。; q8 N! f% j$ d- r$ N8 J
Coordinator的短地址永远是0x0000,即采用目标地址为0x0000的点对点方式发送。
1 ~. O! g  o& }  T4 [点对点发送的官方描述是这样的:
' k: _% @7 p7 S4 S# n$ V! X; c. a  H; M3 ^  d% d. v% I' ^$ C% K

' U9 N( Y- W: s, F+ k( K; b3 t
20200213154415740.jpg
1 n1 C" W- {" q1 g
6 v& |( {! u5 d: C" W/ w/ [3 s  J
代码实现为:# k$ @8 H* z3 [  v0 u

  |6 m3 b, @- v
  1. //--Send out the AHT10 Data as point-to-point transfer model -----5 K- a! S. C& r/ x$ o! x7 ?
  2. set_lowpowerSendOutData();% K$ \7 i% t8 c3 ~: v
  3. HAL_UART_Transmit_DMA( &huart1, lowPowerSendOutData, 8);
      c: K& ]' A6 e; m7 E  G) [- |
  4. HAL_Delay(5);
复制代码
  1. //----------------------; W) K% Y" \) c! _. R: o0 p- Z
  2. void  set_lowpowerSendOutData(void)$ J& o! R2 |8 r. |
  3. {
    % E) T% f3 G; F) D6 @. o- n* {) I
  4.         lowPowerSendOutData[4] = AHT10_OutData[0];  A- V$ S( ?/ L9 b) X' _
  5.         lowPowerSendOutData[5] = AHT10_OutData[1];9 d. N8 [( l  M
  6.         lowPowerSendOutData[6] = AHT10_OutData[2];# q$ B1 K$ n+ U2 T# U3 W
  7.         lowPowerSendOutData[7] = AHT10_OutData[3];  O5 `5 Y$ g# ]! K: N3 i" g
  8. }
复制代码
  1. uint8_t    lowPowerSendOutData[8]={0xFD, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
复制代码
% g, I9 n# C0 {: }/ [

( S! V& d. X* c  I' R! [$ y: f  ~3 S( V  l- N3 {/ C  o
9 n# i' z& e/ X
20200213153420781.jpg
收藏 评论0 发布时间:2021-11-11 22:00

举报

0个回答

所属标签

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版