arduino.电压参考
有一个Arduino电压参考(1.1V)内置于某些Arduino
微控制器。 uno和nano都有一个,并且相当多
另一个arduinos拥有它们。
这一页:
尝试量化内部电压参考(它有多好?)。
向您展示如何衡量"real"VCC的值(使用参考)。
上面的第二件物品很有趣,因为它使用内部
reference to "calibrate"电源电压使您可以测量电压
使用整个电源范围不仅仅是1V1。
您通常使用微控制器电源设置Arduino ADC
供应作为电压参考(因为它很容易!它是默认值
Arduino软件的模式)。这是电源的麻烦
然后芯片将定义测量的准确性即,您赢了'如果它与温度准确或稳定,则有一个线索。
笔记: 虽然内部Arduino电压参考是稳定的
温度和电压,其初始值在芯片之间变化
(可能是由于芯片制造的差异)。它需要校准。
当你不时,Arduino电压参考是有用的'想要加入添加的麻烦
external
芯片弄清楚电压并需要比VCC更稳定的参考或电源电压变化。
例如,Arduino Uno / Nano可以从1V8到5V5操作,并使用两个AA
单元格将允许操作(但仅当您将时钟设置为4MHz时 - 请参阅
数据表第29.3节"Speed Grades")。您可以使用内部电压引用来监视器
电池的状态 - 没有额外的组件。
带隙电压参考
Atmega328p中的参考类型是带隙类型。这用途
两个元素,一个具有负温度系数和
一个具有抵消的正温度系数
temperature effects.
While not
为您提供arduino的超精确电压读数,该电路旨在稳定地防止变化
温度和电源电压。
这种类型的电路布局用于现有技术参考。 MAX6143。
但是,在Atmega328和类似的过程中,控制布局的过程
芯片上的芯片并不明确,不使用激光
修剪,因此arduino电压的初始精度差
reference (±9%).
您可以了解如何在此页面后面消除此偏移量。
笔记: 如果使用外部参考ADC
由于您控制芯片规格,测量将更准确。
但是,记得
Arduino中的内部ADC无论如何都不太准确(请参阅Atmega328数据表:绝对
精度2LSB(包括INL,DNL,量化,增益和偏移错误)。
警告: 永远不要使用外部
voltage reference 同时 启用内部参考 - 有些东西会破坏!
用于Arduino电压参考
Arduino电压参考可以以五种不同的方式之一使用:
用于欠出检测(请参阅数据表以启用)。
作为ADC中的测量值(进入其中一个输入)。
作为ADC测量的参考。
作为比较器的输入。
温度 measurement (The ADC must use the internal reference).
棕色检测
欠压检测允许处理器识别供应时
电压已浸到阈值以下,但并未完全消失
零。这用于向处理器标记存储器可能已经存在
写得很糟糕。它只需提供额外的可靠性
application.
对ADC的输入
测量ADC输入处的参考将允许校准a
不同的参考源例如供应(见
这里 )或作为原油的比较
其他ADC输入(除非您
校准 the reference first as shown in
此页面 - 在这种情况下,它可能是非常准确的(〜1%))。
ADC参考
使用Arduino电压参考作为您希望使用它!
提示: 使用1V1参考表示10位ADC具有LSB值
〜1mV(1.074mV / LSB)。但是,您可以只测量高达1.1V的电压!
比较器输入
使用电压参考允许原油比较I.E只能
将任何输入电压与1V1进行比较。一个有趣的点是任何一个有趣的点
ADC输入可以通过比较器进行比较 - 而且没有
使用任何外部组件。请参阅数据表的第23.2节
labelled "模拟比较器多路复用输入".
你可以问这个问题"当你可以时,为什么要使用比较器
使用ADC轻松计算结果?"答案是速度。
比较器可以比较100纳秒内的两个电压
而ADC是连续近似类型,大约需要13us
收集ADC值。该值必须由处理器检索
然后你会将值与极限设置进行比较,持续
more time.
温度 Measurement
由于Arduino电压参考是与其可以的温度无关
与温度依赖电路的输出进行比较 - a
芯片内的电路。这允许您测量温度
ATMega328P.
气温
ADC中的传感元件可以设置为ADC输入之一。这
数据表指出温度系数为1mV /°C但是
由于芯片的过程变化,初始精度为±10°C
生产。 (参见标有数据表的第24.8节"Temperature
Measurement")。准确的阅读需要校准此
system.
arduino.电压参考性能
arduino.电压参考的数据表中的信息指出它具有最大值和最小值
1.0V〜1.2V,名义上1V1。除此之外,还没有更多信息。
没有关于重复性或稳定性的信息。它表明电压可能在1.1V左右变化±9%。
所以真正的问题是:
Arduino电压是否参考任何良好的参考
all?
规范似乎意味着它可能随时改变±9%。
事实上,这不是真的,电压引用更好,并且
quite useful.
在此页面上有一些电压参考测量 - 这些
并非详尽无遗,但会给你带隙的味道
参考性能。
arduino.电压参考问题
此处提出的问题是:
参考电压如何随温度变化?
参考电压如何随VCC而变化?
参考电压一般有多稳定?
请记住,这些测量基于测试几个芯片
和一组或两组测量。因此,他们将给予
印象而不是绝对答案。
笔记: 所有电压测量都是在突破上使用ADS1115进行的
木板。所有电压测量都在ADS1115差分模式下进行。
使用MAX6675和J的温度测量
thermocouple.
初始准确性
初始精度在±9%的±9%差,但校准Arduino电压参考允许您消除此错误。
笔记: MAX6143的初始精度为0.05%(更好的180倍,C.f.9%)。
输出稳定性
测量两个板,首先是S标准Arduino Uno板和
第二个是Arduino纳米板。这些都使用相同的处理器
ATMega328P.
从USB(集线器)电源供电的Arduino UNO的不同时间/天的测量产生了以下结果:
arduino. UNO USB稳定性测量
arduino. Uno(PDIP)
USB(集线器)电源
电压(环境温度)
%错误(5V)
内部的
参考
%错误(1v1)
4.806V(21°C)差异
3.9%
1.104V差异
0.36%
4.826V(16°C)差异
3.5%
1.097V差异
0.27%
4.862V(22°C)差异
2.8%
1.0976V差异
0.22%
4.878V(21°C)差异
2.4%
1.0980V差异
0.18%
4.842V(20°C)差异
3.2%
1.0975V Diff.
0.23%
4.809V(19.5°C)差异
3.8%
1.0963V差异
0.34%
4.788V(23°C)差异
4.2%
1.0957V差异
0.39%
4.866V(23°C)差异
2.8%
1.0956V差异
0.39%
4.853V(20°C)差异
17/2/20
2.9%
1.0958V差异
0.38%
4.876V(17°C)差异
18/2/20
2.5%
1.0961V差异
0.35%
4.860V(18°C)Diff 24/2/20
2.8%
1.0957V差异
0.39%
VCC = 4.2 - 2.4 = 1.80%的最大错误
VREF的最大错误更改= 0.39 - 0.18 = 0.21%
在PC USB端口的不同时间/天的不同时间/天进行测量,得到以下结果:
arduino. Nano USB稳定性测量
Arduino Nano (MSOP)
USB(PC)电源
电压(环境温度)
%错误(5V)
内部的
参考
%错误(1v1)
4.821V(20°C)
3.6%
1.070V
2.72%
4.824V(16°C)
3.5%
1.069V
2.81%
4.831V(17°C)差异
3.4%
1.068V差异
2.91%
4.825V(22°C)差异
3.5%
1.068V差异
2.91%
4.851V(21°C)差异
3.0%
1.068V差异
2.91%
4.852V(15°C)差异
3.0%
1.069V差异
2.81%
4.830V(23°C)差异
3.4%
1.067V差异
3.00%
4.833V(20°C)差异
17/2/20
3.3%
1.067V差异
3.00%
4.862V(17°C)差异
19/2/20
2.8%
1.0691V差异
2.81%
4.879V(20°C)差异21/2/20
2.4%
1.0715V差异
2.69%
vcc = 3.6 - 2.4 = 1.20%的最大错误更改
Vref = 3.00 - 2.69 = 0.31%的最大错误更改
USB电压随比2.4%至3.6%,这没有一个大
对参考误差变化的影响(参见电压测量
below).
注意参考电压如何保持常量即,具有常数
偏移错误。即使电压引用从值开始关闭
1.070V它保持接近该价值。这可能是由于
制造过程似乎随着时间的推移似乎保持不变。
对于最高结果,供应是
从USB集线器中获取,其自有电源输出,而底部
是直接PC USB输出。后者似乎更稳定(纳米)。
在两种情况下,使用底板内部电压参考
将提供更一致的结果,因为它将具有更严格的电压调节。
笔记: 请记住,您要么直接使用5V USB电源(何时
在工作台上工作或使用外部电源块。在船上5V调节器 - LD1117AG(与NCP1117相同) - 有一个
比USB电源更紧密的错误规格(5V = 2%)(参见下面的供应灵敏度测量)。
结论稳定性
即使Arduino电压参考有初始偏移误差
(可能是由于制造过程)的稳定性
参考仍然非常好。这里的测量结果显示
0.21%〜0.31%的变化。
电压供应稳定性
在无焊接面包板上使用ATMEGA382P并连接到可变电源电压。
提供稳定性测量
电源电压
内部的 参考
%初始错误 更改(1v1)。
5.261V(20°C)差异
1.0995V Diff.
0.05%
4.948V(20°C)差异
1.0988V差异
0.11%
4.389V(20°C)差异
1.0980V差异
0.18%
4.056V(20°C)差异
1.0975V Diff.
0.23%
3.615V(20°C)差异
1.0971V差异
0.26%
3.370V(20°C)差异
1.0968V差异
0.29%
2.759V(20°C)差异
1.0965V差异
0.32%
注意:引用在2.3V下产生奇数值
它们不包括在内。原因是最大时钟速度
允许与电源电压成比例 - 应较低时钟速度
在1V8的操作中运行4MHz(参见数据表第29.3节速度等级 -
安全操作区域)。
在从5.26V开始时,误差会在每个电源VIL下降到每电源VIL下降-1.2mV
这是每电源伏下降的-11%。
计算:[(1.0965-1.0995)/(2.759-5.261)]。
TCL.
proc perr {max val} {
puts [expr {(($ max-$ val)/ $ max)* 100.0}]
}
结论供电电压
带隙电压参考似乎非常好,不敏感
电源电压变化。它下降1.2mV,每个电源伏下降开始
在5.26V供电时误差0.05%。如果供应保持不变,那么这
还可以通过校准引用来消除偏移误差。
温度 Stability
使用带有MAX6675芯片和MSOP Arduino的热电偶(j)
纳米。加热芯片一分钟并等待温度
稳定。 MAX6675热电偶具有偏移温度误差,但
我们真正想要的是温度的变化
以及如何涉及参考输出。环境温度
也使用不同的设备测量以提供参考点
the thermocouple.
arduino.纳米温度测量
对于通过热电偶测量的纳米环境温度为24.5°C
(原始温度计表示23°C)所以非常接近。芯片温度是
30°C.
第一测量:
Vref是1.0674V。
VREF将1.0659kV加热芯片至75°C
下降是:-1.5mv
改变温度
对于35°C温度,更改参考电压变为-1.5mV。
大约为-1.5 / 35 = -0.043mV /°C。但这只能基于一个设备
and one measurement!
更改为-0.043mv /°C
温度从25°C增加至125°C(100°C Delta)该参考
应该下降4.28mV。在百分比术语(4.28e-3 / 1.1)* 100 =
0.39%.
对于将25°C的温度降低至-40°C(-65°C delta)参考
应该增加2.79mV。在百分比术语(2.79e-3 / 1.1)* 65 =
0.16%.
如果考虑一个具有-2.1mV /°C温度的简单晶体管
随后改变,对于相同的温度增量,您将获得201mV电压
更改(18.2%的变化)所以带隙电路做得很好!
第二测量:
VREF为1.0665V.TEMP 30°C VREF将1.0652kV加热芯片加热至75°C
下降是:-1.3mv - 所以这是第一个的结果。
第3次测量:
VREF为1.0688V.TEMP 30°C
VREF是1.0683kV加热芯片至75°C
下降是:-0.5mv - 有点不同,但在相同的范围内。
结论温度
温度性能良好,仅参考0.55%
在全温度范围内更换(估计35°C至75°C
results).
参考电压变化0.003%/℃(估计)[0.55%/ 165(估计)]。
注意:MAX6143在3ppm /°C的温度性能上具有1000倍。
在全温度范围内(-40°C至+ 125°C)参考将会
变化约0.55%(0.39%+ 0.16%)= 0.55%(1V1),这不是太糟糕。
电压参考应在这些温度下达到2.79mV〜4.28mV(从1v1)。
关于Arduino电压参考的结论
参考可以具有大的偏移量(由于制造过程)±9%,因此其初始精度可能是坏的。
电源电压灵敏度:每电源伏下降〜-1.2mV。
这是每个电源伏下降~.11%。
温度 stability: ~0.003% per °C (estimated)
在全温范围内〜0.55%。
输出电压稳定性:〜0.31%
为了获得Arduino电压的最佳结果,您应该
校准它。这将消除由于偏移电压
制造工艺和供应伏灵敏度(如果电压源
保持常数,即通过监管机构提供)。
然后将其稳定为0.55±0.31 =〜0.86%。
请记住,这是基于极少的样本的估计 ,所以你的
结果可能会有所不同,但确实表明可以更多地制作参考
如果校准,则稳定。它还表明Arduino电压参考
可能比你想象更有用。
如何测量电源电压
您可以从中操作微控制器(Atmega328p - Uno,Nano)
在1V8和5V5之间。这
微控制器无法检测到这一点"real"电源电压的值
除非您使用已知的参考
搞定的电压。这是因为ADC测量一切
相对于参考即,电源电压是参考!
警告: 一台电视CC. = 4.5V时钟可以是20MHz和vCC. =2.7V 时钟速度必须是<= 10MHz, and for VCC. =1.8V
时钟速度必须是<= 4MHz)。见部分"29.3 Speed Grades"
这表明时钟频率必须线性地减少
降低电源电压。
它是ADC测量的一种反向方法。
而不是使用电压引用作为"reference" you use the
供应电压作为参考和"Arduino内部电压
reference"作为要测量的数量。
自从你可以以这种方式完成'T选择VCC电压作为ADC的输入。看看"ADC MUX块图" below.
在这种情况下,电源电压"reference" is worth:
V箱 = VCC. / 1024 v / lsb [pow(2,10)= 1024]
在上面的等式VCC. 未知(到微控制器!)。
通过测量1V1参考,并获得它的ADC值,您可以解决方程
V箱 = V裁判 / ADC价值
所以:
VCC. / 1024 = v裁判 / ADC价值
所以
VCC. = 1024 * (V裁判 / ADC价值 )
和...
VCC. = 1024 * (1V1 / ADC价值 )
这里1024是正确的(1024是 VCC的除法 对于参考电压)。
提示: 提示:有更好的结果校准Arduino电压参考。
要使用Arduino电压参考弄清楚电源电压的值:
将ADC参考源设置为VCC。
(这是ADC MUX中的选项 - 见下图) 采用带隙电压的ADC读数(Arduino电压参考)。
您可以使用上面的方程来计算电源电压或按照下面的示例进行操作。
示例速度1测量电源电压
将以下代码放入Setup()函数中的草图中。
如果你
校准 the reference 然后改变...的价值
arduinoADCcal
......到你的测量值。 1.1V的表示是11000
是一个固定的小数点表示,小数点是
假设是右边的一个地方。所以你可以想到11000
表示实际电压中的0.1mV的数量.11000 x
0.1e-3 = 1.1V
使用ADS1115或Good Voltmeter将为您提供足够的数字。如果
您使用标准DVM,那么您只会获得3位数(在2伏范围内)设置
最后两位数字到零。
复制素描
void selfMeasureVcc ( char * buf ) {
uint8_t low , high ; static unsigned long arduinoADCcal = 11000 ;
if ( strlen ( buf )> 1 ) {
if ( strlen ( buf )< 6 )
Serial . print ( F ( "Not enough digits" ));
else if ( strlen ( buf )> 6 )
Serial . print ( F ( "Too many digits" ));
else
arduinoADCcal = atoi (& buf [ 1 ]); } else if ( strlen ( buf )== 1 )
Serial . print ( F ( "Ref calibration value: " )); Serial . println ( arduinoADCcal );
ADMUX = _BV ( 裁判S0 ) | _BV ( MUX3 ) | _BV ( MUX2 ) | _BV ( MUX1 ); delay ( 2 ); ADCSRA |= _BV ( ADSC ); while ( bit_is_set ( ADCSRA , ADSC ) ); ADCSRA |= _BV ( ADSC ); while ( bit_is_set ( ADCSRA , ADSC ) ); low = ADCL ; high = ADCH ; long ADCValue = ( high << 8 ) | low ;
Serial . print ( F ( "ADC value of 1V1 ref: " )); Serial . println ( ADCValue );
#define BINS 1024L Serial . println ( ( arduinoADCcal )* 箱S );
Serial . println ( (( arduinoADCcal * 箱S )+ 5L ) );
Serial . println ( (( arduinoADCcal * 箱S )+ 5L ) / 10L );
uint32_t res = ((( arduinoADCcal * 箱S )+ 5L ) / 10L ) / ADCValue ;
Serial . print ( F ( "Measured (mV) " )); Serial . print ( res ); Serial . println ( F ( " mV" ));
}
arduino.电压参考框图
arduino. Uno/Nano ADC MUX块图
资料来源:ATMEGA328P数据表
Attiny85内部电压参考
ADC的ATTINY85电压参考可选择为1V1或2.56V,布置在ADC中略微不同。 A.
裁判 PIN只能设置为输入(没有切换FET将内部参考MUX连接到A.
裁判 别针)。因此,您无法在A中设置Arduino电压参考以进行测量
裁判 别针。
因此你可以't直接校准它。你要么假设
它具有所述值或准确测量VCC供应然后采取
ADC阅读(但记住ADC也有自己的错误!)。
将消除ADC误差的一种方式是在可变电压中馈送
到ADC输入 - 你测量的。然后将它与阅读进行比较
从电压参考(ADC读数)。一旦两个读数匹配
输入电压然后显示真正的Arduino参考电压
(当然仅限于1LSB精度)。
arduino. ATTiny85 ADC MUX块图
资料来源:Attiny85数据表
校准Arduino电压参考
校准UNO或NANO中的参考您只需打开
参考并测量参考引脚处的电压。记住这一点
只有销钉上的东西应该是电容器,没有其他驱动
电路(如果要保留芯片!)。
警告: 请勿连接到V的任何其他电压参考裁判
在切换Arduino(UNO / NANO)电压参考时引脚 - 没有
保护,您可能会损坏外部参考或
内部参考电路。
开启参考是简单地使用以下Arduino代码:
analogreenere(内部);
但是,您需要激活ADC以启用参考,因此简单的读取将执行。
analogread(0); //可以是任何频道
这是由于"wiring"代码写入 - Mux寄存器
并且refs0 / 1仅在ADC READ命令之前写入(在Analogread()函数中)。
对于Arduino Mega,您可以选择以下内容:
INTERNAL1V1
INTERNAL2V56
将上面的代码放在Arduino草图的Setup()部分中。
现在将万用表连接到v
裁判 引脚并记下结果(用于在代码中使用 - 请参阅
测量电源电压 , 具体来说)。
提示: 使用标准万用表,或用于更多数字使用
差分模式或侥幸计(非常昂贵)的ADS1115。
提示: 将电容器添加到VREF引脚以进行额外降噪。我使用100nf电容器。
要将引用设置为供应使用:
analogreference(默认);
......再次接下来......
analogread(0); //可以是任何频道
此处找到模拟操作代码:
"C:/程序文件(x86)/ darduino/hardware/arduino/avr/cores/arduino/wiring_analog.c"
定义(#define)在这里:
C:/程序文件(x86)/ darduino/hardware/arduino/avr/cores/arduino/arduino.h
上面的Arduino代码(对于内部参考选择)将设置
寄存器如下(数据表部分:24.9.1控制器ADC多路复用器
Selection Register):
Acmux位7和6设置高(REFS1和REFS0)。
Ambux比特3..0设置为B1110。
注意:数据表状态:
"开关参考电压后的第一个ADC转换结果
源可能不准确,建议用户丢弃此
result."
(见Datasheet部分"24.5.2 ADC电压参考").
所以你应该扔掉第一个ADC结果。
显示索引
隐私政策
| 接触
| 关于我
网站地图
| 使用条款
新的! Comments
让你说到你刚刚阅读的东西!留下下面的框中的评论。