购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

3.3 模拟I/O口的操作函数

本部分主要包括analogReference()、analogRead()、analogWrite(),以及用于ARM开发板的analogReadResolution()、analogWriteResolution()函数,下面分别介绍各自的用法。

1.analogReference()

首先,analogReference()方法设置用于指定用作analogRead()命令的参考电压的模式,该值将作为参考的最大电压。选项是:

DEFAULT:默认模拟参考电压为5V或3.3V。

INTERNAL:内部参考电压,ATmega168/ATmega328为1.1V,ATmega8/ATmega32U4为2.56V。

INTERNAL1V1:内置1.1V参考电压。

INTERNAL2V56:内置2.56V参考电压。

EXTERNAL:仅作为参考,使用在0~5V范围内,加到AREF引脚的电压。

其次,函数analogReference(ref)在Arduino M0和Arduino M0PRO上为A/D转换器设置参考电压,需要一个参数(ref),参考的可能值为:

AR_DEFAULT:在这种情况下,Vref为VDDana,VDDana为3.3V,Vref为3.3V。

AR_INTERNAL:在这种情况下Vref=1V。

AR_EXTERNAL:Vref可根据板上可用Vref引脚上的电压进行变化。注意在Vref引脚上不要超过VDDana-0.6V(3.3V-0.6V=2.7V),因为ATSAMD21G18A不能容忍高于上述值的电压,这在其数据表中有所描述。

最后,函数analogReference(ref)为Arduino Primo设置A/D转换器的参考电压,需要一个参数(ref),参考的可能值为:

DEFAULT:在这种情况下,Vref为3.3V。

INTERNAL:在这种情况下,Vref为3V。

INTERNAL3V6:在这种情况下,Vref为3.6V。

需要注意的是,在设置模拟参考值后,使用analogRead()读取的前几个数字可能不是精确的。另外,不要将任何0~5V范围内的电压应用于AREF,如果在AREF引脚上使用外部引用,则必须在调用analogRead()之前将模拟引用设置为EXTERNAL。如果AREF引脚连接到外部源,则不要使用应用中的其他参考电压选项,因为它们将短路到外部电压,并导致电路板上的微控制器永久性损坏。参考例程如下:

2.analogRead()

analogRead(pin)用于读取引脚的模拟量电压值,每读取一次需要花100μs的时间。参数pin表示所要获取模拟量电压值的引脚,返回为int型。精度10位,返回值为0~1023,其中0等于0V,1023等于5V。通常,单位的分辨率为4.9mV,但可以使用analogReference()进行更改。注意:函数参数的pin范围是0~5,对应板上的模拟口A0~A5。

3.analogWrite()

analogWrite(pin, value)函数是通过PWM(Pulse-Width Modulation),即脉冲宽度调制的方式在引脚上输出一个模拟量,图3-1为PWM输出的一般形式,也就是在一个脉冲的周期内高电平所占的比例。主要用于LED亮度控制、电机转速控制等方面的应用。

图3-1 占空比的定义

analogWrite()方法设置PWM输出引脚的值。大多数引脚上的PWM信号的频率约为490Hz。在Arduino UNO和类似的板上,引脚5和6的频率约为980Hz。Arduino LEONARDO的引脚3和11也工作在980Hz。在大多数Arduino板卡(ATmega168或ATmega328)上,此功能适用于针脚3、5、6、9、10和11。在Arduino MEGA上,它可以在2~13和44~46的引脚上工作。带有ATmega8的电路板只支持9、10和11引脚上的analogWrite(),可能的值为0~255。

注意 :在Arduino M0/Arduino M0 Pro板上A0引脚有DAC,可以通过analogWrite()使用,选择0~1023的值。

模拟I/O口的操作函数使用例程如下:

4.analogReadResolution()

analogReadResolution(bit)是Arduino DUE/M0/M0 Pro/Primo的模拟API的扩展。设置由analogRead()返回值(以位为单位)。它默认为10位(返回值为0~1023),但是在Arduino中,可以将DUE/M0/M0 Pro设置为12位(可能的返回值介于0~4095),而在Arduino Primo中可以设置为14位(可能的返回值介于0~16384之间)。由analogRead()函数返回值的分辨率(以位为单位)。可以设置高于12的分辨率,但是由analogRead()返回值将会近似,使用例程如下:

5.analogWriteResolution()

analogWriteResolution(bit)是Arduino DUE/M0/M0 Pro和Primo的模拟API的扩展。此函数设置analogWrite()函数的分辨率。它默认为8位(0~255),但是在Arduino中,可以将写入分辨率设置为12,其值为0~4095,以利用完整的DAC分辨率或PWM信号设置防止滚动。另外对于Arduino Primo,它默认设置为8位,但可以将其更改为10位或12位。使用例程如下: jJfQ8vqnWrLHBUQj+4fXo7tsxt8FLPP+zf6/Hi1On7zxEDSnUwHEDkc1nd4O7hvS

点击中间区域
呼出菜单
上一章
目录
下一章
×