1.ADC的采样时间窗口:决定了AD采样时候采样脉冲的宽带,必须要有一定的宽度,AD才能完成采样和转换,否则可能还没有转换完成,采样信号消失,那么结果就不可能正确了。采样窗是控制采样开关的闭合时间,后面接的是S/H采样保持器,可以这么认为,把采样保持器看做相当于一个电容,采样开关闭合时给电容充电,但充电需要一定的时间才能充满稳定,这个时间就由采样窗来定。保持好后,这个信号就可以很好的反映被采样信号,然后由AD converter 转换为数字量。
2.2812片内ADC采样时间计算(作参考)
1)序列采样模式(SMODE = 0)
[attach]12497[/attach]
Td(从事件触发到采样的延迟时间) = 2.5Tc;
TSH(采样保持/读取宽度) = (1 + Acqps) * Tc;
Td(sch_n)(第一个结果出现在结果寄存器的延迟时间)= 4Tc;
Td(sch_n+1)(后续结果出现在结果寄存器的延迟时间) = (2 + Acqps) * Tc;
完成一个SEQ总的耗时:
T = [(2.5 + 1 + Acqps + 4 + N(2 + Acqps)] * Tc = [2N + 7.5 +(N + 1)Acqps]Tc;其中Tc为采样时钟周期,N为MAX_CONV;
本人ADC配置为:Acqps = 1;ADCCLK = 7.5Mhz;双序列发生器模式,SEQ1,最大通道数为8(MAX_CONV = 7,即N = 7);
计算结果为:T = 4us;
级联序列发生器模式时,计算结果类推。
2)同步采样模式(SMODE = 1)
[attach]12498[/attach]
此模式下Td及TSH与前种模式相同,而:
T(schA0_n)(A通道第一个结果出现在结果寄存器的延迟时间) = 4Tc;
T(schB0_n)(B通道第一个结果出现在结果寄存器的延迟时间) = 5Tc;
T(schA0_n+1)(A通道后续结果出现在结果寄存器的延迟时间) = (3 + Acqps) * Tc;
T(schB0_n+1)(B通道后续结果出现在结果寄存器的延迟时间) = (3 + Acqps) * Tc;
完成一个SEQ总的耗时:
T = [(2.5 + 1 + Acqps + 5 + N(3 + Acqps)] * Tc = [3N + 8.5 +(N + 1)Acqps]Tc;其中Tc为采样时钟周期,N为MAX_CONV;
按上述ADC配置:Acqps = 1;ADCCLK = 7.5Mhz;双序列发生器模式,SEQ1,最大通道数为8(MAX_CONV = 7,即N = 7)
计算结果为:T = 5us;
3.调试ADC时要确保参考电压ADCLO接地或连接到确定的电压,避免悬空,否则会出现“幽灵”电压,采集不到真实的电压信号。
4.将ADC在RAM中的调试的程序,移到Flash中时要注意将ADC初始化函数中的DELAY_US(ADC_usDELAY)函数从Flash中提前搬到RAM中,否则程序无法执行。