本帖最后由 酥糖 于 2017-8-25 02:45 编辑
很多的arduino项目里都是用电池供电的,如何降低损耗,让设备使用周期延长呢? 本文将讲述如何通过降低arduino的芯片时钟频率,来达到节能的效果。
那么,降低到多少频率才能算是节能呢?文末揭晓测试结果
先附送调整arduino的时钟频率代码:
[mw_shl_code=cpp,true]
/*********************************************
* 目的:降低arduino时钟频率,用来节能
* 作者:酥糖
* 时间:2017.06.18
* 功能:将arduino频率16MHZ分为n份,每分16/n MHZ。
*********************************************/
#include <Prescaler.h>
void setup()
{
pinMode(13,OUTPUT);
setClockPrescaler(CLOCK_PRESCALER_1);
}
//此处将时钟频率16MHZ分为n份,CLOCK_PRESCALER_n;
//n通常设为1、2、4、8、16……
void loop(){
digitalWrite(13,HIGH);
trueDelay(1000);
digitalWrite(13,LOW);
trueDelay(5000);
}
/***************************************
* 常数 时钟频率 参考电流
* CLOCK_PRESCALER_1 16MHZ 7.8mA
* CLOCK_PRESCALER_2 8MHZ 5.4mA
* CLOCK_PRESCALER_4 4MHZ 4.0mA
* CLOCK_PRESCALER_8 2MHZ 3.2mA
* CLOCK_PRESCALER_16 1MHZ 2.6mA
* CLOCK_PRESCALER_32 500KHZ 2.3mA
* CLOCK_PRESCALER_64 250KHZ 2.2mA
* CLOCK_PRESCALER_128 125KHZ 2.1mA
* CLOCK_PRESCALER_256 62.5KHZ 2.1mA
*****************************************/[/mw_shl_code]
代码中用到的库:
下面是对代码进行测试;
本次测试的对象是UNO和PRO MINI两个:
uno正面
反面,来个特写,这个是某宝某宙家的,当时买了个套装两百多,
用了半月就觉得亏了,还不知道能不能回本。。。。
uno反面
Pro mini,支持3.3v~12v和5.0v输入
mini
测试用的电源插头是苹果原装5v1a的,纹波很稳定;
测试时表现的也很不错,波动在0.1mV,讲真,贵有贵的道理~~~
苹果插头
烧录pro mini的设备是某宝的USB转TTL,支持重启、5v、3.3v等等……
USB-TTL
下面,是本次测试用到的关键工具:POWER-Z,功能强大的一塌糊涂啊……
power-z
请允许我替他们打个广告:
感兴趣的筒子们请扫一下二维码传送过去,
扫码领券,扫码领券,扫码领券……
淘宝链接
下面进入测试环节:
空载
空载电压,5.1027V,很稳定,几乎没有波动。
mini 空载
USB转TTL空载时是耗些电的,8.2mA,最终计算时会减掉这部分功耗的。
先测试UNO:
uno
用的是上面的代码,分别测试16MHZ、8MHZ、4MHZ、2MHZ……时钟频率下的
电压、电流、功率还有耗电能力。
下面的是UNO 5V电压下各个时钟频率的功耗结果:
时钟频率 | 电压V | 待机电流A | 待机功率W | 耗时s | 容量mAh | 电度mWh | 运行电流mA | 运行功率W | 0HZ | 5.1046 | 0 | 0 | - | - | - | - | - | 16MHZ | 5.1021 | 0.0524 | 0.2653 | 49.4 | 0.6817 | 3.4458 | 49.68 | 0.25 | 8MHZ | 5.1021 | 0.0476 | 0.2397 | 49.2 | 0.6078 | 3.0689 | 44.47 | 0.22 | 4MHZ | 5.1021 | 0.0454 | 0.2295 | 47.9 | 0.5636 | 2.8432 | 42.36 | 0.21 | 2MHZ | 5.1021 | 0.0437 | 0.2193 | 48.7 | 0.5568 | 2.8031 | 41.16 | 0.21 | 1MHZ | 5.1021 | 0.0428 | 0.2142 | 48.9 | 0.5503 | 2.7657 | 40.51 | 0.20 | 500KHZ | 5.1021 | 0.0424 | 0.2142 | 49.6 | 0.5509 | 2.7795 | 39.98 | 0.20 | 250KHZ | 5.1021 | 0.0420 | 0.2142 | 50.5 | 0.5578 | 2.8214 | 39.76 | 0.20 | 125KHZ | 5.1021 | 0.0420 | 0.2142 | 60.3 | 0.6652 | 3.3528 | 39.71 | 0.20 | 62.5KHZ | 5.1021 | 0.0418 | 0.2091 | 48.6 | 0.5367 | 2.6953 | 39.76 | 0.20 |
待机电流、功率是板载LED未点亮时候的读数,“耗时”是在该时间段内消耗的mAh和mWh,根据这些,换算成平均的运行电流、运行功率;
PS:上面给的程序是点亮LED,点亮LED比不点亮耗电多一些。
插上MINI:
mini
下面的是PRO MINI 接入5V电压下各个时钟频率的功耗结果(原始测量数据,未减去空载电流):
时钟频率 | 电压V | 待机电流A | 待机功率W | 耗时s | 容量mAh | 电度mWh | 运行电流mA | 运行功率W | 0HZ | 5.1034 | 0.0082 | 0.0408 | - | - | - | - | - | 16MHZ | 5.1028 | 0.0268 | 0.1326 | 77.8 | 0.5464 | 2.7520 | 25.28 | 0.13 | 8MHZ | 5.1033 | 0.0217 | 0.1071 | 69.3 | 0.4086 | 2.0320 | 21.23 | 0.11 | 4MHZ | 5.1033 | 0.0197 | 0.0969 | 75.6 | 0.4041 | 1.9955 | 19.24 | 0.10 | 2MHZ | 5.1033 | 0.0181 | 0.0918 | 77.4 | 0.3773 | 1.8774 | 17.55 | 0.09 | 1MHZ | 5.1033 | 0.0171 | 0.0867 | 66.4 | 0.3091 | 1.5467 | 16.76 | 0.08 | 500KHZ | 5.1033 | 0.0166 | 0.0816 | 74.4 | 0.3316 | 1.6470 | 16.05 | 0.08 | 250KHZ | 5.1033 | 0.0164 | 0.0816 | 79.6 | 0.3519 | 1.7552 | 15.92 | 0.08 | 125KHZ | 5.1033 | 0.0154 | 0.0765 | 69.7 | 0.2965 | 1.4629 | 15.31 | 0.08 | 62.5KHZ | 5.1033 | 0.0164 | 0.0816 | 72.2 | 0.3237 | 1.5999 | 16.14 | 0.08 |
下面的是PRO MINI 接入3.3V电压下各个时钟频率的功耗结果(原始测量数据,未减去空载电流):
时钟频率 | 电压V | 待机电流A | 待机功率W | 耗时s | 容量mAh | 电度mWh | 运行电流mA | 运行功率W | 0HZ | 5.1034 | 0.0082 | 0.0408 | - | - | - | - | - | 16MHZ | 5.1028 | 0.0167 | 0.0816 | 45.1 | 0.1949 | 0.9546 | 15.56 | 0.08 | 8MHZ | 5.1033 | 0.0143 | 0.0714 | 38.7 | 0.1426 | 0.7100 | 13.27 | 0.07 | 4MHZ | 5.1033 | 0.0130 | 0.0663 | 34.0 | 0.1134 | 0.5674 | 12.01 | 0.06 | 2MHZ | 5.1033 | 0.0120 | 0.0561 | 36.1 | 0.1112 | 0.5529 | 11.09 | 0.06 | 1MHZ | 5.1033 | 0.0115 | 0.0561 | 40.4 | 0.1187 | 0.5794 | 10.58 | 0.05 | 500KHZ | 5.1033 | 0.0112 | 0.0561 | 38.2 | 0.1116 | 0.5556 | 10.52 | 0.05 | 250KHZ | 5.1033 | 0.0111 | 0.0561 | 33.3 | 0.0989 | 0.4918 | 10.69 | 0.05 | 125KHZ | 5.1033 | 0.0110 | 0.0561 | 45.4 | 0.1309 | 0.6571 | 10.38 | 0.05 | 62.5KHZ | 5.1033 | 0.0110 | 0.0561 | 32.2 | 0.0891 | 0.4471 | 9.96 | 0.05 |
最后的最后,是换算后汇总(上面是实测数据):
因为在拔掉UNO和mini后,计时量仍然多计算了4s,这里将所测的时间全部减去4s,
UNO在各个频率下的功耗如下:
时钟频率 | 运行电流mA | 运行功率W | 待机电流mA | 待机功率W | 0HZ | - | - | - | - | 16MHZ | 54.06 | 0.273 | 52.40 | 0.265 | 8MHZ | 48.41 | 0.244 | 47.60 | 0.240 | 4MHZ | 46.22 | 0.233 | 45.40 | 0.230 | 2MHZ | 44.84 | 0.226 | 43.70 | 0.219 | 1MHZ | 44.12 | 0.222 | 42.80 | 0.214 | 500KHZ | 43.49 | 0.219 | 42.40 | 0.214 | 250KHZ | 43.18 | 0.218 | 42.00 | 0.214 | 125KHZ | 42.53 | 0.214 | 42.00 | 0.214 | 62.5KHZ | 43.32 | 0.218 | 41.80 | 0.209 |
PRO MINI在5v电压下各个频率功耗如下(已经减去空载电流和功率):
时钟频率 | 运行电流mA | 运行功率W | 待机电流mA | 待机功率W | 0HZ | - | - | - | - | 16MHZ | 18.45 | 0.093 | 18.60 | 0.092 | 8MHZ | 14.33 | 0.071 | 13.50 | 0.066 | 4MHZ | 12.12 | 0.060 | 11.50 | 0.056 | 2MHZ | 10.31 | 0.051 | 9.90 | 0.051 | 1MHZ | 9.63 | 0.048 | 8.90 | 0.046 | 500KHZ | 8.76 | 0.043 | 8.40 | 0.041 | 250KHZ | 8.56 | 0.043 | 8.20 | 0.041 | 125KHZ | 8.05 | 0.039 | 7.20 | 0.036 | 62.5KHZ | 8.89 | 0.044 | 8.20 | 0.041 |
PRO MINI在3.3v电压下各个频率功耗如下(已经减去空载电流和功率):
时钟频率 | 运行电流mA | 运行功率W | 待机电流mA | 待机功率W | 0HZ | - | - | - | - | 16MHZ | 8.87 | 0.043 | 8.50 | 0.041 | 8MHZ | 6.59 | 0.033 | 6.10 | 0.031 | 4MHZ | 5.41 | 0.027 | 4.80 | 0.026 | 2MHZ | 4.27 | 0.021 | 3.80 | 0.015 | 1MHZ | 3.54 | 0.017 | 3.30 | 0.015 | 500KHZ | 3.55 | 0.018 | 3.00 | 0.015 | 250KHZ | 3.95 | 0.020 | 2.90 | 0.015 | 125KHZ | 3.18 | 0.016 | 2.80 | 0.015 | 62.5KHZ | 3.17 | 0.016 | 2.80 | 0.015 |
差不多了,最后来一个全家福:
全家福
第一次发帖,有不足的地方还请指正。
|