T1-CHL ADC采集问题

Wi-Fi 设备、Wi-Fi 低功耗设备、Wi-Fi BLE 双模设备、Ethernet设备、Ethernet+Wi-Fi设备等
Post Reply
feige2023
Posts: 23

【1】需求/目标:对咪头按照8K/16K采样速率进行ADC采集,每周期采样64个点
根据T1的tuyaos_demo_examples中的driver_adc例程,将adc配置修改为:

Code: Select all

#define CONFIG_BSP_ADC_CHANNEL 2
#define CONFIG_BSP_ADC_SAMPLE_TIMES 64
#define CONFIG_BSP_ADC_NUM TUYA_ADC_NUM_0

const TUYA_ADC_BASE_CFG_T adc_cfg={
.ch_list.data = 1<<CONFIG_BSP_ADC_CHANNEL,
.ch_nums = 1,
.width = 12,
.mode = TUYA_ADC_CONTINUOUS,
.type = TUYA_ADC_INNER_SAMPLE_VOL,
.conv_cnt = CONFIG_BSP_ADC_SAMPLE_TIMES,
.freq = 80000,
};

并对ADC进行测试,测试代码如下:

Code: Select all


char strbuf[1024];

STATIC VOID user_main(VOID_T)
{
OPERATE_RET ret;
uint32_t buf[CONFIG_BSP_ADC_SAMPLE_TIMES];
uint32_t v;
int len;
memset(buf,0,sizeof(buf));

v = 0;
while(1) {
ret = tkl_adc_read_single_channel(CONFIG_BSP_ADC_NUM,CONFIG_BSP_ADC_CHANNEL,&v);

if(ret !=OPRT_OK){
TAL_PR_ERR("single adc read fail:%d",ret);
}else{
TAL_PR_DEBUG("ADC value:%d",v);
}
ret = tkl_adc_read_data(CONFIG_BSP_ADC_NUM,buf,CONFIG_BSP_ADC_SAMPLE_TIMES);
if(ret != OPRT_OK){
TAL_PR_ERR("adc read fail:%d",ret);
}else{
len =0;
for(int i=0;i<CONFIG_BSP_ADC_SAMPLE_TIMES;i++){
len += snprintf(strbuf+len,sizeof(strbuf)-len,"%04d, ",buf[i]);
if(i%8==7){
len += snprintf(strbuf+len,sizeof(strbuf)-len,"\n");
strbuf[len]='\0';
TAL_PR_DEBUG_RAW("%s",strbuf);
len = 0;
}
}
if(len!=0){
strbuf[len]='\0';
TAL_PR_DEBUG_RAW("%s",strbuf);
}
TAL_PR_DEBUG_RAW("\n");
}
tal_system_sleep(1000); // 3s
}

return;
}

发现:
1】当CONFIG_BSP_ADC_SAMPLE_TIMES定义的值>=5时,读出的结果均为0,<=4时,ADC读出结果正确

问题:
1】请问需要如何配置ADC才能实现按照特定采样率、采样次数采样?(.conv_cnt只能<=4的限制如何突破?)
2】例程中TUYA_ADC_BASE_CFG_T结构体.ch_list.data 的值取1<<CONFIG_BSP_ADC_CHANNEL,其中CONFIG_BSP_ADC_CHANNEL值为2,即ADC0第二通道,根据《T1-U-HL 模组规格书涂鸦开发者平台涂鸦开发者平台.pdf》手册,只看到一个ADC,且对应为P20,想知道这个2的定义来源或ADC的引脚映射关系。

JSHANG
Posts: 65

Re: T1-CHL ADC采集问题

发现:
1】当CONFIG_BSP_ADC_SAMPLE_TIMES定义的值>=5时,读出的结果均为0,<=4时,ADC读出结果正确
每读取ADC采样的值,底层连续采样5次数据,处理后返回准确采样值,所以是5次;这里你可以连续读出64个数据,作为你每个周期的64个采样点;
如你要自己实现,你可以尝试修改tkl_adc.c 里面宏ADC_BUF_SIZE_MIN

问题:
1】请问需要如何配置ADC才能实现按照特定采样率、采样次数采样?(.conv_cnt只能<=4的限制如何突破?)
修改如下宏大小tkl_adc.c
#define ADC_BUF_SIZE_MIN 64
#define ADC_BUF_SIZE_MAX 200

2】例程中TUYA_ADC_BASE_CFG_T结构体.ch_list.data 的值取1<<CONFIG_BSP_ADC_CHANNEL,其中CONFIG_BSP_ADC_CHANNEL值为2,即ADC0第二通道,根据《T1-U-HL 模组规格书涂鸦开发者平台涂鸦开发者平台.pdf》手册,只看到一个ADC,且对应为P20,想知道这个2的定义来源或ADC的引脚映射关系。
这是芯片手册上的对应关系,支持ADC的GPIO会对应一个ADC通道号,如GPIO20对应通道2,这么来的

feige2023
Posts: 23

Re: T1-CHL ADC采集问题

非常感谢大佬。

Post Reply