最近在做一个低功耗的设备,发射红外来检测前面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低功耗掉电模式看门狗唤醒相关推荐

  1. STC12系列单片机的空闲模式、休眠模式(又叫掉电模式、停机模式)

    1. 空闲模式 空闲模式是指只有单片机不工作的状态.此时CPU无时钟停止工作,但是外部中断.外部低压检测电路.定时器.A/D转换.串行口等仍正常运行. 在空闲模式下,RAM.堆栈指针(SP).程序计数 ...

  2. arduino笔记32:nRF24l01模块使用 电磁波频率 距离限制 掉电模式 热待机模式

    最近再arduino中文社区看到了一篇介绍nrf24l01基本原理的帖子,内容感觉蛮不错的,学习一下,记录一下学习笔记. 大部分内容都是Arduino中文社区的帖子,附上自己的一点点体会. 目录 一. ...

  3. 5--51单片机的休眠模式(又叫掉电模式、停机模式)的应用

    1.个人总结单片机省电的两个模式的使用: 单片机正常工作时的功耗通常是4mA~7mA,进入空闲模式是其功耗降至2mA,进入掉电模式是的功耗可降至0.1uA以下. 当单片机进入空闲模式时,只有CPU处于 ...

  4. STC8H1K08 - 掉电模式

    文章目录 掉电模式 Keil 工程结构 原理图 使用外部中断 3 唤醒处于掉电模式的单片机 STC-ISP 下载选项 测试 参考 掉电模式 STC8H1K08 进入时钟掉电模式,CPU 以及全部外设均 ...

  5. 【STM32笔记】HAL库低功耗STOP停止模式的串口唤醒(解决进入以后立马唤醒、串口唤醒和回调无法一起使用、接收数据不全的问题)

    [STM32笔记]HAL库低功耗STOP停止模式的串口唤醒(解决进入以后立马唤醒.串口唤醒和回调无法一起使用.接收数据不全的问题) [STM32笔记]低功耗模式配置及避坑汇总 前文: blog.csd ...

  6. arduino 休眠 节能_关于esp32的省电模式的WiFi连接

    对于ESP32,其作为一款集成了2.4GHz WiFi和蓝牙双模块的单芯片,所有基于wifi和蓝牙开发是学习esp32的重要一环,今天WiFi原理和网络结构 可以点击链接进行详细的了解,这里就不做详细 ...

  7. ESP8266 arduino 一键配网之后掉电不丢失wifi数据

    本文关注掉电丢失wifi数据和不丢失数据的异同点. 一.软硬件 所用硬件如下图,软件是arduino 1.8.9. 二.代码分析 代码如下: void smartConfig() {WiFi.mode ...

  8. arduino 休眠 节能_魔法书3:让 Arduino 慢下来 20倍省电

    我是潘,曾经是个工程师.这是 "Arduino 魔法书" 系列的专栏.上节课介绍了怎么让Arduino 全速运行,但大部分时候我们更希望 Arduino 能慢下来,节省更多的电能, ...

  9. arduino 休眠 节能_认识与实验Arduino的睡眠模式

    根据Nick Gammon这位澳洲老兄,在Power saving techniques for microprocessors(微处理器省电技术)文章,於Arduino UNO Rev 3控制板执行 ...

最新文章

  1. c++中的vector的常见使用
  2. mysql 建复合索引_关于mysql建立索引 复合索引 索引类型
  3. 《TCP/IP详解》
  4. apt 根据注解,编译时生成代码
  5. 12月12日习题答案大剖析!再接再厉
  6. C# Monitor实现
  7. 支付宝认错,回应央行 18 万行政罚单!
  8. Windows程序设计学习-API-SetBkMode
  9. Moss、SharePoint数据库迁移问题
  10. 移动端JS事件、移动端框架
  11. 电力电子仿真软件对比分析
  12. UniWebView 3 使用心得
  13. 山东大学计算机图形学实验(Opengl实现):Loop Subdivision算法对模型进行细分
  14. 保存Windows聚焦锁屏壁纸
  15. CentOS-Linux操作系统镜像文件下载
  16. (赤焰剑C-SKY)1-初识
  17. XQ6657Z35-EVM 的DSP + ZYNQ核心板,SRIO通讯
  18. pil对图像加透明 python_关于python:如何使用PIL将透明png图像与另一个图像合并...
  19. 地牢大师--(BFS+三维数组)
  20. 小旋风asp服务器安装了还是打不开asp文件,小旋风AspWebServer - 本地架设ASP网站

热门文章

  1. mysql 副本 同步_副本机制与副本同步
  2. ygo游戏王卡组_ACG大科普(7)游戏王
  3. 和push的区别_还没有理解let 和 const的用法和区别吗,几百字让你立马搞懂
  4. 哪款笔记本电脑好_扫地机器人哪个牌子好?口碑最好的扫地机器人
  5. Ambari系统架构
  6. Problem C: 判断字符串是否为回文
  7. 美国将尝试区块链领域和加密货币相结合
  8. Web浏览器端通过https 使用mqtt通讯
  9. V 8 nfs+drbd+heartbeat
  10. Ant 风格路径表达式