单片机AD转换时间的理论推算与测量

描述

转自 | 瑞萨嵌入式小百科

AD转换时间指的是完成一次AD转换所需的时间,即从启动信号开始到转换结束并得到稳定的数字输出量所需要的时间。

不知道大家平时使用ADC有没有关注转换时间的问题,这里结合瑞萨单片机为例给大家讲述一下AD转换时间的理论推算与测量。

RA2L1硬件手册(R01UH0853EJ0130)第1067页的电气特性“Table 41.35 A/D conversion characteristics (1) in high-speed A/D conversion mode (2 of 2) ”中的内容,看到RA2L1的AD转换时间在对应的测试条件下最小值为0.67us。

AD转换

那么如果用户测试AD转换时间,是否能得到跟硬件手册中电气特性的最小AD conversion time (0.67us) 一样的结果呢?

基于上述问题,我们从理论和实际两方面做了分析和测试。

理论分析

首先,基于RA2L1硬件手册中Figure 30.25和Figure 30.26, 单次扫描模式下所选通道数为n的扫描转换时间(tSCAN)可按如下方式确定:

AD转换

tSCAN = tD + tDIS × n + tDIAG + tED + tCONV × n 

tSCAN: 扫描转换时间 

tD: 开始扫描延迟时间 

tDIS: 断线检测辅助处理时间 

tDIAG 和 tDSD: 自诊断A/D转换处理时间 

tCONV: A/D转换处理时间 

tED: 结束扫描延迟时间

另外,参考“Table 41.35 A/D conversion characteristics (1) in high-speed A/D conversion mode (2 of 2) ”中Note 1的内容,转换时间是采样时间和比较时间的总和。也就是说,这里的转换时间指的仅仅是tCONV,而并非扫描转换时间tSCAN。测试的话测量的是扫描转换时间,所以不能以“最小0.67us” 这个数值作为参考。

接下来,我们先从理论上计算一下如何获得扫描转换时间的最小值。参考RA2L1硬件手册,选取公式中每一项的最小值和其对应的条件。

tSCAN = tD + tDIS × n + tDIAG + tED + tCONV × n 

tD = 2 PCLKB + 4 ADCLK: All other, Synchronous trigger. But this does not include the time consumed in the path from timer output to trigger input. 

tDIS = 0: Setting in ADNDIS[3:0] (initial value = 0x00) × ADCLK

tDIAG = 0: DIAGST[1:0] = 00 (Self-diagnosis not executed after power-on.)

tCONV = 0.67us:Operation at PCLKD = 48 MHz, High-precision channel, ADCSR.ADHSC = 0, ADSSTRn.SST[7:0] = 0x0A, ADACSR.ADSAC = 1

tED = 2 PCLKB + 3 ADCLK: PCLKB to ADCLK frequency ratio = 1:2

从而确定测试条件为:PCLKD (ADCLK) = 48MHz、PCLKB = 24MHz(PCLKB不能超过32MHz)、快速转换模式、高速A/D转换模式、AN000(高精度通道)、不使用自诊断。

基于以上测试条件,计算AD扫描转换时间的理论值为:

AD转换

实际测试

对照着AD扫描转换时间的理论值为0.90us,进行了以下3个测试:

1使用GPT+ELC+ADC+中断方式进行测试

● GPT:设置周期为50ms,允许GTIOC0A输出

● ELC:设置GPT的计数值发生Overflow时触发AD转换

● ADC:设置为Single Scan模式,选择Channel 0,允许扫描完成时产生中断,在中断Callback函数中翻转端口(P301:H→L)

AD转换

通过以上波形,可以得到实际测试结果为7.31us。根据测试情况进行分析,这个时间包括了中断响应时间和端口执行时间。

采用在中断中翻转端口测量ADC转换时间,结果较理论值长很多,接下来使用DTC来翻转端口。

2使用GPT+ELC+ADC+DTC方式进行测试

● GPT:设置周期为50ms,允许GTIOC0A输出

● ELC:设置GPT的计数值发生Overflow时触发AD转换

● ADC:设置为Single Scan模式,选择Channel 0,允许扫描完成时产生中断

● DTC:触发源为每次ADC扫描结束,进行DTC传送,即翻转IO口(P301:H→L)

AD转换

通过以上波形,可以得到实际测量结果为1.36us (VS理论值0.67us)。根据测试情况进行分析,这个时间包括DTC的响应时间和端口执行时间。

单独测试端口执行时间,大概为0.21us。

AD转换

采用单次转换测量ADC转换时间,结果较理论值偏长,接下来使用多次转换测量总时间,用来消除端口翻转时间的影响。

3使用GPT+ELC+ADC+DTC方式(500次)进行测试

● GPT:设置周期为50ms,允许GTIOC0A输出

● ELC:设置GPT的计数值发生Overflow时触发AD转换

● ADC:设置为Continuous Scan模式,选择Channel 0,允许扫描完成时产生中断

● DTC:触发源为每次ADC扫描结束,进行一次DTC传送,500次传送后,在中断Callback函数中,翻转IO口(P301:H→L)

AD转换

通过以上波形,可以得到实际测量结果为337.31us/500 = 0.67us (=理论值)。根据测试情况进行分析,这个时间包括DTC的响应时间、中断响应时间和端口执行时间。

这个测试结果和理论值相符,因为这个时间还包括DTC的响应时间、中断响应时间和端口执行时间,所以可以推断实际测量结果优于电气特性中内容。

最后,总结一下AD转换时间的计算和测量。

● 手册中的“0.67 μs/channel”仅仅是采样时间和比较时间的总和,并非一个通道的全部扫描转换时间。

● 在实测③的情况下,我们可以得到比较理想并且合理的结果,一次AD扫描转换时间大概为0.67us。

● 使用FSP自动生成代码的情况下,中断响应时间是比较长的,所以建议采用DTC传送数据,或者客户采用自己的ADC中断响应函数。

 

  审核编辑:汤梓红
 
打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分