浅谈如何降低arduino uno和pro mini 时钟频率-Arduino中文社区 - Powered by Discuz! Archiver

酥糖 发表于 2017-8-25 02:45

浅谈如何降低arduino uno和pro mini 时钟频率

本帖最后由 酥糖 于 2017-8-25 02:45 编辑

很多的arduino项目里都是用电池供电的,如何降低损耗,让设备使用周期延长呢?本文将讲述如何通过降低arduino的芯片时钟频率,来达到节能的效果。
那么,降低到多少频率才能算是节能呢?文末揭晓测试结果
先附送调整arduino的时钟频率代码:

/*********************************************
* 目的:降低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
*****************************************/

代码中用到的库:


下面是对代码进行测试;
本次测试的对象是UNO和PRO MINI两个:

反面,来个特写,这个是某宝某宙家的,当时买了个套装两百多,
用了半月就觉得亏了,还不知道能不能回本。。。。

Pro mini,支持3.3v~12v和5.0v输入

测试用的电源插头是苹果原装5v1a的,纹波很稳定;
测试时表现的也很不错,波动在0.1mV,讲真,贵有贵的道理~~~


烧录pro mini的设备是某宝的USB转TTL,支持重启、5v、3.3v等等……


下面,是本次测试用到的关键工具:POWER-Z,功能强大的一塌糊涂啊……



请允许我替他们打个广告:
感兴趣的筒子们请扫一下二维码传送过去,
扫码领券,扫码领券,扫码领券……

下面进入测试环节:

空载电压,5.1027V,很稳定,几乎没有波动。

USB转TTL空载时是耗些电的,8.2mA,最终计算时会减掉这部分功耗的。
先测试UNO:


用的是上面的代码,分别测试16MHZ、8MHZ、4MHZ、2MHZ……时钟频率下的
电压、电流、功率还有耗电能力。
下面的是UNO 5V电压下各个时钟频率的功耗结果:

时钟频率电压V待机电流A待机功率W耗时s容量mAh电度mWh运行电流mA运行功率W
0HZ5.104600-----
16MHZ5.10210.05240.265349.40.68173.445849.680.25
8MHZ5.10210.04760.239749.20.60783.068944.470.22
4MHZ5.10210.04540.229547.90.56362.843242.360.21
2MHZ5.10210.04370.219348.70.55682.803141.160.21
1MHZ5.10210.04280.214248.90.55032.765740.510.20
500KHZ5.10210.04240.214249.60.55092.779539.980.20
250KHZ5.10210.04200.214250.50.55782.821439.760.20
125KHZ5.10210.04200.214260.30.66523.352839.710.20
62.5KHZ5.10210.04180.209148.60.53672.695339.760.20

待机电流、功率是板载LED未点亮时候的读数,“耗时”是在该时间段内消耗的mAh和mWh,根据这些,换算成平均的运行电流、运行功率;

PS:上面给的程序是点亮LED,点亮LED比不点亮耗电多一些。

插上MINI:


下面的是PRO MINI 接入5V电压下各个时钟频率的功耗结果(原始测量数据,未减去空载电流):

时钟频率电压V待机电流A待机功率W耗时s容量mAh电度mWh运行电流mA运行功率W
0HZ5.10340.00820.0408-----
16MHZ5.10280.02680.132677.80.54642.752025.280.13
8MHZ5.10330.02170.107169.30.40862.032021.230.11
4MHZ5.10330.01970.096975.60.40411.995519.240.10
2MHZ5.10330.01810.091877.40.37731.877417.550.09
1MHZ5.10330.01710.086766.40.30911.546716.760.08
500KHZ5.10330.01660.081674.40.33161.647016.050.08
250KHZ5.10330.01640.081679.60.35191.755215.920.08
125KHZ5.10330.01540.076569.70.29651.462915.310.08
62.5KHZ5.10330.01640.081672.20.32371.599916.140.08


下面的是PRO MINI 接入3.3V电压下各个时钟频率的功耗结果(原始测量数据,未减去空载电流):


