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

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

[复制链接]
STMCU小助手 发布时间:2021-11-11 22:00
如果是定时上报温湿度数据的方式,我们可以将这个节点做成低功耗的,这样用电池供电,使用起来就非常方便了。/ E6 q9 N+ K. D( j; [* L( s+ {; x! o
低功耗实现有2个地方:# C& M7 a* T/ S
1,MCU本身的低功耗;1 p& M2 p# _  M4 L* h$ y( O
2,DRF169H的低功耗;
' U/ N" v. }5 k! K6 V: j9 A5 o  ^AHT10的功耗非常少,我们这个是采用5号电池供电,基本上就不需要考虑了。4 ?' `  _- f8 y! {
项目做下来,休眠时大约电流是50UA,如果20秒发送一次,电池用一年基本上是没问题的。
! A5 u0 g8 G+ T下面来分别简述下这2个方面的实现方法:
! e( M: B# B* _; ]; B* c' R% _' ^5 @) n/ J
1,MCU本身的低功耗
2 F% d( c4 S; ~( }1 qSTM32G0系列的功耗管理函数在这2个文件里面,是ST自带的库函数,实现起来非常方便
& e$ m& u$ B0 j6 X- Q( \9 H  X; g8 u; Kstm32g0xx_hal_pwr_ex.c
9 d& B9 I( r5 p" A4 g* j& Estm32g0xx_hal_pwr.c
* i& _  M) C" f" ]4 s
: B! {9 I2 M" c5 l  p& J% `; S: A  D具体的实现方法:$ `2 P& k) j& C: j& V6 T! [2 j
1,关闭LED及设定DRF1609H进入休眠,设定DRF1609H进入休眠是串口发送指令给DRF1609H
' l, A0 Z2 z0 o. N2,设定RTC中断时间,设定MCU进入低功耗
) i8 b( ]  Y, k$ a9 i: l3,RTC中断唤醒MCU休眠
" V! ]. `# q* t3 |1 t( A4,唤醒后重新初始化MCU(包括系统时钟、串口、IO口、DMA)$ {" a, {9 T2 ^; e
5,测量一次温湿度数据- i2 R2 M: p5 [  E4 p. T
6,唤醒DRF1609H,下拉DRF1609H的Function按键唤醒
- _, T& i/ [, q. k( g7,发送温湿度数据
* E7 R5 ?* {$ T8,重复以上1-7
3 g% a1 j& J2 c8 t* P% |/ \# D2 t; E0 _3 O" R+ @0 X9 E: h
  1.                 // --Enter Low Power Model  -- //0 D4 Q2 H7 w7 [% P6 `
  2.                 LED2_OFF();
    * l0 w( r' Y! }' b
  3.                 drf1609h_enterLowPower();
    $ s3 ~+ L1 g8 w: |( J' j
  4.                 HAL_Delay(5);
复制代码
  1.                 //--Set wake up time = 0x500B = 10S ----# d: B+ X  J) J& V  o5 E
  2.                 //--Set wake up time = 0xA017 = 20S ----9 F. |$ x8 e9 }
  3.                 HAL_RTCEx_SetWakeUpTimer_IT(&hrtc, 0x500B, RTC_WAKEUPCLOCK_RTCCLK_DIV16);
    . m, c# k7 e. S) c4 H% w2 O! E- P2 W6 A
  4.                 HAL_PWREx_EnableFlashPowerDown(PWR_FLASHPD_STOP);% F% ?  ?& n( ]0 V
  5.                 //HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFI);* h0 ]% H9 V! U5 {& ]% @
  6.                 HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFE);
复制代码
  1. SystemClock_Config();
    1 Y0 _/ m" X0 {
  2. MX_GPIO_Init();$ L0 u1 p( X& M4 L( p; H$ Q. [
  3. MX_DMA_Init();0 e9 q9 R; v& L3 e2 w
  4. MX_USART1_UART_Init();" j8 D: q% L6 X: E) Y5 ?9 ~
  5. . @9 F5 R+ c9 r5 S0 u$ O
  6. LED2_ON();
复制代码
  1. //-------------------
    3 H' A' V. z* @1 Z0 k! T  v* x3 l- Z
  2. read_AHT10_once();
复制代码
  1. //--------------------/ v3 h4 |2 ^" `  W
  2. drf1609h_outLowPower();% W& l% f, Z8 M+ U% a. G) X1 s
  3. HAL_Delay(5);
复制代码
  1. //--Send out the AHT10 Data as point-to-point transfer model -----
    . s# R6 p; j$ _  L, \. S
  2. set_lowpowerSendOutData();<div>HAL_UART_Transmit_DMA( &huart1, lowPowerSendOutData, 8);7 f/ u% A: C' \6 ^
  3. HAL_Delay(5);</div>
复制代码

. e" i/ p0 ]% N0 C& T  y6 [' U2,DRF169H的低功耗实现6 r3 ]- `6 Y7 X+ S
2.1,进入低功耗
0 ^* F9 ]/ ?: D" p6 P2 o% WDRF1609H只有工作在End Device节点下才有低功耗功能;3 X" z, b! W0 u: K, N
发送指令,即可以使DRF1609H进入低功耗,发送指令后是有回复的我们可以等待回复,也可以delay 5MS
6 k$ I9 s4 }2 @. X3 r0 s9 v1 f6 ?/ F
  1. drf1609h_enterLowPower();
    7 y# v9 D. u" v* D
  2. HAL_Delay(5);" L: c% I) f2 E5 A5 @( A
复制代码
1 @! K2 j1 H- U
具体可以参考DRF1609H的说明书& M/ w5 ^+ }0 T. |/ ]
% T6 E" x7 x+ |7 z+ e, ^
20200213154402218.jpg
0 l2 x4 U+ B' c$ i
20200213153434699.jpg

" T, p  A6 X6 t( z7 G* f- Q
20200213153446292.jpg

: a& D/ D* \! Y9 r* h
20200213153456791.jpg
9 q4 B. h2 b) P. n. T# F
2020021315350837.jpg

6 x. Z. U1 ~6 P& h% s1 D4 T: ?5 e) m5 s& ?1 y

5 F% I5 W. H) D) v: S$ M! g6 V2.2,退出低功耗
5 F% f1 B0 ^: }9 O, m退出是模拟下拉Function按键5MS实现
1 z# a- X% x$ g7 t2 J
  1. drf1609h_outLowPower();  Y8 i7 ^2 y1 o+ W
  2. HAL_Delay(5);
复制代码
  1. //-----------------------
    ; k% T. ^( N! ~1 D
  2. void drf1609h_outLowPower(void)
    ; c9 M; w9 q& K& j8 K6 |8 v
  3. {( i; P8 O# T1 n+ o
  4.         set_outLowPowerPin_outPut();) r: y$ R/ j( v0 x/ l7 y
  5.         HAL_Delay(1);
    , j. a' `' D  f9 u% ^4 {# z

  6. 9 N7 h) J$ ^7 R+ r5 S( j
  7.         set_outLowPowerPin_out_1();$ t" F" `2 e8 `% X: {6 J
  8.         HAL_Delay(1);4 D- w/ D- C: M' C8 P

  9. " p4 x$ x, S5 d. L% k
  10.         set_outLowPowerPin_out_0();
    + r% _! [- g4 d& J
  11.         HAL_Delay(5);
    7 P  N. K4 S3 k% t
  12. - Z$ G( v; {% o0 q3 g6 v/ _: k
  13.         set_outLowPowerPin_out_1();
    3 ?5 z, F! Q6 U' X$ O, j
  14.         HAL_Delay(1);; j, u0 l5 X( c2 V4 S7 q4 u

  15. , ?) @) V" v! j  G$ I3 Q
  16.         set_outLowPowerPin_input();/ K4 J7 h2 P# ~# i7 @* a6 ~' H
  17. }
复制代码
+ ]1 ^4 {' s6 S2 M: L, x
2.3,退出低功耗以后的数据传输) x/ _" i" }: b
DRF1609H进入低功耗以后,将不会自动更新路由路径,所以唤醒后用点对点发送方式,点对点发送方式会自动寻找路由,但是效率比较低,所以一般情况下用透明传输方式。8 m5 h% }% n  }$ K! a6 K4 Y
Coordinator的短地址永远是0x0000,即采用目标地址为0x0000的点对点方式发送。; L0 p' e! V( r) o' ^+ B8 L
点对点发送的官方描述是这样的:' E/ |# O* c4 Y: {0 d- `, V$ F

$ `! @2 z/ n6 G  s6 ~  t

" I: i0 |2 V( K9 k# m- A% I7 X" {
20200213154415740.jpg

7 @4 H% D( a: O4 {# U1 _( d. m: ^+ y/ ]' d
代码实现为:9 t: {3 F1 X( Y, t9 U, }1 Z

- M% f" p  z' W1 m
  1. //--Send out the AHT10 Data as point-to-point transfer model -----
    - H# W4 P) P- h. B! F7 V/ R  H
  2. set_lowpowerSendOutData();
    ! R! g. l6 ]; N! I4 {; V' c, m
  3. HAL_UART_Transmit_DMA( &huart1, lowPowerSendOutData, 8);! Y6 A8 g( _0 t! |' K& ^' Z1 I! C# k
  4. HAL_Delay(5);
复制代码
  1. //----------------------  Z: l/ `; t  C" s4 Q
  2. void  set_lowpowerSendOutData(void)( }) k* Z* S, `7 t$ e3 T2 f3 \7 @
  3. {
    9 m2 e0 `1 U1 P( s0 j2 {, f) a
  4.         lowPowerSendOutData[4] = AHT10_OutData[0];
    - z+ X( }. |6 V8 L( ?
  5.         lowPowerSendOutData[5] = AHT10_OutData[1];2 n5 ^  u7 C: e6 m4 o( l
  6.         lowPowerSendOutData[6] = AHT10_OutData[2];/ S( l+ d' W, B: A6 Z8 y4 C8 A1 `0 A
  7.         lowPowerSendOutData[7] = AHT10_OutData[3];
    # N$ k7 g6 h  c6 J
  8. }
复制代码
  1. uint8_t    lowPowerSendOutData[8]={0xFD, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
复制代码

; t( v3 P. @' {) p% ?7 ^' y5 u% M" E) @; b* C+ T
$ R9 a9 G% \6 `
" }* z6 h  q% N
20200213153420781.jpg
赞 收藏 评论0 发布时间:2021-11-11 22:00

举报

0个回答
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版