成为订阅者(免费)

加入29,000名其他订阅者以获得用户销售折扣和 其他免费资源。
:
:
大学教师'担心 - 您的邮件地址完全是 安全的。我保证使用它 只要 to send you MicroZine.

arduino. ADC.

arduino. ADC.或模拟到数字转换器采用输入 电压并将其转换为数字值。使用标准设置 您可以测量0V和5V之间的电压,分辨率为4.9mV 所以你可以在测量时得到很多细节 analogue voltages.

arduino.模拟销

arduino. Uno有六个引脚(显示在A0〜A5以下) 可以选择ADC测量;多路复用器馈送六个中的一个 模拟输入引脚进入ADC。

要从引脚A4读取模拟电压,请使用以下功能:

Analogread(A4)

在该函数中完成多路复用器的设置 you automatically.

arduino. Uno模拟销

arduino. ADC.规范

  Parameter
arduino. Uno / Nano
  Voltage Supply (Vs)
 1V8 ~ 5V5
  Interface
内置
  Resolution
8 bit
  绝对准确性(包括INL,DNL,
  量化误差,增益,偏移误差)[1]
2 LSB
  偏移错误(ADC,DAC)[1]
2 LSB
  INL [1]
0.50 LSB.
  DNL [1]
0.25 LSB.
  Gain error [1]
2 LSB
  Sampling frequency
9.6Hz
  工作温度
-40°C〜85°C
            [1]对于4V操作和200kHz时钟。

arduino. ADC.大小

arduino. ADC.有一个10位转换器,这意味着 1024可以作为ADC作为结果返回的不同值:

由于POW(2,10)= 2 ^ 10 = 1024

除以1023或1024?

关于是否划分1024或1023,总有一些困惑 获得每个位的电压值。

但是Atmega328p数据表提供了以下公式:

ADC =(VIN * 1024)/ VREF

重新安排:

Vin =(Vref / 1024)* ADC

arduino. ADC.分辨率为5V

因此,对于VREF = 5V,ADC值为1将导致电压步骤 4.88mv - 一个LSB​​的电压值 - 这是Arduino ADC 分辨率为5V VREF。

但请注意,最大ADC值为1023,因此可以报告的最大ADC值是:

1023 *(5/1024)= 4.9951V

当它在数据表中所说,

"0x000表示模拟接地,0x3FF表示所选参考电压减去一个 LSB."

您将在Web上看到错误的等式的原因是这样 the output "feels"右,即1023 *(5/1023)= 5.000。这是错误的 使用和意味着添加到所有值的偏移量。

arduino. ADC.如何运作

该ADC称为连续近似ADC,并且需要几个时钟周期来放大正确的ADC输出。

ADC转换器将输入模拟电压与一部分进行比较 VREF电压使用除以两个序列。样本和持有 capacitor is 充电到输入电压,然后输入断开 在整个转换过程中测量相同的电压。

它首先检查输入电压是否高于或低于 VREF电压的一半,通过使用DAC产生一半的参考 电压。 DAC电压是进料到比较器中。

DAC的输出形成结果的高位(存储在换档中 登记)。如果输入电压越高,则该位是一个,否则 the bit zero.

如果输入低于VREF电压的一半,则控制逻辑会产生一个 DAC电压为1/4参考电压。比较了 同样,这在ADC输出中形成了下一位。

该过程继续,直到收集所有位。

ADC时钟

对于Arudino,转换过程需要13个ADC周期 时钟 - 您在ADC模块中使用预分频器设置。 ADC时钟 必须在50khz和200khz之间,因此您可以选择预分频器值 获得有效的ADC时钟。

ADC时钟预分频器可以设置为2n 划分为2到128。 您显然希望使用时钟的最快转换率 对于16MHz系统时钟,您将计算16E6 / 200E3 = 80所以 closest could be 64.

然而,16E6 / 64是250kHz,太大了。因此,必须使用选择128的除法,因此ADC时钟将 是16E6 / 128 = 125kHz。

转换将采用(检查arduino使用这些设置 源代码! - 我没有 - 它们非常可能))

arduino. Uno采样率(16MHz晶体)

1.0 /(13 * 1.0 / 125E3)= 9615Hz

实际上,阅读Arduino参考页面,它表示采样率是 大约10kHz所以这个计算符合该信息。

因此,最大的Arduino ADC采样率是:

9.615khz.

改变Arduino采样率

