Page 1 of 1
求助:TuyaOS V3.9.0版本的SDK 采集ADC数据不准
Posted: 2024年 Jul 8日 09:25
by 13757129816
1、采集外部交流电电压,经过电阻分压后用bypass模式,原来是想开一个1ms的定时器,在定时器中断里做ADC采样,这样能保证交流波形的实时采样,实际上这样会死机,定时时间拉大就不会死机,说明1ms时间不够ADC转换处理。
2、如果ADC用连续工作模式,ADC回调函数进入几次后就不进入了
3、用户代码里1ms刷新一次LED显示,不开ADC的时候,LED不闪,开ADC就会闪,难道ADC转换时间需要很长?
3、求助:ADC转换开始到回调得到结果需要多少时间?
Re: 求助:TuyaOS V3.9.0版本的SDK 采集ADC数据不准
Posted: 2024年 Jul 8日 09:56
by 逻辑的院子
Re: 求助:TuyaOS V3.9.0版本的SDK 采集ADC数据不准
Posted: 2024年 Jul 8日 09:59
by 13757129816
Re: 求助:TuyaOS V3.9.0版本的SDK 采集ADC数据不准
Posted: 2024年 Jul 8日 09:59
by 13757129816
Re: 求助:TuyaOS V3.9.0版本的SDK 采集ADC数据不准
Posted: 2024年 Jul 8日 10:28
by 逻辑的院子
Re: 求助:TuyaOS V3.9.0版本的SDK 采集ADC数据不准
Posted: 2024年 Jul 8日 10:44
by 13757129816
OPERATE_RET timer_init(void)
{
//TUYA_TIMER_NUM_E timer_id = TUYA_TIMER_NUM_0;
uint32_t timer_args = 0x12345678;
TUYA_TIMER_BASE_CFG_T timer_cfg = {
.mode = TUYA_TIMER_MODE_PERIOD,
.cb = timer_cb,
.args = &timer_args,
};
extern OPERATE_RET tkl_hw_timer_use_event(UINT8_T enable);
tkl_hw_timer_use_event(1);
tkl_timer_init(timer_id, &timer_cfg);
tkl_timer_start(timer_id, TIMER_DELAY); // 1000us = 1ms
return OPRT_OK;
}
Re: 求助:TuyaOS V3.9.0版本的SDK 采集ADC数据不准
Posted: 2024年 Jul 8日 14:01
by Mumu_YU
芯片内部会一次采集64个adc原始数据,在采集一半的时候会上报adc中断,看下当前的采样率为多少,便可以计算出来中断具体时间,demo中的中断处理函数中会有浮点运算,会耽误时间,看你们的需求,你们需要重新写处理函数的
需要知道你们现在的应用场景是啥样的,可以提供合适的方案。
Re: 求助:TuyaOS V3.9.0版本的SDK 采集ADC数据不准
Posted: 2024年 Jul 8日 16:07
by 13757129816
我的需求是:
1、外部交流电信号通过电阻分压进入ADC采样,采样两个通道(电压、电流),每个通道每隔1ms采集一次AD值,采集100次,相当于采集5个波形,对采集到的AD值做均方根计算,再根据分压电阻乘上匹配增益,得到相应的电压值;
2、两个通道可以同时采集或分开采集。
3、一次采集完成后,间隔500ms再进行下一次采集,不断循环
Re: 求助:TuyaOS V3.9.0版本的SDK 采集ADC数据不准
Posted: 2024年 Jul 8日 16:41
by Mumu_YU
我们最大的采样率一共有320k 160k 80k 默认是320K,大概是3.125us采集一次,一次采集后中断上来后也就是半满的情况下一共32个adc数据,一共64个数据,如果你需要1ms的采样估计得使用阻塞模式然后使用定时器定时读取adc数据,保存当前读去的数据起事件去做运算。可以查看POLLING_MODE这个代码怎么实现的,但是需要注意:不能使用adc_Poilling_evt这个里面的计算了,这个里面的操作有浮点运算,你们拿到原始adc数据后自己去处理
Re: 求助:TuyaOS V3.9.0版本的SDK 采集ADC数据不准
Posted: 2024年 Jul 8日 17:04
by 13757129816
好的,我已经改成了polling模式,时间上还是来不及,估计就是您说说的浮点运算占用了,我改造下看看