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

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

[复制链接]
STMCU小助手 发布时间:2021-11-11 22:00
如果是定时上报温湿度数据的方式,我们可以将这个节点做成低功耗的,这样用电池供电,使用起来就非常方便了。: j8 D7 ]/ T) D2 h% X
低功耗实现有2个地方:4 U- t) ?2 v# Z9 [# g, `; j; ~+ E
1,MCU本身的低功耗;% {4 |8 e; a3 o. }5 b" K( G
2,DRF169H的低功耗;
! d( D$ k8 P+ q- RAHT10的功耗非常少,我们这个是采用5号电池供电,基本上就不需要考虑了。. h7 k; D3 o! m* p
项目做下来,休眠时大约电流是50UA,如果20秒发送一次,电池用一年基本上是没问题的。
( }7 Z8 s& D9 ^+ `9 `* m- t& u2 I下面来分别简述下这2个方面的实现方法:
! ]! P% \1 S9 t8 _
7 S6 f5 F# v) K  G! D1,MCU本身的低功耗
( c2 M8 k( o6 l, I4 bSTM32G0系列的功耗管理函数在这2个文件里面,是ST自带的库函数,实现起来非常方便
' \; I7 j' z4 A, Mstm32g0xx_hal_pwr_ex.c
, j$ |3 _  s& P7 h! Astm32g0xx_hal_pwr.c8 ^# i0 h% a& u- g; |, ^
$ n+ l0 }$ q( _- J% d
具体的实现方法:
4 o8 b1 _6 B7 _7 Y$ K6 m1 p- F3 P1,关闭LED及设定DRF1609H进入休眠,设定DRF1609H进入休眠是串口发送指令给DRF1609H
& M+ C4 ^5 c0 ~4 v" H$ K: c2,设定RTC中断时间,设定MCU进入低功耗
9 s3 g) q( t- {: s3,RTC中断唤醒MCU休眠
* ]2 @* {0 C8 _7 R4 V1 v4,唤醒后重新初始化MCU(包括系统时钟、串口、IO口、DMA)  q! S1 n) z9 s* R7 f& ^* o
5,测量一次温湿度数据
6 |3 o- |- p4 s" `6,唤醒DRF1609H,下拉DRF1609H的Function按键唤醒
+ n" q' s6 X1 i: a/ {3 |2 s2 L( B7,发送温湿度数据; J2 f) C  @" Q: G) M" ~0 k
8,重复以上1-7
* @& Y% O' }  J4 E3 G6 _' M& I, I8 l$ D
  1.                 // --Enter Low Power Model  -- //
    5 H$ q- E" @% M$ x
  2.                 LED2_OFF();
    & {8 X+ t& r/ O
  3.                 drf1609h_enterLowPower();
    & X! g$ i' D% h0 \( h( E" p( X
  4.                 HAL_Delay(5);
复制代码
  1.                 //--Set wake up time = 0x500B = 10S ----
    2 m& ~: R3 h- w. [+ z) m
  2.                 //--Set wake up time = 0xA017 = 20S ----
    $ H  {$ Q5 a: Z) N1 I
  3.                 HAL_RTCEx_SetWakeUpTimer_IT(&hrtc, 0x500B, RTC_WAKEUPCLOCK_RTCCLK_DIV16);
    2 `! z% t0 t9 i) W+ D' H4 `
  4.                 HAL_PWREx_EnableFlashPowerDown(PWR_FLASHPD_STOP);
    0 T! m* `; `4 m% b0 Z
  5.                 //HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFI);5 T4 J) H, |0 ^: {" l
  6.                 HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFE);
复制代码
  1. SystemClock_Config();+ k" Q# T+ [6 V) h, _5 s) W
  2. MX_GPIO_Init();
    : b7 J+ f8 U+ u9 E1 ]
  3. MX_DMA_Init();6 ?; ?+ ~" w( [  V% e; r
  4. MX_USART1_UART_Init();
    " q0 w& o/ r* _6 J! N2 Y; T
  5. " {3 A0 i* ]8 R) m4 v/ J$ L0 y; ~+ c, P/ m
  6. LED2_ON();
复制代码
  1. //-------------------; a" c0 E+ u% U* c/ ~
  2. read_AHT10_once();
复制代码
  1. //--------------------) n9 x" F5 @$ L+ D# u
  2. drf1609h_outLowPower();6 G) }# ?2 R1 A, A) ]) |' c
  3. HAL_Delay(5);
复制代码
  1. //--Send out the AHT10 Data as point-to-point transfer model -----
    . N2 k) V" Q0 v1 k7 s8 @4 z
  2. set_lowpowerSendOutData();<div>HAL_UART_Transmit_DMA( &huart1, lowPowerSendOutData, 8);
    6 K/ [) J. C8 f! C, i
  3. HAL_Delay(5);</div>
