魔法书3:让 Arduino 慢下来 20倍省电

栏目: 服务器 · 发布时间: 6年前

内容简介:我是潘,曾经是个工程师。这是为 Ardui.Co 制作的 “Arduino 魔法书” 系列的专栏。上节课介绍了怎么让Arduino 全速运行,但大部分时候我们更希望 Arduino 能慢下来,节省更多的电能,让设备在户外数据采集等取电不便的地方,运行的更久。降低 Arduino 的速度,最简单粗暴的方式就是换一个频率低的晶振(硬件层面),UNO 和Mage2560 默认使用16MHz的晶振,换成8MHz,速度就会降下来一半。对即将进入成品阶段的设计,建议在硬件层面修改,因为这是最可靠稳定的。如果还在验证和

我是潘,曾经是个工程师。这是为 Ardui.Co 制作的 “Arduino 魔法书” 系列的专栏。上节课介绍了怎么让Arduino 全速运行,但大部分时候我们更希望 Arduino 能慢下来,节省更多的电能,让设备在户外数据采集等取电不便的地方,运行的更久。

降低 Arduino 的速度,最简单粗暴的方式就是换一个频率低的晶振(硬件层面),UNO 和Mage2560 默认使用16MHz的晶振,换成8MHz,速度就会降下来一半。对即将进入成品阶段的设计,建议在硬件层面修改,因为这是最可靠稳定的。如果还在验证和开发的阶段呢?软件方式会比较便利。

软件方式就是修改时钟分频寄存器(CLKPR),它决定了CPU 运行的速度。要注意的是, 速度一旦改变,就会影响delay()、millis() 等时间相关的函数,而且会影响ADC、串口等外围设备 。CLKPR 根据下表的值控制CPU的分频比(晶振频率除以分频比,即为CPU运行速度):

魔法书3:让 Arduino 慢下来 20倍省电

修改CLKPR 需要一个特殊过程,第一步,先将它的第7位(即 CLKCE)设置为1,并将其他位置零;第二步,给CLKPR 赋值。而且这个过程必须在4个周期内完成写入动作 -_-!! 所以过程中,最好禁止所有中断。

/*
  作者:Ardui.co
  效果:改变CPU速度
  版本:1.0
  更新时间:2018年5月29日
*/
void setup() {
  bitSet(DDRB, 5);
  noInterrupts();
  CLKPR = 1 << CLKPCE;
  CLKPR = 8;// 将CPU速度设置为 16MHz / 256
  interrupts();
}
 
void loop() {
  bitSet(PINB, 5); // 翻转
  delay(4);// CPU慢了256倍,所以延迟时间为 4ms * 256
}

由于 CPU 的速度只有原来的1/256,Arduino 的示例程序程序Blink 中,延时函数 delay(1000) ,延迟时间即 1000ms * 256,超过4分种,闪烁实在太慢了,所以这里将延迟函数改为  delay(4),即1.024秒。

使用USB计量器测量降速后(下图一)和原速(下图二)的功耗,降速后功耗降低了10mA左右,节约了 20% 功耗。

魔法书3:让 Arduino 慢下来 20倍省电

魔法书3:让 Arduino 慢下来 20倍省电

节约10mA 是什么概念呢?计算一下:

原速运行时,Arduino UNO的功耗为 P = 0.05A * 5V = 0.25W

2节AA碱性电池升压(假设转换效率100%),工作在100mA 放电电流时,电量约 Q = 2Ah * 3V = 6Wh

即Arduino 可以运行 Q/P = 6Wh / 0.25A = 24h, 节能后 24h * (1 + 20%) = 28.8h

Arduino UNO 已经在龟速运行了,应该很省电,为什么也就能跑一天多?看来 Arduino 是相当耗电的。

不过,元凶是CPU吗?

其实,最耗电的是Arduino UNO 上的USB模块,而不是CPU。如果换成不带USB模块的 Arduino mini 来重复这个实验 Arduino 省电效果达90%以上,实际测试一下:

魔法书3:让 Arduino 慢下来 20倍省电

魔法书3:让 Arduino 慢下来 20倍省电

去掉 USB 模块后,耗电大幅下降80%以上。降速(上图一)和满速(上图二)的Arduino mini 功耗分别只有 4mA 和 10.55mA!

由于两颗板载 LED 功耗大概2mA * 2左右(其中一颗常亮),也就是说 Arduino mini 上单块 ATmega328P 的功耗只有 <1mA 和 6.5mA,降速后的功耗还不到原来的1/6!与满速的 Arduino UNO 相比不到 1/50 。

Arduino mini 的供电只需 3.3V,降速后的功率为 0.0033W。2节AA电池就可以让其运行 6Wh / 0.0033W = 1818h = 78天,两个多月时间!

但这个数字还不够理想,如果是户外采集数据,我们往往希望电池的寿命在半年、甚至一年以上,即使采用太阳能供电,Arduino 越省电,电池板体积也就能做的越小、成本越低。

另外,耗电的不止Arduino,还有更耗电的外部设备。有没有比降速更省电,同时让外围设备不耗电的方式呢?答案是肯定的。

后面的章节将介绍 Arduino 睡眠模式,不需要工作时,让系统打个盹,甚至睡个懒觉,进入冬眠状态,达到极致省电的状态,甚至2节AA电池就能让它工作2年以上。


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

软件测试

软件测试

乔根森 / 韩柯 / 机械工业出版社 / 2003-12-1 / 35.00元

《软件测试》(原书第2版)全面地介绍了软件测试的基础知识和方法。通过问题、图表和案例研究,对软件测试数学问题和技术进行了深入的研究,并在例子中以更加通用的伪代码取代了过时的Pascal代码,从而使内容独立于具体的程序设计语言。《软件测试》(原书第2版)还介绍了面向对象测试的内容,并完善了GUI测试内容。一起来看看 《软件测试》 这本书的介绍吧!

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换