成为订阅者(免费)

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

arduino.模拟输出


arduino.模拟输出引脚不会产生真正的模拟输出 微控制器没有电阻潜水员的感觉 创建电压(异常是Arduino到期)。相反,它使用了 数字PWM信号,可平滑以产生平均电压, 这会导致模拟输出。

arduino. PWM SINE二生20Hz

真正的模拟输出电压和PWM电压之间的差异 是后者是使用不同的 标记为数字输出信号内的空间比率。在波形中 在上面,您可以看到M:S比率随着正弦波而变化。

PWM信号以恒定的频率重复(每个开始 PWM信号与接下来的启动脉冲分离相同的时间。 Since a frequency 涉及到基本频率的一些威胁 输出(平滑后)。

因此,如果您正在寻找绝对准确性,您应该使用a 专用DAC确实内部有一套完整的电阻分隔器 e.g. MCP4725。如果您需要相当良好的电压,则PWM输出非常有用。

对于标准的Arduino UNO,您可以使用六个模拟输出引脚。这 关于这些输出的真正有用的事情是他们使用内部 连接到定时器的硬件模块自动输出 选择M:S比率而无需进一步编程。所以你的程序 写一次,他们一直在产生允许您的PWM信号 程序执行其他有用的任务。

arduino.模拟输出PWM如何工作

将标记变为空间(M:S)比率改变了平均电压 输出可以平滑为稳定的D.C.电压以产生Arduino模拟输出。它是一个 使用持续变化的输出电压产生的简单方法 只有数字信号。

下图显示了低,中高M:S比率的平均电压差:

PWM和平均平均平滑

PWM输出平滑

有几种方法可以平滑PWM信号:

  • 电容电阻对。
  • 电感电阻对。
  • 持久性的持久性。

电容电阻对

使输出信号是真正的D.C.输出所有噪声和频率 必须筛选出来,最简单的方法是创造一个低通 过滤器由电阻和电容形成。

电感电阻对

PWM信号通常用于驱动电动机(大电感 抗绕组抗性)。电感和电阻滤波PWM信号 给出电动机的功率控制。它并不重要 信号是方波。重要的是美联储的当前金额 到电机绕组。

视力持久性

这是关于褪色的LED。如果你想这样做,只需连接一个 LED和电流限制电阻到PWM引脚。你的眼睛会看到一个 平稳衰落LED输出(实际上,光线脉冲) - 如果将PWM调整为1到255并在一定时期再次返回 time.

您的眼睛无法比20ms更快地反应(490Hz信号具有周期2ms),因此看到连续输出光水平。

arduino. PWM频率

Arduino板上使用了两种主要频率:
  • 490Hz(这 默认 频率)。
  • 980Hz(当引脚也与计时器0共享时使用)。
不同频率的原因是定时器0共享 函数delay()和millis()。在uno上,在销钉5和6上。

以下Arduino Boards遵循此计划:

    UNO,Nano,Mini,Mega,Leonardo,Micro,Yun,101 - 用于使用的实际销。

    Uno,Nano,Mini - 使用与 这里.

其他Arduino Chips都使用700Hz至1000Hz的PWM频率。

用于PWM的Arduno模拟输出引脚

arduino. Nano PWM引脚(这些也是Arduino Uno PWM引脚):

    3,5,6,9,10和11。

arduino.模拟输出引脚5和6使用980Hz(定时器0共享)。

arduino.模拟输出引脚3,9,10和11使用490Hz( 默认 频率)。

arduino.引脚,计时器和Atmega标签

arduino.
PWM PINS.
使用定时器
328P标签
328P芯片引脚
PWM频率
  3
定时器2.
OC2B
1
490Hz
  5
计时器0.
OC0B
9
980Hz 
  6
计时器0.
OC0A
10
980Hz 
  9
定时器1
OC1A
13
490Hz
  10
定时器1 OC1B
14
490Hz
  11 定时器2.
OC2A
15
490Hz

引脚5和6使用计时器0。
引脚9和10使用定时器1。
引脚3和11使用定时器2。

arduino. Amplwwrite.

将任何PWM引脚设置为特定标记的功能是:

    Amplwwrite(PIN,MSVALUE);

参数pin是任何一个 有效的PWM引脚.
参数V可以从0到255取值。

将标记设置为空间比率


M:S比率
arduino. PWM值
0%0
25%64
50%128
75%191
100%255

PWM值为0表示输出完全关闭。
PWM值为255表示输出完全打开。

电容平滑例子

让我们设计PWM Arduino模拟输出的过滤器。

对于单极滤波器,中心频率由:

    Fc = 1.0 /(2 * pi * r * c)

我们知道PWM信号的频率为490Hz,所以让我们选择一个 滤波器中心频率为1估计10倍。

还有 选择抵抗力 10k。然后电容是:

    FC = 49

    C = 1.0 /(2 * 3.14159 * 10E3 * 49)= 3.24E-7 = 324NF

我不'T有那么精确的价值,所以让我们选择一个 1uF 电容为中心频率:

    FC = 1.0 /(2 * 3.14159 * 10E3 * 1E-6)= 15.9Hz

警告: 对于这些值10k,1uf平滑可能不够。

现在让我们看看结果输出:

平滑r = 10k c = 1uf

时间常数为10ms。

您可以看到Arduino模拟输出上留下的波纹在253mv处大。平均d.c.水平是 在2.428V的供应范围内应该在哪里(〜4.8V) 这个Arduino Uno USB电源连接)。

