Arduino 编程技巧 睡眠模式的运用 2个AA电池运行一年的秘密(未完待续)

睡眠模式结合中断一起应用,可以达到省电的功能

Arduino Uno板子上有USB转接口,所以就算进入关机的睡眠模式,还是会消耗50mA的电流,
如果实验完成,可以选择没有usb接口的板子制作作品,这样就更省电。


                    http://playground.arduino.cc/Code/Enerlib


下载库文件

先下载
Arduino的睡眠模式可以用Enerlib库进行调用, 下载地址是  Enerlib 1.0.1


睡眠模式

以下表格,转载自 

睡眠模式

Energy指令

中文直譯

消耗電流

Idle

Idle()

閒置

15mA

ADC Noise Reduction

SleepADC()

類比數位轉換器降低雜訊

6.5mA

Power-save

PowerSave()

省電

1.62mA

Standby

Standby()

待機

1.62mA

Extended Standby

 

延長待機

0.84mA

Power-down

PowerDown()

斷電(关机)

0.36mA


空闲模式Idle
当SM2..0 为000 时, SLEEP 指令将使MCU 进入空闲模式。在此模式下,CPU 停止运
行,而SPI、USART、模拟比较器、ADC、两线串行接口、定时器/ 计数器、看门狗和
中断系统继续工作。这个睡眠模式只停止了clkCPU 和clkFLASH,其他时钟则继续工作。
象定时器溢出与USART 传输完成等内外部中断都可以唤醒MCU。如果不需要从模拟比
较器中断唤醒MCU,为了减少功耗,可以切断比较器的电源。方法是置位模拟比较器控
制和状态寄存器ACSR 的ACD。如果ADC 使能,进入此模式后将自动启动一次转换。



ADC 噪声抑制模式ADC Noise Reduction
当SM2..0 为001 时, SLEEP 指令将使MCU 进入噪声抑制模式。在此模式下,CPU 停
止运行,而ADC、外部中断、两线接口地址配置、定时器/ 计数器2 和看门狗继续工作。
这个睡眠模式只停止了clkI/O、clkCPU 和clkFLASH,其他时钟则继续工作。
此模式提高了ADC 的噪声环境,使得转换精度更高。ADC 使能的时候,进入此模式将
自动启动一次AD 转换。ADC 转换结束中断、外部复位、看门狗复位、BOD 复位、两线
接口地址匹配中断、定时器/ 计数器2 中断、SPM/EEPROM 准备好中断、外部电平中断
INT0 或INT1,或外部中断INT2 可以将MCU 从ADC 噪声抑制模式唤醒。


掉电模式
当SM2..0 为010 时, SLEEP 指令将使MCU 进入掉电模式。在此模式下,外部晶体停
振,而外部中断、两线接口地址匹配及看门狗(如果使能的话)继续工作。只有外部复
位、看门狗复位、BOD 复位、两线接口地址匹配中断、外部电平中断INT0 或INT1,或
外部中断INT2 可以使MCU 脱离掉电模式。这个睡眠模式停止了所有的时钟,只有异步
模块可以继续工作。


省电模式
当SM2..0 为011 时, SLEEP 指令将使MCU 进入省电模式。这一模式与掉电模式只有
一点不同:
如果定时器/ 计数器2 为异步驱动,即寄存器ASSR 的AS2 置位,则定时器/ 计数器2 在
睡眠时继续运行。除了掉电模式的唤醒方式,定时器/ 计数器2 的溢出中断和比较匹配中
断也可以将MCU 从休眠方式唤醒,只要TIMSK 使能了这些中断,而且SREG 的全局中
断使能位I 置位。
如果异步定时器不是异步驱动的,建议使用掉电模式,而不是省电模式。因为在省电模式
下,若AS2 为0,则MCU 唤醒后异步定时器的寄存器数值是没有定义的。
这个睡眠模式停止了除clkASY 以外所有的时钟,只有异步模块可以继续工作。



Standby 模式
当SM2..0 为110 时, SLEEP 指令将使MCU 进入Standby 模式。这一模式与掉电模式
唯一的不同之处在于振荡器继续工作。其唤醒时间只需要6 个时钟周期。

扩展Standby 模式
当SM2..0 为111 时, SLEEP 指令将使MCU 进入扩展的Standby 模式。这一模式与省
掉电模式唯一的不同之处在于振荡器继续工作。其唤醒时间只需要6 个时钟周期。





  • 0
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Arduino睡眠模式是一种可以降低功耗的模式,允许用户停止或关闭未使用的模块。Arduino UNO、Arduino Nano和Pro-mini等型号的Arduino板配备了ATmega328P微控制器,它具有欠压检测器,用于监测睡眠模式下的电源电压。ATmega328P有六种睡眠模式,包括Idle、ADC noise reduction、Power-Down、Power-Save、Standby和External Standby。在实际应用中,最常用的是掉电模式(SLEEP_MODE_PWR_DOWN)。在睡眠模式下,Arduino可以通过内部或外部中断或复位来唤醒。通过使用睡眠模式Arduino可以在不需要运行时降低功耗,从而延长电池寿命或减少能源消耗。\[1\] 在Arduino中,可以使用avr/sleep.h来设置和进入睡眠模式。例如,可以使用set_sleep_mode函数设置所需的睡眠模式,然后使用sleep_mode函数进入睡眠状态。具体的代码示例可以参考引用\[2\]和引用\[3\]中的代码。根据具体情况,可以选择适合自己需求的睡眠模式。\[2\]\[3\] #### 引用[.reference_title] - *1* *2* [Arduino休眠模式和看门狗以及中断详解](https://blog.csdn.net/qq_39400113/article/details/107536805)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [Arduino - 休眠模式](https://blog.csdn.net/sdlgq/article/details/50497610)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值