请教下关于T3模组ADC0内部通道的问题

Wi-Fi 设备、蜂窝设备、WuKongAI、开发板、TuyaOS 移植等


Post Reply
a93749
Posts: 16

关于t3 ADC0内部通道 我看iot开发平台中技术文档提到里的内部通道是11,但是没有写明内部通道的稳压值是多少,麻烦告知一下。
还有为什么adc测试出来的电压好像是adc脚上实际电压的两倍。


Tags:
chaser
Posts: 94

Re: 请教下关于T3模组ADC0内部通道的问题

目前 T3 ADC0 已经给内部使用了,外部不能使用。我们自己测试没有出现采样值为实际值的2倍情况。 麻烦提供下你们调用adc的代码,我们先看下。

a93749
Posts: 16

Re: 请教下关于T3模组ADC0内部通道的问题

chaser 2025年 Jul 28日 14:00

目前 T3 ADC0 已经给内部使用了,外部不能使用。我们自己测试没有出现采样值为实际值的2倍情况。 麻烦提供下你们调用adc的代码,我们先看下。

SDK版本是3.11.24,用了两个1MΩ电阻分压,并了一个100nf,adc管脚是模组的adc脚。

Code: Select all

#define GPIO_OUT_PIN 24
#define ADC_NUM TUYA_ADC_NUM_0
#define ADC_CHANNEL_BAT 1
#define SAMPLE_COUNT 10
#define STABILIZATION_DELAY_MS 50  // 增加稳定等待时间
#define SAMPLE_INTERVAL_MS 20      // 采样间隔

STATIC INT_T bat_detection(VOID_T) {
    TY_OBJ_DP_S obj_dp = {0};
    INT32_T adc_samples = 0;
    INT32_T total_adc = 0;

// 配置ADC仅使用外部通道
STATIC TUYA_ADC_BASE_CFG_T sg_adc_cfg = {
    .ch_list.data = (1 << ADC_CHANNEL_BAT),
    .ch_nums = 1,
    .width = 12,
    .mode = TUYA_ADC_CONTINUOUS,
    .type = TUYA_ADC_EXTERNAL_SAMPLE_VOL,
    .conv_cnt = 1,
};

// 初始化GPIO控制mos打开采样电路
TUYA_GPIO_BASE_CFG_T out_pin_cfg = {
    .mode = TUYA_GPIO_PUSH_PULL,
    .direct = TUYA_GPIO_OUTPUT,
    .level = TUYA_GPIO_LEVEL_LOW
};
tkl_gpio_init(GPIO_OUT_PIN, &out_pin_cfg);

// 开启MOS管前确保初始状态为低
tkl_gpio_write(GPIO_OUT_PIN, TUYA_GPIO_LEVEL_LOW);
tal_system_sleep(10);  // 确保MOS管完全关闭

// 开启MOS管为分压电路供电
tkl_gpio_write(GPIO_OUT_PIN, TUYA_GPIO_LEVEL_HIGH);

// 初始化ADC并注册低功耗管理
tkl_adc_init(ADC_NUM, &sg_adc_cfg);
lpmgr_register(TY_LP_PWM);  // 防止低功耗影响采样

// 增加稳定等待时间,确保分压电路稳定(根据1MΩ电阻和电容调整)
tal_system_sleep(500);  // 初始稳定时间

// 多次采样取平均
for (INT_T i = 0; i < SAMPLE_COUNT; i++) {
    // 采样前额外稳定时间(针对1MΩ大电阻)
    tal_system_sleep(STABILIZATION_DELAY_MS);
    
    tkl_adc_read_single_channel(ADC_NUM, ADC_CHANNEL_BAT, &adc_samples);
    total_adc += adc_samples;
    
    TAL_PR_DEBUG("Sample %d: %d", i+1, adc_samples);
    tal_system_sleep(SAMPLE_INTERVAL_MS);
}
INT32_T avg_adc = total_adc / SAMPLE_COUNT;

// 清理资源 - 先关闭MOS管再释放ADC
tkl_gpio_write(GPIO_OUT_PIN, TUYA_GPIO_LEVEL_LOW);
//lpmgr_unregister(TY_LP_PWM);
tkl_adc_deinit(ADC_NUM);
lpmgr_unregister(TY_LP_PWM);  // 防止低功耗影响采样
// 计算电压(电源3.3V 假设为参考电压,12位ADC)
   float voltage = avg_adc* 3.3f / 4096 ;
}
a93749
Posts: 16

Re: 请教下关于T3模组ADC0内部通道的问题

chaser 2025年 Jul 28日 14:00

目前 T3 ADC0 已经给内部使用了,外部不能使用。我们自己测试没有出现采样值为实际值的2倍情况。 麻烦提供下你们调用adc的代码,我们先看下。

部分日志
[01-01 08:00:00 ty D][411][tuya_app_main.c:461] Sample 1: 3522
tkl_adc_to_pin_func adc:1,25
[01-01 08:00:00 ty D][411][tuya_app_main.c:461] Sample 2: 3552
temp_code:32 - adc_code:543 - adc_trend:[14]:556->[15]:533
tkl_adc_to_pin_func adc:1,25
[01-01 08:00:01 ty D][411][tuya_app_main.c:461] Sample 3: 3518
tkl_adc_to_pin_func adc:1,25
[01-01 08:00:01 ty D][411][tuya_app_main.c:461] Sample 4: 3516
tkl_adc_to_pin_func adc:1,25
[01-01 08:00:01 ty D][411][tuya_app_main.c:461] Sample 5: 3516
tkl_adc_to_pin_func adc:1,25
[01-01 08:00:01 ty D][411][tuya_app_main.c:461] Sample 6: 3516
tkl_adc_to_pin_func adc:1,25
[01-01 08:00:01 ty D][411][tuya_app_main.c:461] Sample 7: 3514
State: ASSOCIATED -> 4WAY_HANDSHAKE
程控电源输出的2.9v 这个3514*3.3/4096=2.84v左右 ,但是我是在adc管脚上进行了分压。

chaser
Posts: 94

Re: 请教下关于T3模组ADC0内部通道的问题

你把分压电阻改为小于100k 测试试试。
由于内部adc电阻是1M, 外部还使用1M电阻分压。导致采样周期太长,会出现采样不准情况。

a93749
Posts: 16

Re: 请教下关于T3模组ADC0内部通道的问题

chaser 2025年 Jul 29日 10:13

你把分压电阻改为小于100k 测试试试。
由于内部adc电阻是1M, 外部还使用1M电阻分压。导致采样周期太长,会出现采样不准情况。

一样的状态,我先手动除个2吧,这个模组我反复拆装焊接可能出问题,搞完别的再回头换一个,目前就是/2的状态数据比较准确。
还有模组手册里写的推荐adc管脚用1M电阻,如果手册有错误的话希望早点改正。下面是手册摘出来的原文

Code: Select all

ADC 口输入电平最大值为 3.25V,外部分压电阻建议使用 MΩ 级别,同时靠近 ADC 口放置对地 100nF 电容滤波
Post Reply