在之前的章节中,我们测试了读取引脚的模拟值,ADC功能在实际中用途十分广泛,在本章中,我们把一些常用的ADC函数做一个详细的说明。
ADC单次模式API与Arduino的analogRead功能完全兼容。当您调用analogRead或analogReadMillivots函数时,它会返回所请求引脚上的单个转换结果。
函数:analogRead
作用:用于获取指定引脚ADC原始值(未校准)
格式:uint16_t analogRead(uint8_t pin);
参数:
pin -引脚编号
返回:ADC引脚原始值
函数:analogReadMillivolts
作用:此函数将返回以毫伏为单位的值(已校准)。
格式uint32_t analogReadMilliVolts(uint8_t pin);
参数:
pin -引脚编号
返回:以毫伏为单位的值
函数:analogReadResolution
作用:该函数用于设置analogRead返回值的分辨率。 对于除 ESP32S3 之外的所有芯片,默认值为 12 位(范围从 0 到 4095),ESP32S3 的默认值为 13 位(范围从 0 到 8191)。 当设置不同的分辨率时,读取的值将移动以匹配给定的分辨率。
格式:void analogReadResolution(uint8_t bits);
参数:
bits -设置模拟读取分辨率(9~13)
函数:analogSetAttenuation
作用:用于设置所有通道的衰减。输入电压可以在输入到 ADC 之前衰减。 有 4 种可用的衰减选项,衰减越高,可测量的输入电压就越高。
每个芯片的可测量输入电压有所不同,详细信息请参见:ADC — Arduino-ESP32 2.0.14 documentation
格式:void analogSetAttenuation(adc_attenuation_t attenuation);
参数:
attenuation -设置衰减
ADC_ATTEN_DB_0 100 mV ~ 950 mV
ADC_ATTEN_DB_2_5 100 mV ~ 1250 mV
ADC_ATTEN_DB_6 150 mV ~ 1750 mV
ADC_ATTEN_DB_11 150 mV ~ 3100 mV
函数:analogSetPinAttenuation
作用:该函数用于设置特定引脚/ADC 通道的衰减。 更多信息,请参阅analogSetAttenuation。
格式:void analogSetPinAttenuation(uint8_t pin, adc_attenuation_t attenuation);
参数:
pin -指定引脚进行衰减设置。
attenuation -设置衰减。
函数:analogSetWidth
作用:
该功能仅适用于ESP32芯片。用于设置硬件采样位和读取分辨率。 默认值为 12 位 (0 - 4095)。 范围为 9 - 12。
格式:void analogSetWidth(uint8_t bits);
参数:
bits -设置模拟读取宽度(9~12)
ADC 连续模式
ADC 连续模式是一种 API,用于在后台对多个引脚执行模拟转换,并在转换完成后接收回调以访问结果。通过该 API,您可以在一个周期内为每个引脚指定所需的转换次数以及相应的采样率。analogContinuousRead 函数的结果是一个 adc_continuous_data_t 结构数组。这些结构包含每个引脚的原始平均值和以毫伏为单位的平均值。
函数:analogContinuous
作用:用于配置选定的引脚阵列。
格式:bool analogContinuous(uint8_t pins[], size_t pins_count, uint32_t conversions_per_pin, uint32_t sampling_freq_hz, void (*userFunc)(void));
参数:
pins[] 要设置的引脚阵列
pins_count 阵列中的引脚数量
conversions_per_pin 设置每个引脚将在每个 ADC 周期运行的转换次数
sampling_freq_hz sets ADC 的采样频率(以 Hz 为单位)
userFunc sets callback 转换完成后的回调函数(可以设置为 NULL)
返回:如果配置成功,返回 true。 如果返回 false,则发生错误或未配置 ADC 连续模式
函数:analogContinuousRead
作用:该函数用于将 ADC 连续数据读取到结果缓冲区。 结果缓冲区为 adc_continuos_data_t 数组。
typedef struct {
uint8_t pin; /*!uint8_t channel; /*! int avg_read_raw; /*! int avg_read_mvolts; /*! } adc_continuos_data_t; 格式:bool analogContinuousRead(adc_continuos_data_t ** buffer, uint32_t timeout_ms);
参数:
buffer -以 adc_continuos_data_t 格式从 ADC 读取的转换结果缓冲区。
timeout_ms -等待数据的时间(以毫秒为单位)。
返回:如果读取成功且缓冲区已充满数据,则该函数将返回 true。 如果返回 false,则读取失败,缓冲区设置为 NULL。
函数:analogContinuousStart
作用:该函数用于启动ADC连续转换。
格式:bool analogContinuousStart();
返回:如果 ADC 连续成功启动,该函数将返回 true。 如果返回 false,则启动失败。
函数:analogContinuousStop
作用:该函数用于停止ADC连续转换。
格式:bool analogContinuousStop();
返回:如果 ADC 连续转换成功停止,此函数将返回 true。 如果返回 false,则停止失败。
函数:analogContinuousDeinit
作用:该函数用于取消已经初始化 ADC 连续外设。
格式:bool analogContinuousDeinit();
返回:如果成功取消,返回 true。 如果返回 false,则取消初始化失败。
函数:analogContinuousSetAtten
作用:该函数用于设置ADC连续外设的衰减。 有关更多信息,请参阅analogSetAttenuation。
格式:void analogContinuousSetAtten(adc_attenuation_t attenuation);
参数:
attenuation -设置衰减(默认为11db)
函数:analogContinuousSetWidth
作用:该函数用于设置硬件分辨率宽度。 所有芯片的默认值为 12 位 (0 - 4095)。该功能仅对 ESP32 芯片有效,因为它允许设置分辨率范围为 9-12 位。
格式:void analogContinuousSetWidth(uint8_t bits);
参数:
bits -设置宽度。