所有关于电路
项目

环境光线监测:了解和实施ADC

2015年8月5日通过罗伯特Keim

第2部分“如何制作环境光监测器”系列。我们的智能环境光显示器需要数字化和分析来自光学检测器的信号,因此是时候探索EFM8的集成模数转换功能了。beplay体育下载不了

第2部分“如何制作环境光监测器”系列

推荐的水平

初学者/中级

本系列之前的文章

必需的硬件/软件

描述 数量 Digi-Key p / n
面包板 1 377 - 2094
插座跳线电线 3. 1471-1231-nd.
100kΩ电阻 2 100kqbk-nd.

项目概况

我们的智能环境光显示器需要数字化和分析来自光学检测器的信号,因此是时候探索EFM8的集成模数转换功能了。beplay体育下载不了将ADC视为一种魔术盒很诱人,只要我们在ADC控制寄存器中翻转右位,就可以将模拟电压信号无缝地转换为二进制数,但这种肤浅的方法是有风险的。在生活中的工程中,对手掌的彻底和深思熟虑的理解是对令人微妙的,避免的问题的保险。因此,该项目将作为使用EFM8的板载ADC的指南,并理解其架构和信号接口。

有多种方式将电压转换为寄存器中的一系列位。常见的ADC选项包括管道,Sigma-Delta和连续近似寄存器(SAR)拓扑。EFM8的ADC是SAR品种。这种架构可以被描述为“通用目的”。Sigma-Delta ADCS对非常高分辨率的应用有利,流水线ADC提供更高的采样率。SAR ADC适用于高分辨率和中高采样率,它们通常集成到微控制器中,因为这种架构紧凑且与低功耗设计兼容。简化的SAR功能图如下:

ADC寄存器以最高有效的位逻辑高,其余逻辑低,因此DAC最初产生是参考电压的一半的电压。根据比较器的输出,MSB保持高或设置为低电平,并且该过程通过所有位重复,直到ADC寄存器值对应于模拟输入电压。现在的最重要的事情是(1)所以ADC是同步 - 一个寄存器位,用于输入时钟的每个循环 - (2)模拟输入电压以样本和保持SAR过程中的电路。

ADC时序

考虑以下EFM8 ADC的时序图:

这里表示两种模式:“延迟跟踪模式”和“正常模式”。我们将在该项目中使用正常模式,并在本文的结论中简要讨论延迟跟踪模式。在这种情况下,通过将一个写入adbusy位(还有其他方法来启动转换)来启动转换,然后转换过程由SAR时钟控制。此图应该帮助您了解“转换率多长时间”或“最大样本率的时间有多长时间”的答案。转换过程的持续时间由SAR时钟的频率确定,并且ADC是否配置为8,10或12位,并且最大采样率受转换持续时间的影响,并且在此之前提供了多少跟踪时间转换程序开始。

跟踪时间与建立时间

EFM8仅包含一个ADC模块,但是该一个ADC模块可以通过在控制模拟多路复用器中的寄存器中设置相应的位连接到20个不同的端口引脚中的一个。您还可以将ADC连接到各种内部信号,例如地面,vDD以及集成温度传感器的输出。这个有价值的多路复用器功能大大提高了ADC的灵活性和有用性,但它也会导致一个重要的问题:安定时间。考虑以下图表代表ADC的输入阶段:

当多路复用器关闭特定引脚和ADC输入电路之间的连接时,引脚处的模拟电压开始通过多路复用电阻充电采样电容。换句话说,呈现给ADC的实际信号是由输入级的RC时间常数控制的指数增加的电压。如果在设置多路复用器后,将在SOME快速启动转换过程,转换结果将太低。如果您与ADC输入引脚串联具有显着电阻,则此问题会变得更糟糕,因为这有助于总输入电阻并使C上的电压样本向最终值上升得更慢。“稳定时间”指的是输入电压达到最终值所需要的时间,“跟踪时间”指的是你允许电压在开始转换之前稳定的时间。显然,如果你想要精确的测量,跟踪时间必须超过沉降时间。

该项目的目的是以展示ADC稳定时间的效果的方式执行模数转换。我们正在使用面包板,一些终止的跳线电线和两个电阻,如下:

跳线电线连接到扩展头上的适当引脚:

这个简单的电路给ADC发送稳定的1.65 V。通过夸大ADC输入电容的影响,大电阻有助于我们的分析。

端口I / O.

端口I / O配置与我们在上一篇文章中使用的配置相同,不同之处在于P1.1配置为模拟输入。

外设和中断

SPI配置为上一篇文章。Timer4再次用于短延迟(根据微秒的顺序),现在我们也具有长延迟的Timer3(大约为毫秒或秒)。

如果我们希望它用作Timer3的时钟源,我们需要启用集成的低频振荡器(缩写LFOSC)。

ADC已启用并配置如下:

我们使用EFM8内部生成的参考电压,设置为2.4 V:

启用S​​PI中断,因为SPI传输由SPI中断服务程序中的状态机管理。发送每个字节后的中断触发。对于这个项目,我们还可以启用“ADC0转换完成中断”。正如您可能已经猜到的那样,此中断表明ADC寄存器保存已准备好处理的新转换值。

固件

