Page 1 of 2
【已解决】按外设示例ad采樣的数据一直不准,要怎么解决?
Posted: 2022年 Dec 14日 13:44
by wqvbdcb123
下面示示例代码,按这个原封不动的代码,采集的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;
}
Re: 按外设示例ad采樣的数据一直不准,要怎么解决?
Posted: 2022年 Dec 14日 16:46
by chaser
从代码上看,是没什么问题的。 麻烦提供下你当前使用的sdk版本信息。确认下是不是特殊品类使用的sdk,有个传感使用的sdk,adc采样电压范围是0-3.3v。且adc的采样误差和芯片供电电压直接相关。
Re: 按外设示例ad采樣的数据一直不准,要怎么解决?
Posted: 2022年 Dec 14日 21:42
by wqvbdcb123
SDK: ty_iot_sdk_bk7231nl_BK7231NL_2.3.1-beta.14. 芯片供电是3.1V左右,ADC (P23)口的电压用万用表测试出电压是1.5左右,现在实际1200(1.2V左右)。
Re: 按外设示例ad采樣的数据一直不准,要怎么解决?
Posted: 2022年 Dec 15日 08:06
by chaser
你的sdk是传感品类特殊分支。adc需要采集误差小,要求模组供电电压一定是3.3v, 同时采样范围变为0-3.3v。 采样值转换成电压值公式改为:voltage = (float)adc_value * 3300 / 4096;
Re: 按外设示例ad采樣的数据一直不准,要怎么解决?
Posted: 2022年 Dec 15日 08:23
by wqvbdcb123
因为我们产品是两节碱性电池供电,给模组的电压最大3.1V左右,有办法将模组内部ADC的参考电压变为2.4V左右吗,我们想满足电压值公式:voltage = (float)adc_value * 2400 / 4096。
Re: 按外设示例ad采樣的数据一直不准,要怎么解决?
Posted: 2022年 Dec 15日 08:54
by wqvbdcb123
电池低功耗温湿度类产品,是不是我们用的SDK: ty_iot_sdk_bk7231nl_BK7231NL_2.3.1-beta.14不对?若不对要下载哪个版本的SDK开发?,谢谢!
Re: 按外设示例ad采樣的数据一直不准,要怎么解决?
Posted: 2022年 Dec 16日 18:05
by chaser
如果需求要求 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 不兼容。
Re: 按外设示例ad采樣的数据一直不准,要怎么解决?
Posted: 2022年 Dec 18日 20:09
by wqvbdcb123
bk7231nl sdk 下载地址:https://maven.tuya-inc.top/nexus/conten ... 0.5.tar.gz 这个下载不了?能否直接发给我吗?
Re: 按外设示例ad采樣的数据一直不准,要怎么解决?
Posted: 2022年 Dec 19日 18:37
by 愚者千虑必有一得
Re: 【已解决】按外设示例ad采樣的数据一直不准,要怎么解决?
Posted: 2022年 Dec 20日 00:21
by wqvbdcb123