Arduino 编程技巧 睡眠模式的运用 2个AA电池运行一年的秘密(未完待续)
2017-06-30 23:33
288 查看
睡眠模式结合中断一起应用,可以达到省电的功能
Arduino Uno板子上有USB转接口,所以就算进入关机的睡眠模式,还是会消耗50mA的电流,
如果实验完成,可以选择没有usb接口的板子制作作品,这样就更省电。
主要参考 https://swf.com.tw/?p=525 http://playground.arduino.cc/Code/Enerlib
http://www.geek-workshop.com/thread-12261-1-1.html
Arduino的睡眠模式可以用Enerlib库进行调用, 下载地址是 Enerlib
1.0.1
空闲模式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 个时钟周期。
Arduino Uno板子上有USB转接口,所以就算进入关机的睡眠模式,还是会消耗50mA的电流,
如果实验完成,可以选择没有usb接口的板子制作作品,这样就更省电。
主要参考 https://swf.com.tw/?p=525 http://playground.arduino.cc/Code/Enerlib
http://www.geek-workshop.com/thread-12261-1-1.html
下载库文件
先下载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 |
当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 个时钟周期。
相关文章推荐
- 设计模式在Java数据库编程中的运用
- 编程技巧之:vs2003调试时提示:试图运行项目时出错:无法启动调试 没有正确安装调试器。请运行安装程序安装
- 2个C编程技巧
- 实例讲解Java的设计模式编程中责任链模式的运用
- 深入解析Java设计模式编程中观察者模式的运用
- 设计模式在Java数据库编程中的运用
- C#设计模式编程中运用适配器模式结构实战演练
- 深入解析Java的设计模式编程中建造者模式的运用
- 编程技巧--位运算的巧妙运用
- 举例讲解C#编程中对设计模式中的单例模式的运用
- [IE技巧] 使IE8以单进程的模式运行
- Android 用户界面编程技巧和设计模式(性能优化)
- <<C++网络编程 卷1 运用ACE和模式消除复杂性>>
- 编程技巧--位运算的巧妙运用(1)
- 链接脚本在编程中的高级运用之二——运行时库和C++特性支持
- 【Android进阶】让程序运行效率更高的编程技巧总结
- [IE技巧] 使IE8以单进程的模式运行
- 第二部分 Linux Shell高级编程技巧——第三章 运行级别脚本介绍
- 实例讲解Java设计模式编程中如何运用代理模式
- 深入解析C#设计模式编程中对建造者模式的运用