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

功耗是设备长时间连续运行而不断电的关键因素。因此,为了解决这个问题,几乎每个控制器都带有睡眠模式,这有助于开发人员设计电子设备以实现最佳功耗。休眠模式通过关闭未使用的模块将器件置于省电模式。
今天我们将了解arduino睡眠模式(sleep mode)并使用ammeter演示功耗。 arduino睡眠模式也称为arduino省电模式(power save mode)或arduino待机模式(standby mode)。
arduino睡眠模式
睡眠模式允许用户停止或关闭微控制器中未使用的模块,从而显着降低功耗。 arduino uno、arduino nano和pro-mini配备了atmega328p,它有一个欠压检测器(bod),用于监控睡眠模式时的电源电压。
atmega328p有六种睡眠模式:
要进入任何睡眠模式,我们需要在睡眠模式控制寄存器(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欧姆电阻,通过它可以测量所消耗的电流值。该设备配有四个七段显示屏,可立即显示连接设备消耗的电流和电压值。这些值以每三秒的间隔刷新。
电路原理图
在上面的演示中演示了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与睡眠模式一起使用,我们可以将设备运行时间显著增加。


网格环境微型监测系统的主要功能有哪些?
Beats Studio 3 评测解析
phpy:PHP与Python互调用库
智慧供水整体解决方案 打造数字孪生智慧供水解决方案
复工企业借UWB技术实现防控疫情智慧化管理
基于Arduino的低功耗睡眠模式设计方案
国产时钟IC-AiP8563替代AT8563/HYM8563/PCF8563,主要运用在RK方案上面
体验混合自动化:倍加福将“数字博览会”与其在SPS 2021的展示相结合
无线充电器充电手机发烫正常吗 无线充电器手机放上去无反应
布谷:拥抱智能,打造互联网新品牌
便携式口罩呼吸机的设计特点是什么
彩灯控制器电路图大全
罗姆发布肖特基二极管白皮书,助力汽车、工业和消费电子设备实现小型化和更低损耗!
腾讯动真格做自动驾驶?招聘行动已经开始
珠联璧合:NVIDIA与VMware联合发布AI就绪型企业级平台
如何配置降压转换器实现多输出
二阶数字陷波器的设计方法及数字传输函数
环保的水能源电子钟
植物冠层分析仪安装注意事项
各大巨头共同发力 推动着中国智能网联汽车产业前进