0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于Arduino的低功耗睡眠模式设计方案

电子设计 来源:一板网 作者:风筝 2021-01-13 17:00 次阅读

功耗是设备长时间连续运行而不断电的关键因素。因此,为了解决这个问题,几乎每个控制器都带有睡眠模式,这有助于开发人员设计电子设备以实现最佳功耗。休眠模式通过关闭未使用的模块将器件置于省电模式。

今天我们将了解Arduino睡眠模式(Sleep Mode)并使用Ammeter演示功耗。 Arduino睡眠模式也称为Arduino省电模式(Power Save mode)或Arduino待机模式(Standby Mode)。

Arduino睡眠模式

睡眠模式允许用户停止或关闭微控制器中未使用的模块,从而显着降低功耗。 Arduino UNO、Arduino Nano和Pro-mini配备了ATmega328P,它有一个欠压检测器(BOD),用于监控睡眠模式时的电源电压。

ATmega328P有六种睡眠模式:

pIYBAF_-tgmAa_0CAAFGMzyf0fU022.png

要进入任何睡眠模式,我们需要在睡眠模式控制寄存器(SMCR.SE)中启用睡眠位。然后,睡眠模式选择位选择Idle、ADC noise reduction、Power-Down、Power-Save、Standby和External Standby的睡眠模式。

内部或外部Arduino中断或复位可以将Arduino从睡眠模式唤醒。

空闲(Idle)模式

要进入空闲休眠模式,请写入控制器“000”的SM [2,0]位。此模式停止CPU,但允许SPI、2线串行接口、USART、看门狗、计数器、模拟比较器工作。空闲模式基本上停止CLKCPU和CLKFLASH。通过使用外部或内部中断,可以随时唤醒Arduino。

空闲睡眠模式的Arduino代码:

LowPower.idle(SLEEP_8S, ADC_OFF, TIMER2_OFF, TIMER1_OFF, TIMER0_OFF, SPI_OFF, USART0_OFF, TWI_OFF);

有一个用于在arduino中设置各种低功耗模式的库。因此,首先从给定链接下载并安装库,然后使用上面的代码将Arduino置于空闲睡眠模式。通过使用上面的代码,Arduino将进入8秒的睡眠状态并自动唤醒。正如您在代码中所看到的,空闲模式会关闭所有定时器、SPI、USART和TWI(2线接口)。

ADC降噪模式(ADC noise reduction)

要使用此睡眠模式,请将SM [2,0]位写入“001”。该模式会停止CPU,但允许ADC、外部中断、USART、2线串行接口、看门狗和计数器运行。 ADC降噪模式基本上停止CLKCPU、CLKI / O和CLKFLASH。我们可以通过以下方法从ADC降噪模式唤醒控制器:

● 外部复位

● 看门狗系统复位

● 看门狗中断

● 欠压复位

● 2线串行接口地址匹配

● INT上的外部电平中断

● 引脚更改中断

● 定时器/计数器中断

● SPM / EEPROM就绪中断

掉电模式(Power-Down Mode)

掉电模式会停止所有生成的时钟,并且只允许异步模块的操作。可以通过将SM [2,0]位写入'010'来启用它。在此模式下,外部振荡器关闭,但2线串行接口、看门狗和外部中断继续运行。它只能通过以下方法之一禁用:

● 外部复位

● 看门狗系统复位

● 看门狗中断

● 欠压复位

● 2线串行接口地址匹配

● INT上的外部电平中断

● 引脚更改中断

用于掉电周期模式的Arduino代码:

LowPower.powerDown(SLEEP_8S, ADC_OFF, BOD_OFF);

该代码用于打开省电模式。通过使用上面的代码,Arduino将进入8秒的睡眠状态并自动唤醒。

我们还可以使用具有中断的掉电模式,其中Arduino将进入休眠状态,但仅在提供外部或内部中断时才会唤醒。

用于掉电中断模式的Arduino代码:

void loop()

{

// Allow wake up pin to trigger interrupt on low.

attachInterrupt(0, wakeUp, LOW);

LowPower.powerDown(SLEEP_FOREVER, ADC_OFF, BOD_OFF);

// Disable external pin interrupt on wake up pin.

detachInterrupt(0);

// Do something here

}

省电模式(Power-Save)

要进入省电模式,我们需要将SM [2,0]引脚写入'011'。该睡眠模式类似于掉电模式,只有一个例外,即如果启用定时器/计数器,即使在睡眠时它也将保持运行状态。可以使用定时器溢出唤醒设备。

