arduino 休眠 节能_Arduino低功耗掉电模式看门狗唤醒
最近在做一个低功耗的设备,发射红外来检测前面1米以内左右的地方是否有人,纽扣电池供电,需要持续工作至少两年,因此,要求设备工作电流在ua级别。
(1)红外发射接收
由于一般的红外发射接收(下图所示)都会比较耗电(几十ma),所以红外发射接收是不能一直打开的,需要每隔一段时间(30s)打开一次,检测是否有人,检测完毕后立即关闭红外发射接收。这样耗电的大户解决了,但是如果单片机一直处于工作状态,也就是循环程序里等待30s来进行红外发射检测的话,本身单片机也会耗电,达到ma的级别,这样的话,纽扣电池几百mah的电量也撑不了太久。
红外发射接收
(2)单片机休眠
考虑到单片机具有休眠功能,在不需要的时候可以MCU休眠,在唤醒的时候,打开红外并进行检测,检测完成后单片机继续休眠,这样就可以达到要求了,单片机休眠状态下,耗电很低,手册上一般都是几ua,完全符合要求,这里有一个问题就是,单片机的工期唤醒,一般情况下,单片机休眠后可以利用外部中断(电平、上升沿和下降沿)唤醒,但是设备中不存在这样的信号源能够定期(30s)唤醒单片机,因此这里需要单片机自己唤醒,也就是下面提到的看门狗唤醒。
(3)看门狗唤醒
AVR单片机的看门狗有三种模式,第一,系统复位,看门狗一般是用来监视程序是否正常运行的,当程序跑飞的时候,没有及时喂狗,看门狗就会强制单片机复位,达到重新运行程序的目的;第二,中断模式,在定时时间到的时候,会进入中断,这个中断会将掉电模式的单片机唤醒;第三,中断与系统复位(综合)。这里需要使用单片机的中断模式
(4)Arduino
Arduino本身是一个集成的开发平台,核心是一个avr单片机,优点在于平台集成了很多库函数,有很多外围器件,使用起来很方便,不需要使用者去了解单片机的寄存器,开发起来更快,但是做产品的话不一定能满足要求,最常用的就是Arduino
Uno了,核心是atmega328,单片机本身资源丰富,考虑到成本等因素,并不需要这么多资源,造成浪费,当然也有其他的型号的低成本的avr单片机,但本质上来说,自己做一块板子,再利用Arduino
IDE
编程,下来bootloader和程序,就不如直接进行单片机开发了。当然前期开发的话,还是适合的,之前的时候,学过一段时间51单片机,对avr还不是很熟悉,因此,这个低功耗设备,最开始还是使用Arduino
Uno
开发的,这个过程中遇到了各种问题,最后直接使用attiny13,进行单片机的开发,抛弃了Arduino。
(5)最终,休眠状态下设备耗电60多ua,达到了要求,后续将使用attiny13直接进行开发。
程序:(转自一个网友的文章,进行了一些注释)
#include
#include
volatile byte data=0;
int val;
void setup()
{
pinMode(2,OUTPUT);
pinMode(6,INPUT);
pinMode(7,OUTPUT);
pinMode(8,OUTPUT);
setup_watchdog(8);//设置看门狗超时时间
// 0=16ms, 1=32ms,2=64ms,3=128ms,4=250ms,5=500ms
// 6=1 sec,7=2 sec, 8=4 sec, 9= 8sec
ACSR=_BV(ACD);//关闭比较器ACD
ADCSRA=0;//关闭模数转换器ADC
Sleep_avr();//进入休眠模式
}
void loop()
{
if(data>=1){
data=0;
digitalWrite(7,HIGH);//红外
delay(50);
val = digitalRead(6);
if(val == LOW)//read led
{
digitalWrite(8,HIGH);//无线
digitalWrite(2,HIGH);//测试led
delay(2);
digitalWrite(2, LOW);//测试LED闪烁一次
delay(2850);
digitalWrite(8,LOW);//关闭无线
digitalWrite(7,LOW);//关闭红外发射器
}
digitalWrite(7,LOW);
Sleep_avr();
}
else
{
Sleep_avr(); //继续睡眠
}
}
//设置看门狗参数,输入参数为定时时间
void setup_watchdog(int ii){
byte bb;
if (ii > 9 ) ii=9;
bb=ii & 7;
if (ii > 7) bb
= (1<<5);
bb
= (1<
p="">
//开始设置看门狗中断
MCUSR &=
~(1<
p="">
WDTCSR
= (1<
p="">
(1<
p="">
//设置新的看门狗超时时间
WDTCSR = bb;
//设置为进入中断
WDTCSR= _BV(WDIE);
//看门狗唤醒后,从之前的程序继续执行
}
//超时后,只有在睡眠模式或空闲模式才会唤醒进入中断中断函数,除此之外,看门狗直接控制单片机复位
ISR(WDT_vect)
{
data++;
//继续执行睡眠之前的程序
}
//睡眠模式
void Sleep_avr()
{
set_sleep_mode(SLEEP_MODE_PWR_DOWN ); //设置睡眠模式
sleep_enable(); //使能睡眠模式
sleep_mode(); //进入睡眠模式,看门唤醒后在这里继续执行
}
arduino 休眠 节能_Arduino低功耗掉电模式看门狗唤醒相关推荐
- STC12系列单片机的空闲模式、休眠模式(又叫掉电模式、停机模式)
1. 空闲模式 空闲模式是指只有单片机不工作的状态.此时CPU无时钟停止工作,但是外部中断.外部低压检测电路.定时器.A/D转换.串行口等仍正常运行. 在空闲模式下,RAM.堆栈指针(SP).程序计数 ...
- arduino笔记32:nRF24l01模块使用 电磁波频率 距离限制 掉电模式 热待机模式
最近再arduino中文社区看到了一篇介绍nrf24l01基本原理的帖子,内容感觉蛮不错的,学习一下,记录一下学习笔记. 大部分内容都是Arduino中文社区的帖子,附上自己的一点点体会. 目录 一. ...
- 5--51单片机的休眠模式(又叫掉电模式、停机模式)的应用
1.个人总结单片机省电的两个模式的使用: 单片机正常工作时的功耗通常是4mA~7mA,进入空闲模式是其功耗降至2mA,进入掉电模式是的功耗可降至0.1uA以下. 当单片机进入空闲模式时,只有CPU处于 ...
- STC8H1K08 - 掉电模式
文章目录 掉电模式 Keil 工程结构 原理图 使用外部中断 3 唤醒处于掉电模式的单片机 STC-ISP 下载选项 测试 参考 掉电模式 STC8H1K08 进入时钟掉电模式,CPU 以及全部外设均 ...
- 【STM32笔记】HAL库低功耗STOP停止模式的串口唤醒(解决进入以后立马唤醒、串口唤醒和回调无法一起使用、接收数据不全的问题)
[STM32笔记]HAL库低功耗STOP停止模式的串口唤醒(解决进入以后立马唤醒.串口唤醒和回调无法一起使用.接收数据不全的问题) [STM32笔记]低功耗模式配置及避坑汇总 前文: blog.csd ...
- arduino 休眠 节能_关于esp32的省电模式的WiFi连接
对于ESP32,其作为一款集成了2.4GHz WiFi和蓝牙双模块的单芯片,所有基于wifi和蓝牙开发是学习esp32的重要一环,今天WiFi原理和网络结构 可以点击链接进行详细的了解,这里就不做详细 ...
- ESP8266 arduino 一键配网之后掉电不丢失wifi数据
本文关注掉电丢失wifi数据和不丢失数据的异同点. 一.软硬件 所用硬件如下图,软件是arduino 1.8.9. 二.代码分析 代码如下: void smartConfig() {WiFi.mode ...
- arduino 休眠 节能_魔法书3:让 Arduino 慢下来 20倍省电
我是潘,曾经是个工程师.这是 "Arduino 魔法书" 系列的专栏.上节课介绍了怎么让Arduino 全速运行,但大部分时候我们更希望 Arduino 能慢下来,节省更多的电能, ...
- arduino 休眠 节能_认识与实验Arduino的睡眠模式
根据Nick Gammon这位澳洲老兄,在Power saving techniques for microprocessors(微处理器省电技术)文章,於Arduino UNO Rev 3控制板执行 ...
最新文章
- c++中的vector的常见使用
- mysql 建复合索引_关于mysql建立索引 复合索引 索引类型
- 《TCP/IP详解》
- apt 根据注解,编译时生成代码
- 12月12日习题答案大剖析!再接再厉
- C# Monitor实现
- 支付宝认错,回应央行 18 万行政罚单!
- Windows程序设计学习-API-SetBkMode
- Moss、SharePoint数据库迁移问题
- 移动端JS事件、移动端框架
- 电力电子仿真软件对比分析
- UniWebView 3 使用心得
- 山东大学计算机图形学实验(Opengl实现):Loop Subdivision算法对模型进行细分
- 保存Windows聚焦锁屏壁纸
- CentOS-Linux操作系统镜像文件下载
- (赤焰剑C-SKY)1-初识
- XQ6657Z35-EVM 的DSP + ZYNQ核心板,SRIO通讯
- pil对图像加透明 python_关于python:如何使用PIL将透明png图像与另一个图像合并...
- 地牢大师--(BFS+三维数组)
- 小旋风asp服务器安装了还是打不开asp文件,小旋风AspWebServer - 本地架设ASP网站