复制代码
5 {) {- Q- s* |- D  F% h
2,DRF169H的低功耗实现
" U! j8 Z8 @2 i/ }7 C6 h" Z0 i2.1,进入低功耗
: s; y( }" P$ [9 t- V- j% oDRF1609H只有工作在End Device节点下才有低功耗功能;' `6 V3 b% f5 C0 }$ q, D! _
发送指令,即可以使DRF1609H进入低功耗,发送指令后是有回复的我们可以等待回复,也可以delay 5MS8 l7 L/ T+ p" Q5 P. D+ ^0 W
  1. drf1609h_enterLowPower();; W2 `) a$ O& A0 E" |/ S
  2. HAL_Delay(5);( t, P0 Q$ \- u* s( b. U2 R2 W
复制代码

0 I# i4 ?$ ~0 f0 z具体可以参考DRF1609H的说明书
1 h* E1 o7 ~" b; o' c% K) M' o% H% B' U" `  p8 \) \, Q  D* n
20200213154402218.jpg

  m$ n9 E9 a* `. G0 V* T
20200213153434699.jpg
% t0 a0 w' k6 T* ]2 q9 Z6 k
20200213153446292.jpg

2 z: E9 K, z! L4 p) c7 g
20200213153456791.jpg

; h7 x  C  I( o1 T9 x
2020021315350837.jpg
  E) q: {7 `9 @2 q! w7 X7 P* [

( A  W3 L6 U8 s2 e+ K- o  o
, m; `) u  u$ \* _: Y2.2,退出低功耗" D3 K, z) g: y2 L3 A
退出是模拟下拉Function按键5MS实现- ?: f5 A5 V9 |, R% a0 c  L; p
  1. drf1609h_outLowPower();; s, ^! a# z6 [+ M7 x2 _
  2. HAL_Delay(5);
复制代码
  1. //-----------------------0 C; e5 C6 B' E0 R  p9 H+ v
  2. void drf1609h_outLowPower(void)8 w% y) \9 o4 E: {3 G
  3. {: [4 Z; {" W( s7 R
  4.         set_outLowPowerPin_outPut();
    8 A5 h! u' a2 K. `/ h3 P
  5.         HAL_Delay(1);
    2 ?6 E5 q0 K# ?6 o' m* @" ]. b
  6. " j/ S, [% `! O; c
  7.         set_outLowPowerPin_out_1();3 h" L: ]5 a% w
  8.         HAL_Delay(1);
    + |8 d& I* O- L2 J2 i! ^: f7 B9 t
  9. 6 I8 f/ E, ~3 \# s/ x
  10.         set_outLowPowerPin_out_0();% U) ^" M6 u7 h  I
  11.         HAL_Delay(5);
    ) O* m( G7 K4 B* Q
  12. 1 Q1 E6 {% U& n0 O5 H0 Q: A, V- r& r
  13.         set_outLowPowerPin_out_1();4 y$ [) y# }) k" `0 q* ?7 A+ s
  14.         HAL_Delay(1);) A, A: c* k% q; M# A
  15. # p) @  \* H  W. A1 m( k
  16.         set_outLowPowerPin_input();" m$ w4 Y9 X7 f% r
  17. }
复制代码
3 T# x( J: a1 t) k2 ?2 T' o
2.3,退出低功耗以后的数据传输
4 Y0 f6 S" {  Y# e9 R1 vDRF1609H进入低功耗以后,将不会自动更新路由路径,所以唤醒后用点对点发送方式,点对点发送方式会自动寻找路由,但是效率比较低,所以一般情况下用透明传输方式。, U9 I$ v- t9 \6 X
Coordinator的短地址永远是0x0000,即采用目标地址为0x0000的点对点方式发送。+ {0 H2 n5 t! |! c* `9 V8 G
点对点发送的官方描述是这样的:
5 F2 `3 E9 @9 O9 s' Z5 ?4 V4 J; S
# m8 P! C* z: X9 c# Q/ E7 Z+ _+ {

1 ~! I; T/ H$ w+ F
20200213154415740.jpg

3 Z3 I9 {# ?4 B: C& l( Q
5 _6 f$ R- w% e5 P! [+ Z8 E代码实现为:7 X6 }3 G! y, y8 U3 e
9 K. U3 e9 U4 d8 k6 h$ z
  1. //--Send out the AHT10 Data as point-to-point transfer model -----  ^3 }& ?0 T! w" _+ e
  2. set_lowpowerSendOutData();
    ! k7 P/ T9 d, x6 b
  3. HAL_UART_Transmit_DMA( &huart1, lowPowerSendOutData, 8);9 A. b  ]: `" ^- A. R' z. g
  4. HAL_Delay(5);
复制代码
  1. //----------------------
    " W0 g5 d5 [6 V; k  F/ I: N  d8 [' z
  2. void  set_lowpowerSendOutData(void)
    0 `2 V5 @  z; x/ m
  3. {
    9 R& r+ b( T: o& W. a; f# S
  4.         lowPowerSendOutData[4] = AHT10_OutData[0];3 E( z7 ?% F/ Q* u( Z
  5.         lowPowerSendOutData[5] = AHT10_OutData[1];
    ! _* a& G8 Z! G; I
  6.         lowPowerSendOutData[6] = AHT10_OutData[2];) ^( l; l: d! H6 z' M
  7.         lowPowerSendOutData[7] = AHT10_OutData[3];7 }% m8 G9 T0 i# c" [% `5 P% u
  8. }
复制代码
  1. uint8_t    lowPowerSendOutData[8]={0xFD, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
复制代码

, c4 X4 ^+ a, m& T" H
6 z; _0 s0 r! c( V( h- l6 ~. J; N& v% u$ y  l

/ C1 k# x% |+ a4 }' \8 h
20200213153420781.jpg
收藏 评论0 发布时间:2021-11-11 22:00

举报

0个回答

所属标签

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版