如果您没有使用时间/计数器,建议使用掉电模式而不是省电模式。

待机模式(Standby)

待机模式与掉电模式相同,它们之间的唯一区别是外部振荡器在此模式下保持运行。要启用此模式,请将SM [2,0]引脚写入“110”。

扩展待机模式(Extended Standby)

此模式类似于省电模式,只有振荡器保持运行的一个例外。当我们将SM [2,0]引脚写入'111'时,器件将进入扩展待机模式。从延长待机模式唤醒器件需要6个时钟周期。

需要的组件

● Arduino UNO开发板

● DHT11温湿度传感器

USB电流

● 面包板

● 连接线

USB电流表

USB电流表是一种即插即用设备,用于测量任何USB端口的电压和电流。加密狗插入USB电源(计算机USB端口)和USB设备(Arduino)之间。该器件具有与电源引脚串联的0.05欧姆电阻,通过它可以测量所消耗的电流值。该设备配有四个七段显示屏,可立即显示连接设备消耗的电流和电压值。这些值以每三秒的间隔刷新。

电路原理

o4YBAF_-tjSAH-3bAADYlj-mK98471.png

在上面的演示中演示了Arduino深度睡眠模式,Arduino插入USB电流表,然后将USB电流表插入笔记本电脑的USB端口。 DHT11传感器的数据引脚连接到Arduino的D2引脚。

代码说明

首先包含DHT11传感器和LowPower库。要下载LowPower库,请单击此链接。然后我们定义了DHT11的数据引脚所连接的Arduino引脚编号,并定义了一个DHT对象。

#include

#include

#define dataPin 2

dht DHT;

在void setup()函数中,我们使用serial.begin(9600)启动了串行通信,这里9600是波特率。我们使用Arduino的内置LED作为睡眠模式的指示器。因此,我们将引脚设置为输出,将数字写入设置为低电平。

void setup() {

Serial.begin(9600);

pinMode(LED_BUILTIN,OUTPUT);

digitalWrite(LED_BUILTIN,LOW);

}

在void loop()函数中,我们将内置LED设为HIGH,并从传感器读取温度和湿度数据。在这里,DHT.read11();函数是从传感器读取数据。计算完数据后,我们可以通过将值保存到任何变量来检查这些值。在这里,我们采用了两个浮点型变量't'和'h'。因此,温度和湿度数据在串口监视器上串行打印。

void loop() {

Serial.println("Get Data From DHT11");

delay(1000);

digitalWrite(LED_BUILTIN,HIGH);

int readData = DHT.read11(dataPin); // DHT11

float t = DHT.temperature;

float h = DHT.humidity;

Serial.print("Temperature = ");

Serial.print(t);

Serial.print(" C | ");

Serial.print("Humidity = ");

Serial.print(h);

Serial.println(" % ");

delay(2000);

在启用睡眠模式之前,我们正在打印“Arduino: - I am going for a Nap”并使内置LED为低电平。之后,在代码中使用下面提到的命令启用Arduino睡眠模式。

下面的代码启用Arduino的空闲周期性睡眠模式,并提供8秒的睡眠。它将ADC、定时器、SPI、USART、2线接口转为OFF状态。

然后它会在8秒后自动从睡眠中唤醒Arduino并打印出“Arduino:- Hey I just Woke up”。

Serial.println("Arduino:- I am going for a Nap");

delay(1000);

digitalWrite(LED_BUILTIN,LOW);

LowPower.idle(SLEEP_8S, ADC_OFF, TIMER2_OFF, TIMER1_OFF, TIMER0_OFF,

SPI_OFF, USART0_OFF, TWI_OFF);

Serial.println("Arduino:- Hey I just Woke up");

Serial.println("");

delay(2000);

}

因此,通过使用此代码,Arduino将在一分钟内唤醒24秒,并在36秒的剩余时间内保持睡眠状态,这将显着降低Arduino气象站的功耗。

因此,如果我们将Arduino与睡眠模式一起使用,我们可以将设备运行时间显著增加。
编辑:hfy

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 控制器
    +关注

    关注

    112

    文章

    15223

    浏览量

    171172
  • Arduino
    +关注

    关注

    184

    文章

    6427

    浏览量

    184830
  • 控制寄存器
    +关注

    关注

    0

    文章

    34

    浏览量

    11432