时钟频率电压V待机电流A待机功率W耗时s容量mAh电度mWh运行电流mA运行功率W
0HZ5.10340.00820.0408-----
16MHZ5.10280.01670.081645.10.19490.954615.560.08
8MHZ5.10330.01430.071438.70.14260.710013.270.07
4MHZ5.10330.01300.066334.00.11340.567412.010.06
2MHZ5.10330.01200.056136.10.11120.552911.090.06
1MHZ5.10330.01150.056140.40.11870.579410.580.05
500KHZ5.10330.01120.056138.20.11160.555610.520.05
250KHZ5.10330.01110.056133.30.09890.491810.690.05
125KHZ5.10330.01100.056145.40.13090.657110.380.05
62.5KHZ5.10330.01100.056132.20.08910.44719.960.05


最后的最后,是换算后汇总(上面是实测数据):
因为在拔掉UNO和mini后,计时量仍然多计算了4s,这里将所测的时间全部减去4s,

UNO在各个频率下的功耗如下:

时钟频率运行电流mA运行功率W待机电流mA待机功率W
0HZ----
16MHZ54.060.27352.400.265
8MHZ48.410.24447.600.240
4MHZ46.220.23345.400.230
2MHZ44.840.22643.700.219
1MHZ44.120.22242.800.214
500KHZ43.490.21942.400.214
250KHZ43.180.21842.000.214
125KHZ42.530.21442.000.214
62.5KHZ43.320.21841.800.209

PRO MINI在5v电压下各个频率功耗如下(已经减去空载电流和功率):


时钟频率运行电流mA运行功率W待机电流mA待机功率W
0HZ----
16MHZ18.450.093 18.60 0.092
8MHZ14.330.071 13.50 0.066
4MHZ12.120.060 11.50 0.056
2MHZ10.310.051 9.90 0.051
1MHZ9.630.048 8.90 0.046
500KHZ8.760.043 8.40 0.041
250KHZ8.560.043 8.20 0.041
125KHZ8.050.039 7.20 0.036
62.5KHZ8.890.044 8.20 0.041



PRO MINI在3.3v电压下各个频率功耗如下(已经减去空载电流和功率):


时钟频率运行电流mA运行功率W待机电流mA待机功率W
0HZ----
16MHZ8.870.043 8.50 0.041
8MHZ6.590.033 6.10 0.031
4MHZ5.410.027 4.80 0.026
2MHZ4.270.021 3.80 0.015
1MHZ3.540.017 3.30 0.015
500KHZ3.550.018 3.00 0.015
250KHZ3.950.020 2.90 0.015
125KHZ3.180.016 2.80 0.015
62.5KHZ3.170.016 2.80 0.015


差不多了,最后来一个全家福:


第一次发帖,有不足的地方还请指正。



NoComment 发表于 2017-8-25 09:15

我们做低功耗开发基本上模块到手就拆LED,一个20ma

Zoologist 发表于 2017-8-25 14:39

很好的研究啊

酥糖 发表于 2017-8-25 21:13

NoComment 发表于 2017-8-25 09:15
我们做低功耗开发基本上模块到手就拆LED,一个20ma

为什么不重新设计一块电路板呢?专门电池供电充电的那种?

NoComment 发表于 2017-8-26 10:22

酥糖 发表于 2017-8-25 21:13
为什么不重新设计一块电路板呢?专门电池供电充电的那种?

主要是我吃过很多次直接打最终PCB的亏,供电错了、电流不够、通讯协议对不上等等,所以有必要做一块原型板,先调通程序,再把万能板线路抄成PCB。
初期直接上PCB调试比较不经济,万一哪里有个小错这一批板子要么手工维修要么全部作废。

const 发表于 2017-8-28 15:20

应该再测测休眠模式和standby模式

shanqln 发表于 2018-7-15 15:19

学习了。。。谢谢。。。。

皮锤宝 发表于 2018-7-18 16:35

发现一个问题,时钟一变串口波特率,延时,pwm,tone()等与时间有关的都受影响
页: [1]
查看完整版本: 浅谈如何降低arduino uno和pro mini 时钟频率