arduino.模拟输出过滤Wihth 10k和1uf

因此,如果您想要更稳定的DC Arduing模拟输出,则需要额外的过滤。你可以

  • 使用更高的杆式滤波器(需要opamp)。
  • 增加r或c或两者。
  • 或者增加PWM频率 - 直接编程PWM寄存器。

如果您增加电容,您将获得更小的纹波 但对步进输入的响应将较慢(电容器必须 充电到最终电压)。

平滑r = 100k c = 1uf

时间常数为100ms。

这里的纹波从253mV降至25mV。平均电压为2.38V(电源电压的一半) ~4.8V).

顶部波形是一个 范围存储波形,每个划分的电压相同 上一个图像(用于比较500mv / div)。下波形是一个 在范围A.C的相同波形的50mV / div视图中放大。模式显示 细节的波纹。

arduino. PWM平滑r = 100k c = 1uf

平滑r = 20k c = 220nf

时间常数为4.4ms(使用串联的两个10ks和220nf)。

这将显示为您可能使用的更典型值的示例 或在网上找到。这是平滑和响应速度的折衷。

这里的涟漪是496mV。平均电压再次为2.38V(电源电压的一半) ~4.8V).

arduino pwm平滑两个10k 220nf

arduino.模拟输出分辨率

PWM信号的分辨率为8位。所以有256个截然不同 标记的输出值为空间比,并且当平均结果在256中 不同的电压电平。

  • PWM值0导致零输出。
  • PWM值255导致输出完全打开。

arduino. Uno和Nano Chips(Atmega328P)有三个定时器 通常,每个定时器都能够支持2个PWM输出 为什么有6个PWM输出。

实际上计时器1能够用作16位PWM但是是 在软件中限制为8位输出,以保持与其他PWM的一致性 outputs.

PWM分辨率波形

以下波形显示490Hz和980Hz PWM的操作 信号。更高的速度输出具有较低速度的比特频率 但较高的速度也为第1位具有不同的输出 period.

PWM频率490Hz(默认)

这个频率是"normal"PWM信号的频率i.e.与定时器0无关的频率。

你可以 see the bit period id 8.1us. Zero output is at the top 然后通过每个波形递增m:s值1到4 递增8.1us。

arduino.模拟输出PWM 480Hz

PWM频率980Hz.

这个频率是PWM frequency associated Timer 0 shared outputs.

为了使其工作,第一个比特段扩展到8.1us,而其他其他人长度为4.05US。