收藏 人收藏

    评论

    相关推荐

    CKS32F4xx系列MCU的低功耗模式睡眠模式

    本课讲为大家讲解CKS32F4xx系列产品的低功耗模式睡眠(Sleep)模式。MCU为满足某些应用场景:如小型化低容量设备,长期监测设备等,低功耗
    发表于 06-26 10:02 390次阅读
    CKS32F4xx系列MCU的<b class='flag-5'>低功耗</b><b class='flag-5'>模式</b>之<b class='flag-5'>睡眠</b><b class='flag-5'>模式</b>

    【安富莱】【RTX操作系统教程】第21章 RTX低功耗睡眠模式

    教程】第21章 RTX低功耗睡眠模式低功耗是MCU的一项非常重要的指标,比如某些可穿戴的设备,其携带的电量有限,如果整个电路消耗的电量特别大的话,就会经常出现电量不足的情况,影响用户
    发表于 02-04 16:39

    第30章 FreeRTOS低功耗睡眠模式

    ,STM32F407和STM32F429的低功耗方式之睡眠模式的一些知识点,第33章讲解FreeRTOS支持的tickless模式睡眠
    发表于 09-12 17:21

    第21章 RTX低功耗睡眠模式

    STM32F103和STM32F407的低功耗方式之睡眠模式在RTX操作系统上面的实现方法(RTX本身支持的tickless低功耗模式在第2
    发表于 10-08 17:40

    怎么使PIC处于低功耗睡眠模式

    你好,我正在使用PIC 18F26J50。对于一个应用程序,我需要使PIC处于低功耗睡眠模式,大部分时间。我已经编程了两种中断睡眠模式的可
    发表于 03-30 09:26

    低功耗AC/DC转换的倒置降压设计方案

    低功耗AC/DC转换的倒置降压设计方案
    发表于 03-11 07:36

    STM32的低功耗模式

    STM32的低功耗模式1.睡眠模式2.停止模式3.待机模式各种
    发表于 08-11 07:35

    STM32的低功耗模式

    STM32的低功耗模式共有三个:睡眠模式-(sleep): 睡眠模式
    发表于 08-12 08:15

    介绍STM32低功耗睡眠模式事件唤醒的实现

    STM32 低功耗睡眠模式(SLEEP)事件(EVENT)唤醒实现及优化1. 介绍STM32具有多种低功耗模式,当前以STM32L4系列的
    发表于 02-23 06:02

    STM32超低功耗入门之睡眠模式

    一. 认识睡眠模式认识睡眠模式最好的方法就是查看官方手册通过上图可以得出结论:睡眠模式有 4 种
    发表于 12-07 17:36 7次下载
    STM32超<b class='flag-5'>低功耗</b>入门之<b class='flag-5'>睡眠</b><b class='flag-5'>模式</b>

    STM32低功耗模式测试

    stm32单片机低功耗模式共用3中,下来对3中低功耗进行分析测试。先看手册上相关低功耗资料介绍:先来分析睡眠
    发表于 12-31 19:05 9次下载
    STM32<b class='flag-5'>低功耗</b><b class='flag-5'>模式</b>测试

    STM32 低功耗睡眠模式(SLEEP)事件(EVENT)唤醒实现及优化

    STM32 低功耗睡眠模式(SLEEP)事件(EVENT)唤醒实现及优化1. 介绍STM32具有多种低功耗模式,当前以STM32L4系列的
    发表于 12-31 19:08 33次下载
    STM32 <b class='flag-5'>低功耗</b><b class='flag-5'>睡眠</b><b class='flag-5'>模式</b>(SLEEP)事件(EVENT)唤醒实现及优化

    STM32低功耗模式有哪些?

    低功耗模式有三种:睡眠模式、停止模式、待机模式。一般做开发大多都是选择停机
    发表于 02-08 15:53 12次下载
    STM32<b class='flag-5'>低功耗</b><b class='flag-5'>模式</b>有哪些?

    PWR低功耗模式介绍

    低功耗模式,以在低功耗、短启动时间、可用外设和可用唤醒源之间实现最佳折衷。 睡眠模式 低功耗运行
    发表于 03-23 14:30 904次阅读
    PWR<b class='flag-5'>低功耗</b><b class='flag-5'>模式</b>介绍

    PWR低功耗睡眠模式介绍

    添加进入低功耗睡眠模式的功能 /* 无限循环 */ /* USER CODE BEGIN WHILE */ while ( 1 ) { /* USER CODE END WHILE */ /* 用户
    发表于 03-23 14:47 648次阅读
    PWR<b class='flag-5'>低功耗</b><b class='flag-5'>睡眠</b><b class='flag-5'>模式</b>介绍