【已解决】按外设示例ad采樣的数据一直不准,要怎么解决?

Wi-Fi 设备、Wi-Fi 低功耗设备、Wi-Fi BLE 双模设备、Ethernet设备、Ethernet+Wi-Fi设备等
wqvbdcb123
Posts: 31

下面示示例代码,按这个原封不动的代码,采集的ad数据不准?电压实际是1500左右(1.5V),现在读出来ad值一直在1200左右。这问题主要出现在哪里?求高手帮忙解答?,谢谢!

应用示例
示例中初始化了 TUYA_ADC2,也就是模组上丝印为 ADC (P23) 的引脚。初始化完成后会通过日志口每隔 1S 打印一次采集到的值(实际输出的值为转换后的值,实际电压值的 1000 倍)。

#include "tuya_adc.h"
#include "tuya_driver.h"
#include "uni_log.h"

tuya_adc_t *adc_init(tuya_adc_port_t adc_port);
uint16_t get_adc_value(tuya_adc_t *adc_handle);

/**

  • @brief application initialization interface
    *
  • @param[in] none
  • @return none
    */
    void app_init(void)
    {
    return;
    }

/**

  • @brief thread demo task handle
    *

  • @param[in] none

  • @return none
    */
    void device_init(void)
    {
    uint16_t volt = 0;
    tuya_adc_t *adc0_handle = NULL;

    adc0_handle = adc_init(TUYA_ADC2);
    for (;;) {
    volt = get_adc_value(adc0_handle);
    PR_NOTICE("adc voltage: %d", volt);
    tuya_hal_system_sleep(1000);
    }

    return;
    }

/**

  • @brief init adc driver
    *

  • @param[in] adc_port: this parameter must be a value of @ref TUYA_ADCx.

  • TUYA_ADC0 --- P26

  • TUYA_ADC1 --- P24

  • TUYA_ADC2 --- P23

  • @return adc handle
    */
    tuya_adc_t *adc_init(tuya_adc_port_t adc_port)
    {
    tuya_adc_t *adc_handle = NULL;
    adc_handle = (tuya_adc_t *)tuya_driver_find(TUYA_DRV_ADC, adc_port);
    if (NULL == adc_handle) {
    PR_ERR("find adc failed");
    return;
    }

    TUYA_ADC_CFG(adc_handle, adc_port, 0);
    tuya_adc_init(adc_handle);

    return adc_handle;
    }

/**

  • @brief get adc value
    *

  • @param[in] adc_handle: adc handle

  • @return voltage value
    */
    uint16_t get_adc_value(tuya_adc_t *adc_handle)
    {
    uint16_t voltage = 0;
    uint16_t adc_value = 0;

    tuya_adc_convert(adc_handle, &adc_value, 1);
    voltage = (float)adc_value * 2400 / 4096;

    return voltage;
    }

chaser
Posts: 75

Re: 按外设示例ad采樣的数据一直不准,要怎么解决?

从代码上看,是没什么问题的。 麻烦提供下你当前使用的sdk版本信息。确认下是不是特殊品类使用的sdk,有个传感使用的sdk,adc采样电压范围是0-3.3v。且adc的采样误差和芯片供电电压直接相关。

wqvbdcb123
Posts: 31

Re: 按外设示例ad采樣的数据一直不准,要怎么解决?

SDK: ty_iot_sdk_bk7231nl_BK7231NL_2.3.1-beta.14. 芯片供电是3.1V左右,ADC (P23)口的电压用万用表测试出电压是1.5左右,现在实际1200(1.2V左右)。

Attachments
1671025184197.png
chaser
Posts: 75

Re: 按外设示例ad采樣的数据一直不准,要怎么解决?

你的sdk是传感品类特殊分支。adc需要采集误差小,要求模组供电电压一定是3.3v, 同时采样范围变为0-3.3v。 采样值转换成电压值公式改为:voltage = (float)adc_value * 3300 / 4096;

wqvbdcb123
Posts: 31

Re: 按外设示例ad采樣的数据一直不准,要怎么解决?

因为我们产品是两节碱性电池供电,给模组的电压最大3.1V左右,有办法将模组内部ADC的参考电压变为2.4V左右吗,我们想满足电压值公式:voltage = (float)adc_value * 2400 / 4096。

wqvbdcb123
Posts: 31

Re: 按外设示例ad采樣的数据一直不准,要怎么解决?

电池低功耗温湿度类产品,是不是我们用的SDK: ty_iot_sdk_bk7231nl_BK7231NL_2.3.1-beta.14不对?若不对要下载哪个版本的SDK开发?,谢谢!

chaser
Posts: 75

Re: 按外设示例ad采樣的数据一直不准,要怎么解决?

如果需求要求 adc 采样误差小,且采样范围在0-2.4v。 建议切换到 bk7231nl 平台。 该平台就是为了解决 adc 采样误差大 给传感类产品使用的芯片平台。 目前 bk7231n 没有adc 采样误差小,且采样范围在0-2.4v 的sdk。

目前使用bk7231n 这个传感分支sdk:ty_iot_sdk_bk7231nl_BK7231NL_2.3.1-beta.14 的客户,有adc 误差小需求。都是外部电路设计了升压稳压电路。

bk7231nl sdk 下载地址:https://maven.tuya-inc.top/nexus/conten ... 0.5.tar.gz

注意:bk7231nl sdk 使用要对应 bk7231nl 模组。 bk7231nl 与 bk7231n 不兼容。

wqvbdcb123
Posts: 31

Re: 按外设示例ad采樣的数据一直不准,要怎么解决?

bk7231nl sdk 下载地址:https://maven.tuya-inc.top/nexus/conten ... 0.5.tar.gz 这个下载不了?能否直接发给我吗?

wqvbdcb123
Posts: 31

Re: 【已解决】按外设示例ad采樣的数据一直不准,要怎么解决?

谢谢了!

Post Reply