본문으로 건너뛰기

ADC 주변 가이드

TKL ADC 공용영역은 감지기, 전위차계 및 다른 아날로그 근원에서 아날로그 전압을 읽습니다. 당신은 ADC 단위를 구성, 비트 마스크 채널을 활성화, 다음 원시 카운트를 읽고 밀리 볼트로 변환.

자주 묻는 질문

TuyaOpen에서 ADC 작품

TuyaOpen의 ADC는 ** 포트 + 채널 bitmask** 모델을 사용합니다.

  • ** 포트 ** ADC 단위 선택:TUYA_ADC_NUM_0= ADC1,TUYA_ADC_NUM_1= ADC2를
  • **채널 bitmask ** (cfg->ch_list.data)는 특정한 수로를 가능하게 합니다: 조금 N는 가능하게 합니다ADC_CHANNEL_N
  • Attenuation 설정ADC_ATTEN_DB_12(0-3.3 V 전 범위)
  • 참고 전압는 3300 mV이며,tkl_adc_ref_voltage_get()

기본 ADC 읽기

#include "tkl_adc.h"

#define ADC_PORT TUYA_ADC_NUM_0
#define ADC_CHANNEL 4

static OPERATE_RET read_adc(uint32_t *raw_value)
{
TUYA_ADC_BASE_CFG_T cfg = {
.ch_list.data = (1 << ADC_CHANNEL),
.ch_nums = 1,
.width = 12,
.type = TUYA_ADC_INNER_SAMPLE_VOL,
};

OPERATE_RET rt = tkl_adc_init(ADC_PORT, &cfg);
if (rt != OPRT_OK) {
return rt;
}

int32_t value;
rt = tkl_adc_read_single_channel(ADC_PORT, ADC_CHANNEL, &value);
tkl_adc_deinit(ADC_PORT);

*raw_value = (uint32_t)value;
return rt;
}

변환 원료로 전압

uint32_t raw;
read_adc(&raw);

uint32_t ref_mv = tkl_adc_ref_voltage_get(ADC_PORT);

float voltage = (float)raw * ref_mv / ((1 << 12) - 1);
TAL_PR_INFO("voltage: %.2f mV", voltage);

Multi-Channel 독서

bitmask와 동시에 여러 채널을 활성화:

TUYA_ADC_BASE_CFG_T cfg = {
.ch_list.data = (1 << 0) | (1 << 1) | (1 << 4),
.ch_nums = 3,
.width = 12,
};
tkl_adc_init(TUYA_ADC_NUM_0, &cfg);

int32_t ch0_val, ch1_val, ch4_val;
tkl_adc_read_single_channel(TUYA_ADC_NUM_0, 0, &ch0_val);
tkl_adc_read_single_channel(TUYA_ADC_NUM_0, 1, &ch1_val);
tkl_adc_read_single_channel(TUYA_ADC_NUM_0, 4, &ch4_val);

tkl_adc_deinit(TUYA_ADC_NUM_0);

ADC 채널 - GPIO Mapping

Channel-to-GPIO 매핑은 칩에 달려 있습니다. 완전한 테이블을 위한 per-chip pinmux docs를 보십시오:

회사연혁ADC1 항구ADC2 항구Pinmux 도크
사이트맵TUYA_ADC_NUM_0(GPIO 32-39)TUYA_ADC_NUM_1(GPIO 0-27)ESP32 클래식 Pinmux
사이트맵TUYA_ADC_NUM_0(GPIO 1-10)TUYA_ADC_NUM_1(GPIO 11-20)ESP32-S3 핀
모델 번호: ESP32-C3TUYA_ADC_NUM_0(GPIO 0-4)TUYA_ADC_NUM_1(GPIO 5)ESP32-C3 핀
사이트맵TUYA_ADC_NUM_0(GPIO 0-6)사이트맵ESP32-C6 핀
사이트맵TUYA_ADC_NUM_0(P0-P28)를사이트맵T5AI 주변 Mapping

ESP32 ADC2 및 와이파이 Conflict

경고

고전적인 ESP32에서 ** ADC2는 Wi-Fi가 활성화 된 동안 사용할 수 없습니다 **. ADC2 채널은 Wi-Fi 라디오와 하드웨어를 공유합니다. 애플리케이션이 Wi-Fi(most do)를 사용하는 경우, ADC1 채널만 사용할 수 있습니다.

이 제한은 ESP32-S3, ESP32-C3 또는 ESP32-C6에 적용되지 않습니다.

비트 폭 옵션

제품 정보제품 설명최대 익지않는 가치
9512 수준511
101024 수준1023
112048 수준2047
12 (과태)4096 수준4095
138192 수준8191

모든 폭은 모든 칩에 유효합니다. 제품 정보12최고의 호환성.

온도 센서

tkl_adc_temperature_get()이름 *OPRT_NOT_SUPPORTEDESP32에. 칩의 내부 온도 센서는 별도의 ESP-IDF 드라이버를 사용합니다 (temperature_sensor_*), ADC 경로가 아닙니다.

Practical 보기: 건전지 전압 감시자

저항기 분배자를 통해서 건전지 전압을 읽으십시오 (2:1 비율):

#define BATTERY_ADC_PORT TUYA_ADC_NUM_0
#define BATTERY_ADC_CHANNEL 5
#define DIVIDER_RATIO 2.0f

float get_battery_voltage_mv(void)
{
TUYA_ADC_BASE_CFG_T cfg = {
.ch_list.data = (1 << BATTERY_ADC_CHANNEL),
.ch_nums = 1,
.width = 12,
};
tkl_adc_init(BATTERY_ADC_PORT, &cfg);

int32_t raw;
tkl_adc_read_single_channel(BATTERY_ADC_PORT, BATTERY_ADC_CHANNEL, &raw);
tkl_adc_deinit(BATTERY_ADC_PORT);

uint32_t ref_mv = tkl_adc_ref_voltage_get(BATTERY_ADC_PORT);

float measured_mv = (float)raw * ref_mv / 4095.0f;
return measured_mv * DIVIDER_RATIO;
}

이름 *