该项目中的新固件包括用于ADC的简单中断服务例程,以及我们用于控制ADC和进程转换值的“AmbientLightMonitor_Main.c”中的代码。

adcfactor =(float)adc_vref_millivolts / adc_2power10;for(delay = 0;延迟<16; delay ++){//将ADC输入连接到地面SFRPAGE = ADC0_PAGE;ADC0MX = ADCMUXIN_GND;//延迟约20 US SFRPage = Timer4_Page;tmr4l = 0;而(TMR4L <40);//将ADC输入连接到P1.1并启动转换/ *在设置多路复用器和启动转换之间的延迟,并使用每个循环迭代开始转换* / sfrpage = ADC0_Page;ADC0MX = ADCMUXIN_P1_1;sfrpage = timer4_page;tmr4l = 0; while(TMR4L < delay); SFRPAGE = ADC0_PAGE; ADC0CN0_ADBUSY = START_CONV; //wait until the conversion is complete while(ADC_CONV_COMPLETE == FALSE); ADC_CONV_COMPLETE = FALSE; //Retrieve the 10-bit ADC value, convert it to a voltage amplitude, and display the measurement SFRPAGE = ADC0_PAGE; RawADCResult = ADC0; ADCMeasurement = RawADCResult*ADCFactor; ConvertMeasurementandDisplay(VOLTAGE, ADCMeasurement); //delay for about 1 second SFRPAGE = TIMER3_PAGE; TMR3 = 0; while(TMR3 < 10000); }

AmbientLightMonitor_Part2.zip

此代码的目的是重复取样输入电压,每个取样允许在设置多路复用器和开始转换之间有更多的时间。在每次转换之前,多路复用器首先配置为接地连接,以释放C上的任何电压样本.第一个转换使用可能的最小跟踪时间,因为该转换在为P1.1设置多路复用器后立即启动。接下来的16个转换在for循环中执行,跟踪时间随着每次迭代增加约500 ns。在应用标准公式将ADC值解释为物理测量后,每个测量结果都显示在LCD上:

每个转换后都包括一秒钟延迟,以便我们有时间观察和思考测量。

分析

首先,我们将使用LTSPICE预测C上的电压样本,假设我们的电路如下:

以下是结果:

正如预期的那样,我们有一个指数增长的电压,根据电路的总体RC时间常数接近标称值1.65 V。现在让我们运行固件(参考下面的视频)。我们看到显示的测量值随着跟踪时间的增加而逐渐增加;第一个测量值是1.04 V,因为在执行CPU指令和与SAR逻辑同步时出现不可避免的延迟,电压低于这个水平。你的直觉应该是“指数增长”,因为你观察到,随着时间的推移,从一个度量到下一个度量的增量逐渐减少。如果我们绘制17个测量值,假设样本之间的时间步长为490 ns,我们得到以下结果:

看到曲线的形状对应于指数增长是令人愉快的。然而,在测量数据中,从1V到1.6V增加所需的时间约为4μs,而模拟预测640 ns。为什么主要差异?首先,模拟中使用的ADC输入阶段基于理想值,并且不考虑额外的阻抗来源。来自硅实验室的应用说明表明ADC输入级的更现实模型为5kΩ,串联,10 PF串联,而不是550Ω串联,5 PF串联。如果我们在模拟中使用这些值,则从1 v到1.6 v的时间差为1.4μs。仍然在4μs和1.4μs之间存在显着差异;为了使实验和模拟结果一致,我们需要包括ADC模块外部的寄生电容。如果我们假设从输入引脚(这是数据表中的值)和来自连接器焊盘的另外2个PF,PCB跟踪或任何其他来源,则使用以下等效电路:

外部电容不能简单地添加到采样电容中,因为当多路复用器关闭开关时,外部电容已充满。相反,C上的电压样本随着外部电容通过r升起的很快mux.,然后当C上的电压样本匹配C上的电压外部, C上的电压样本上升比之前的模拟要缓慢得多,因为可用的电流必须收取32 pF而不是10 pF。光标显示的标签在接下来的情节,电压增加所需的时间从1 3.8 V至1.6 V现在µ年代,同意与我们的实验值相当不错的大约4µ年代。

回顾

我们成功实施了EFM8的ADC功能,同时探讨了与ADC输入级的电阻和电容相关的限制。beplay体育下载不了用于我们的分压器和外部寄生电容的效果的大电阻提醒我们外部电路影响稳定时间。The EFM’s ADC includes a delayed tracking mode (mentioned above) that incorporates a tracking period of 4 SAR clock cycles, but you cannot always rely on delayed tracking mode because this 4-clock delay may not be sufficient when the external circuit contains large amounts of resistance. Thus, precise ADC measurements depend upon understanding how your circuit interacts with the ADC input stage and then ensuring an adequate delay between choosing the ADC input via the multiplexer and initiating a conversion.

视频

下一篇文章串联:环境光监测:测量和解释环境光线水平

为自己提供这个项目!BOM。

1评论
  • Wouter visee 2018年10月29日

    好文章!帮助我理解了EFM8 ADC的行为。自从本文发布以来,似乎有些寄存器名称已经发生了变化(例如,现在通过检查ADC中断标志ADC0CN0_ADINT来检查ADC是否准备好了),但是使用本文和数据表,就变得更加容易了。

    喜欢。 回复