ADC时钟计算

如果将系统时钟设置为20MHz,则获得20E6 / 128 = 156250.0 - 有点更快转换。

有趣的是,如果你像你想要的设计决定一样去另一个方式 最快的ADC时钟率为200kHz,那么您必须提出问题:

"在ADC预分类后,什么样的水彩时钟会产生200kHz的速率?" i.e.

xtal = 200e3 * prescale - tust 64给出12800000或12.8MHz

12.8E6 / 64 = 200E3

因此,减少XTAL时钟允许更快的转换率为200kHz!

提供最大的幅度:

1.0 /(13 * 1.0 / 200e3)= 15384Hz. (这是为12.8MHz XTAL)

......是的,你可以获得给你的规格的水晶! - 但是你'll probably 使用12MHz水晶,因为它更易于获得,因此上面的采样率 will be a bit lower.

4位ADC的示例操作

这是动作或连续近似ADC的图 使用VREF为5V。这里显示了4位ADC,但原理是 相同但是使用了许多比特。

4位ADC操作

最初输入电压(VIN)大于启动值 DAC电压(由B1000的初始DAC值设置),因此保持该位。 在下一个处理周期中,DAC输出设置为B1100,但在 这种情况DAC电压变得大于VIN(并且该位是 discarded).

保留接下来的两个DAC值,因为DAC电压始终是 低于VIN,您最终得到了B1011的ADC输出值 - ADC连续接近最终价值。

连续近似4位ADC的示例

最终输出DAC电压为2.5 + 0.625 + 0.3125 = 3.4375V

连续近似ADC的优点是它是 确定性的i.e.它总是需要相同的时间。考虑 使用二进制计数器作为始终启动的DAC的输入 零并计数。对于低vin,它需要一些计数 值和高vin它需要很多计数(可能是255 循环8位DAC)即,取决于 the input voltage!

注意:由于ADC中的位数增加,所以获取时间也是如此。

arduino. Uno ADC分辨率

和我们一样 早先看到 ADC的分辨率,当VREF = 5V为4.88mV时。

与ADC的分辨率相同的Arduino Analogread分辨率由两件事管辖

  1. ADC尺寸 - UNO的10位。
  2. ADC参考电压。
笔记: arduino.功能 analogreadresoution.()允许 analogread.()函数返回不同数量的比特。

一些arduinos例如。由于有12位ADC,所以返回 10bits将保留与其他arduino兼容的这些板中的代码 只有10位ADC的板。这是默认操作 - 要获得12位,您需要使用 analogreadresoution.(12). 

ADC位

使用具有更多比特的ADC使得最小步长(LSB) 较小,给出更高的分辨率。 Arduino Uno固定为10位。

ADC参考电压

影响Arduino ADC分辨率的另一种方法是使用a 不同的参考电压。参考电压是满量程 如上所述,施加到ADC转换器的电压。

假设您将VREF值更改为1V,那么您可以检测到的最小LSB将是1/1024或

0.976mv.

提示:您可以选择 内部1.1V参考 和 this will give a 步长约0.1V:精确计算为1.1 / 1024 = 0.00107V 每步约0.11mV。这确实意味着ADC可以'读取电压高于1.1V - 他们只会返回1024。

示例ADC使用

用刮水器(中间)连接10K电位器到PIN A0和一端 到5V,另一端到地面。这个例子只是使用了 arduino.模拟读取 函数analogread()从指定的模拟引脚读取数据。

启动串行监视器,并观察LED周期。开关时间 模拟值的值是两倍,因此它会从2s变化到〜0。

/*
  Analog Input

  Demonstrates analog input by reading an analog sensor on analog pin 0 and
  turning on and off a light emitting diode(LED) connected to digital pin 13.
  The amount of time the LED will be on and off depends on the value obtained
  by analogRead().

  The circuit:
  - potentiometer
    center pin of the potentiometer to the analog input 0
    one side pin (either one) to ground
    the other side pin to +5V
  - LED
    anode (long leg) attached to digital output 13
    cathode (short leg) attached to ground

  - Note: because most Arduinos have a built-in LED attached to pin 13 on the
    board, the LED is optional.

  created by David Cuartielles
  modified 30 Aug 2011
  By Tom Igoe

  This example code is in the public domain.

  http://www.arduino.cc/en/Tutorial/AnalogInput
*/