零输出位于顶部 然后通过每个波形递增m:s值1到4 递增4.5us除了第一个。您也可以看到最后一个值 (254)在波形的末端正确定位(之前) 在信号的低周期之前开始脉冲 - 在黄色)。

arduino.模拟输出PMW与定时器0 980Hz相关联

在Arduino文档中,它指出了PINS 5上的PWM信号 6可能无法完全脱离。这希望通过扩展来纠正 第1位输出。您可以看到波形0完全关闭,254 输出(黄色)是正确的。

示例素描正弦生成

以下示例使用具有平滑电容的PMW输出(引脚5) 220NF和电阻20K产生Arduino模拟输出。这不是创造正弦波的最佳方式 输出作为输出频率太低(它也取决于循环 代码的时间 - 这里〜185us加上1ms延迟添加了)。

警告: PWM正弦波输出为低频。

您需要少延迟允许平滑的RC对到达 输出使其在频率,幅度和分辨率之间进行折衷。

// Generate (slow) sine using PWM.

在 t PWMpin = 5;

void setup()
{
   Serial.begin(115200);
   Serial.println("PWM Sine...");
}

void loop()
{
static 在 t pwm;
static float x = 0;

   x+=15;

// Let one period take 100 iterations.  if (x > 100 * 2 * 3.141) x = 0; // Position in middle of PWM with a peak of half the max. op. pwm = 在 t( 128 + 127 * sin(x / 100) ); analogWrite(PWMpin, pwm); delay(1); // When x += 15 - f = 20Hz, Vpp = 1.5V // delayMicroseconds(200); // When x += 15 - f = 61Hz, Vpp = 500MmV // delayMicroseconds(500); // When x += 15 - f = 34Hz, Vpp = 898mV }

循环延迟1ms输出

You can'T,除非您编程PWM,否则真的生成快速的Arduino模拟输出 硬件直接。使用标准PWM频率和平滑 导致输出频率为20Hz〜60Hz。

请注意,X沿15跳过15以增加频率,但输出波形分辨率降低。

以下是使用1ms的延迟时的情况:

arduino. PWM SINE二生20Hz

改变这一点'x'递增到程序中的1将增加分辨率,但进一步降低输出速度。

循环延迟185US输出

先前测量环延迟(185U)。这是重复循环功能的时间,不包括延迟(1)时间。

没有延迟,输出不是足够长的 更新,使幅度减少和失真(所有延迟注释出来)。 优点是增加输出频率(135Hz):

arduino. PWM平滑最小延迟134 Hz

代码末尾的注释显示了以下结果:

   delay(1);                  // When x += 15 - f = 20Hz, Vpp = 1.5V
//   delayMicroseconds(200);  // When x += 15 - f = 61Hz, Vpp = 500MmV
//   delayMicroseconds(500);  // When x += 15 - f = 34Hz, Vpp = 898mV

为了使更好的输出使用程序直接用于更高的输出频率并使用较小的RC对进行PWM

笔记: 应该通过编程PWM等来获得更好的质量输出信号。增加PWM频率。

经常问的问题

你可以将模拟输出写入A0〜A7吗?

最简洁的答案是不。附带的额外的内部硬件连接到这些引脚是AC。这些引脚要么:
  • 模拟输入(多路复用到ADC)。
  • 数字输入。
  • 数字输出。

你可以使用数字I / O的模拟引脚吗?

是的:见上文。

请记住将每个PIN的Pinmode设置为输入或输出或在使用它们作为数字I / O时输入或input_pullup。

如何输出真正的Arduino模拟输出电压。

请参阅上面的页面使用Arduino PWM或使用 MCP4725.

什么'S VALICWRITE和DIGTIALWRITE之间的区别。

在此处使用的AmplaMwrite创建了一种数字PMW信号,当平滑时,导致模拟输出电压。

数号输出5V(逻辑1)或0V(逻辑零),并且介于任何两者之间。



新的! 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.

回到顶部