analogWrite和digitalWrite之间有什么区别?

正如标题所述。两者之间有什么区别?

模拟写(pin,0-255) vs 数字写(pin,LOW-HIGH)

解决办法

digitalWrite将把指定的引脚设置为两种状态之一--高/低,分别相当于5v(在某些电路板上为3.3v)和接地。

analogWrite可以根据使用的输出类型而变化。

如果应用于一个PWM引脚--它将把该引脚设置为一个周期性的高/低信号,其中高信号的百分比与写入的数值成正比。 例如 -

    analogWrite(PWMpin,255)

将在100%的时间内为高电平,而

    analogWrite(PWMpin,127)

50%的时间是高电平,50%的时间是低电平。

当对DAC引脚应用analogWrite时(在一些板子上可用,如DUE 或MEGA)。 analogWrite实际上会使指定的引脚输出一个与指定的模拟值相近的电压水平。

例如,在Due上,最大电压为3.3v,默认模拟分辨率为8位-[0:255]。

    analogWrite(DACpin,255)

将导致指定的引脚输出3.3v,而-

    analogWrite(DACpin,127)

将导致指定引脚输出1.35伏电压。

评论(4)

digitalWrite将输出引脚设置为低电平或高电平(这些电压取决于处理器的Vcc 。对于Uno或Mega来说,这将是0V或5V(或接近于此)。

这里是digitalWrite (LOW)的屏幕截图。

也就是说,输出引脚是在0V。


现在是digitalWrite (HIGH)。

输出电压为5V。


analogWrite真的应该被命名为PWMwrite,因为它配置处理器的定时器来输出PWM(脉宽调制)。

让我们试试analogWrite(1)。

你可以看到电压水平大部分时间是0V,短时间内会达到5V。你还可以看到频率是490Hz,这与analogWrite的参考页所说的一样。


放大了。

输出高电平为8 µs,这正好是2048 µs的1/256,也就是定时器的周期。因此,我们的占空比为1/256(0.39%)。


让我们试试analogWrite(127) - 从0到255的一半。

现在你可以看到,输出有一半的时间是高电平,其余的时间是低电平。


让我们试试analogWrite(254)。

这与analogWrite(1)的情况相反。除了一个短暂的时间,输出一直是高电平。缩小范围。

![analogWrite (254) - zoomed][7]

现在,输出在8 µs内是*关闭的--相比之下,先前的图像是在8 µs内打开的。


analogWrite (0)digitalWrite (LOW)相同。

analogWrite (255)'与digitalWrite (HIGH)'相同。

这可以通过wiring_analog.c中的相关代码证明。

if (val == 0)
{
    digitalWrite(pin, LOW);
}
else if (val == 255)
{
    digitalWrite(pin, HIGH);
}

摘要

analogWrite基本上配置了硬件定时器来输出PWM。一旦你这样做了, 计时器硬件就会输出所要求的占空比(从0到255), 其中0是永远关闭, 255是永远打开, 而在这两者之间的某个值会给你PWM (脉冲输出).


关于定时器的更多信息,请参见我的关于定时器的页面

评论(0)

digitalWrite将引脚设置为一个高值或低值,直到再次为该引脚调用digitalWrite时,该值将一直保持在这个位置。

analogWrite将引脚设置为一个振荡值,其脉冲长度基于作为第二个参数指定的占空比。

所以。

digitalWrite (5, HIGH);    // Pin 5 goes high
analogWrite (6, 127);      // Pin 6 oscillates regularly between 0v and 5v (or 3.3v) at about 250Hz.
评论(0)