在 t sensorPin = A0;    // select the input pin for the potentiometer
在 t ledPin = 13;      // select the pin for the LED
在 t sensorValue = 0;  // variable to store the value coming from the sensor

void setup() {
  // declare the ledPin as an OUTPUT:
  pinMode(ledPin, OUTPUT);
}

void loop() {
  // read the value from the sensor:
  sensorValue = analogread.(sensorPin);
  // turn the ledPin on
  digitalWrite(ledPin, HIGH);
  // stop the program for <sensorValue> milliseconds:
  delay(sensorValue);
  // turn the ledPin off:
  digitalWrite(ledPin, LOW);
  // stop the program for for <sensorValue> milliseconds:
  delay(sensorValue);
}

arduino. ADC.引脚的其他用途

您可以使用ADC引脚作为:

  • 模拟输入,
  • 数字输入,
  • 数字输出。
笔记: 其他功能可以由销钉共享。 A5也是SCL。

ADC输入引脚的内部结构允许引脚多 功能。有些人使用ADC引脚迷茫作为数字 输入或输出,但这是完全有效的(只要它有 数字逻辑驱动输入信号)。

使用ADC引脚作为数字输入的唯一小心是如果您的话 设计了用于测量模拟电压的外部电路, 电压可能导致数字输入过载。

在CMOS电路中,有两个FET,高FET和低FET,  连接到公共输出 - 它们的输入也连接。 这些充当电流源和下沉 - 允许大型粉丝。在 正常使用逻辑驱动这些输入的逻辑是高或低的逻辑。如果你 然后将它们驱动它们的中距电压(思想在VCC / S处的模拟输入)然后 你同时转过身来。因此很多当前 flows!

避免这种情况"digital only"输入您绑定输入 使用上拉的高电压,当然是Arduino 内部上拉为此操作提供。

上拉的原因是CMOS电路中的偏置电压 (FET电路)将输入到可能转向的一些浮动值的输入 在两个FET上。所以要确定这不会发生这种情况,启动上拉 在每个数字输入引脚上。

您可以看到,如果外部模拟电路驱动输入到 中档,如果将引脚设置为数字输入,则会出现问题。 So avoid doing this!




新的! Comments

让你说到你刚刚阅读的东西!留下下面的框中的评论。




隐私政策 | 接触 | 关于我

网站地图 | 使用条款


ezoic.报告此广告

访问我们的Facebook页面:

   点击这里



最近的文章

  1. 如何使用ADS1115

    使用ADS1115精度16位ADC进行教程进行低功耗。

    阅读更多

  2. arduino.模拟输出...易模拟输出生成

    arduino.模拟输出:如何创建最精确的PWM模拟输出以及如何创建模拟PWM正弦波。

    阅读更多

  3. 数号和等效的快速宏。加快代码!

    了解DigitalWrite()的工作原理......现在使用17倍宏宏!

    阅读更多

  4. TCS230颜色传感芯片:如何运作以及如何使用它。

    如何使用TCS230(/ TCS3200)彩色检测器芯片并轻松将其添加到您的任何项目中。

    阅读更多

  5. 如何使用ADXL345进行运动感测等。

    使用ADXL345 Acellerometer,您可以检测到16G!您还可以了解如何使用它来点击检测等。

    阅读更多

  6. HMC5883L 3轴数字MAGENTOMTER如何运作

    HMC5883L - 如何制作数字罗盘,了解HMC5883L和QMC5883L之间的差异以及它们是否兼容。

    阅读更多



读者 Comments

"I wanted to thank
你这么好
对于所有信息
你已经提供了
你的网站's

高超极好的."

- 逃亡Potthath.

"This site really is
最好的和我最喜欢的。
我发现这里有很多很有用
项目和提示。"

- 米兰

Bursach.<at>gmail.com<

"Awesome site,
非常,非常容易和好
导航!"


-
镭_tr.<at>
wolf359.cjb.net.


学习微控制器

"Interested in
微控制器?"

注册
免费7天指南:

自由 GUIDE : CLICK HERE


"I am a newbie to PIC
我想说
 how great your
网站一直在为我。"


- 戴夫

de_scott.<at>bellsouth.net

"Your site is a great
和完美的工作。
恭喜。"


- SURESH.

IntegratedInfosys.<at>
Yahoo.com.

"I couldn't find the correct
要定义的词语
你的网页。

非常有用,揭开,
诚实明确。

非常感谢
你的时间和作品。
问候。"


- Anon.

回到顶部