Announcements

Ever wondered how you could shape the future in collaboration with others? Join us at OktoberTech Asia Pacific and get inspired. Click here to sign up FREE of charge.

Tip / Sign in to post questions, reply, level up, and achieve exciting badges. Know more

PSoC™ 6 Forum Discussions

zhji_4006061
Level 3
First solution authored 10 questions asked 25 sign-ins
Level 3

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次才对。

     为啥相差大呢?还是我对采样次数理解有问题?谢谢!

  

0 Likes
1 Solution
YuZh
Moderator
Moderator 10 likes received 50 sign-ins 50 replies posted
Moderator

Hi:

我觉得您这里对于scan duration的理解有误,这里的scan duration是说他么转换时间需要这么长,根据手册描述,PSOC6 ADC转换时间最少需要18个clock,而您现在ADC 主时钟为16.667MHZ,那么他的转换时间就是=18/16.667 us,大约就是1.079us一次,所以这里的时间并不是采样周期,而是采样一次所需要的时间。

View solution in original post

0 Likes
7 Replies
YuZh
Moderator
Moderator 10 likes received 50 sign-ins 50 replies posted
Moderator

Hi:

可以看下你的代码吗?这样,我们可以借着代码进行讨论。

0 Likes
zhji_4006061
Level 3
First solution authored 10 questions asked 25 sign-ins
Level 3

下面是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);
}

0 Likes
YuZh
Moderator
Moderator 10 likes received 50 sign-ins 50 replies posted
Moderator

Hi:

我觉得您这里对于scan duration的理解有误,这里的scan duration是说他么转换时间需要这么长,根据手册描述,PSOC6 ADC转换时间最少需要18个clock,而您现在ADC 主时钟为16.667MHZ,那么他的转换时间就是=18/16.667 us,大约就是1.079us一次,所以这里的时间并不是采样周期,而是采样一次所需要的时间。

0 Likes
zhji_4006061
Level 3
First solution authored 10 questions asked 25 sign-ins
Level 3

你的意思是  采样周期=转换时间+读取时间, 1.08 us 只是转换时间,没有包括读取时间?

0 Likes
YuZh
Moderator
Moderator 10 likes received 50 sign-ins 50 replies posted
Moderator

Hi:

应该是这样的,这个1.08us应该只是转换的时间,并不包括,读取的时间在里面,这个我去找人确认下,给你回复,但基于我现在的理解是这样的。

0 Likes
YuZh
Moderator
Moderator 10 likes received 50 sign-ins 50 replies posted
Moderator

这样,你明天打电话给我,我跟你好好说一下,我们这个ADC-SAR的原理是什么样子的。我电话:13917979037

0 Likes
zhji_4006061
Level 3
First solution authored 10 questions asked 25 sign-ins
Level 3

好的呀。刚才我做了个实验,把 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);
}

0 Likes