Hi all :
我在调试SAR-ADC的时候发现采样频率跟我实际测试结果存在差异。
我的ADC配置如下:
ADC clock rate : 16.667MHZ
scan duration : 1.08 us
采样频率 : 925926 sps
通过函数Cy_SAR_StartConvert开始采样后,启动定时器,延时500 us后,通过函数Cy_SAR_StopConvert结束采样,我在ADC的ISR 函数中加入了全局变量来统计进入ISR的次数。
延时800us ,ISR计数 371次 ,也就是采样了371次。按照scan duration =1.08 us,理论上应该1.08us就要采样一次,那正常应该是采样740次才对。
为啥相差大呢?还是我对采样次数理解有问题?谢谢!
已解决! 转到解答。
Hi:
我觉得您这里对于scan duration的理解有误,这里的scan duration是说他么转换时间需要这么长,根据手册描述,PSOC6 ADC转换时间最少需要18个clock,而您现在ADC 主时钟为16.667MHZ,那么他的转换时间就是=18/16.667 us,大约就是1.079us一次,所以这里的时间并不是采样周期,而是采样一次所需要的时间。
下面是ADC 中断处理函数代码:
void ADC_ISR_Callback(void)
{
uint32_t intr_status;
intr_status = Cy_SAR_GetInterruptStatus(ADC_US_SAR__HW);
if ((intr_status & CY_SAR_INTR_EOS_MASK) == CY_SAR_INTR_EOS_MASK)
{
ADCresult = ADC_US_GetResult16(0);
Num_Adc++;
}
Cy_SAR_ClearInterrupt(ADC_US_SAR__HW, intr_status);
(void)Cy_SAR_GetInterruptStatus(ADC_US_SAR__HW);
}
Hi:
我觉得您这里对于scan duration的理解有误,这里的scan duration是说他么转换时间需要这么长,根据手册描述,PSOC6 ADC转换时间最少需要18个clock,而您现在ADC 主时钟为16.667MHZ,那么他的转换时间就是=18/16.667 us,大约就是1.079us一次,所以这里的时间并不是采样周期,而是采样一次所需要的时间。
你的意思是 采样周期=转换时间+读取时间, 1.08 us 只是转换时间,没有包括读取时间?
Hi:
应该是这样的,这个1.08us应该只是转换的时间,并不包括,读取的时间在里面,这个我去找人确认下,给你回复,但基于我现在的理解是这样的。
这样,你明天打电话给我,我跟你好好说一下,我们这个ADC-SAR的原理是什么样子的。我电话:13917979037
好的呀。刚才我做了个实验,把 ADC ISR里面读取数据的代码ADCresult = ADC_US_GetResult16(0); 注释掉后, 800us 采样次数是 740 ,与理论值是一样的
800 us / 1.08us = 740, 代码如下:
void ADC_ISR_Callback(void)
{
uint32_t intr_status;
intr_status = Cy_SAR_GetInterruptStatus(ADC_US_SAR__HW);
if ((intr_status & CY_SAR_INTR_EOS_MASK) == CY_SAR_INTR_EOS_MASK)
{
//ADCresult = ADC_US_GetResult16(0);
Num_Adc++;
}
Cy_SAR_ClearInterrupt(ADC_US_SAR__HW, intr_status);
(void)Cy_SAR_GetInterruptStatus(ADC_US_SAR__HW);
}