【MSP430】MSP430F5529关于ADC12模数转换介绍

以下资料大部分来源于《MSP430x5xx and MSP430x6xx Family User Guide》

一、ADC12_A模块介绍

1、12位ADC核心
  ADC核心将模拟输入转换为它的12位数字表示,并将结果存储在转换存储器中。核心使用两个可编程和可选择的电压电平(VR+和VR -)来定义转换的上限和下限。输入通道和参考电压水平(VR+和VR-)被定义在转换控制存储器。

  当输入信号等于或大于VR+时,数字输出(NADC)为全量程(0FFFh)
  当输入信号等于或小于VR-时,数字输出(NADC)为零
  NADC的转换公式为 N A D C = 4095 ∗ V i n − V R − V R + − V R − N_{ADC} = 4095 * \dfrac{V_{in} - V_{R-}}{V_{R+} - V_{R-}} NADC=4095VR+VRVinVR

  ADC12_A核心是由两个控制寄存器ADC12CTL0ADC12CTL1配置的。核心是通过ADC12ON位启用的。ADC12_A可以在不使用时关闭,以节省电能。ADC12_A控制位只能在ADC12ENC = 0时修改,只有少数例外。ADC12ENC必须设置为1才能发生转换。

2、转换时钟选择
  使用ADC12CLK作为转换时钟,并在选择脉冲采样模式时产生采样周期。ADC12_A源时钟使用由ADC12PDIV位控制的预分频器和使用ADC12SSELx位控制的分频器来选择。使用ADC12DIVx位和ADC12PDIV位,输入时钟可以从1划分为32。可能的ADC12CLK源是SMCLK、MCLK、ACLK和ADC12OSC.
  用户必须确保为ADC12CLK选择的时钟保持活动,直到转换结束。如果在转换期间删除了时钟,则操作不完成,结果无效

3、ADC12_A输入和多路复用器
  模拟输入多路复用器选择12个外部模拟信号和4个内部模拟信号作为转换通道,输入多路复用器是一种先断开后闭合的类型,以减少由于通道切换而导致的输入-输入噪声注入(参见图28-3)。输入多路复用器也是一个T类型开关,以最小化通道之间的耦合。未被选中的通道与ADC隔离,中间节点连接到模拟接地( A V s s AV_{ss} AVss),以便杂散电容接地以消除串扰。
  ADC12_A使用电荷再分配方法。当输入端内部开关时,开关动作可能会引起输入信号的瞬变。这些瞬变过程在引起错误的转换之前衰减并稳定下来。
在这里插入图片描述

4、模拟端口选择
  ADC12_A输入通过数字端口引脚复用。当模拟信号应用到数字闸时,寄生电流会从VCC流到GND。当输入电压接近栅极的过渡电平时,就会产生这种寄生电流。禁用端口引脚的数字部分消除寄生电流以便减少整体电流消耗,PxSEL.y位提供了禁用端口引脚输入和输出缓冲区的能力。

5、参考电压发生器
  ADC12_A模块有一个单独的参考模块(REF),它向ADC12_A提供三个可选择的电压等级:1.5 V、2.0 V和2.5 V。这些电压中的任何一个都可以在引脚内部和外部使用正参考电压(VREF+)。内部 A V c c AV_{cc} AVcc也可以作为参考电压使用。
  MSP430F54xx设备的ADC12_A模块(非a类)不使用REF模块,只有两个可选择的电压电平,1.5 V和2.5 V。内部 A V c c AV_{cc} AVcc也可以作为参考电压。
  在具有REF模块的设备上,电压参考设置可以由REF模块或ADC12_A模块控制。

6、自动电源关闭
  ADC12_A是专为低功耗应用程序设计的。当ADC12_A不主动转换时,内核将自动禁用,并在需要时自动重新启用。需要时自动启用MODOSC,不需要时自动禁用。

7、扩展样本模式
  当ADC12SHP = 0时,选择扩展样本模式。SHI信号直接控制SAMPCON并定义采样周期 t s a m p l e t_{sample} tsample的长度。当SAMPCON为高电平状态时,采样是活跃的。与ADC12CLK同步后,由高到低的SAMPCON转换开始,如图:
在这里插入图片描述

8、脉冲样本模式
  设置ADC12SHP = 1,选择脉冲采样模式。SHI信号用于触发采样定时器。ADC12CTL0中的ADC12SHT0x和ADC12SHT1x位控制定义SAMPCON采样周期 t s a m p l e t_{sample} tsample的采样计时器的间隔。采样定时器保持SAMPCON置高与AD12CLK同步为一个程序间隔 t s a m p l e t_{sample} tsample
总的采样时间是 t s a m p l e t_{sample} tsample加上 t s y n c t_sync tsync,参见图:
在这里插入图片描述
  ADC12SHTx位以ADC12CLK的4倍倍数选择采样时间。ADC12SHT0x选择ADC12MCTL0到ADC12MCTL7的采样时间。ADC12SHT1x选择ADC12MCTL8到ADC12MCTL15的采样时间。

9、样品时间考虑
  当SAMPCON = 0时,所有Ax输入均为高阻抗。当SAMPCON = 1时,所选的Ax输入可以在采样时间 t s a m p l e t_{sample} tsample期间建模为RC低通滤波器,如图:
在这里插入图片描述

R s R_s Rs R i R_i Ri的电阻大小影响 t s a m p l e t_{sample} tsample
下式可用于计算n位转换的最小采样时间 t s a m p l e t_{sample} tsample,其中n等于分辨率的位:
   t s a m p l e t_{sample} tsample>( R s R_s Rs + R i R_i Ri) x ln ( 2 n + 1 ) (2^{n+1}) (2n+1) x C i C_i Ci + 800 ns

  内部多路复用器的输入电阻 R i R_i Ri(最大值1.8KΩ)和入端电容 C i C_i Ci(最大值为25pF)串联,为了进行精确的n位转换,电容 C i C_i Ci的端电压 V c V_c Vc必须充电提升到源电压的 1 2 \dfrac{1}{2} 21LSB范围,其中n是所需的解析度。

R i R_i Ri C i C_i Ci的值代入,则有例如,对于12位解析度的采样来说,如果 R s R_s Rs是10kΩ,采样时间 t s a m p l e 必 须 大 于 3.46 u s t_{sample}必须大于3.46 us tsample3.46us,式为:
   t s a m p l e t_{sample} tsample>( R s R_s Rs + 1.8 kΩ) x ln ( 2 n + 1 ) (2^{n+1}) (2n+1) x 25 pF + 800 ns

10、转换内存
  有16个ADC12MEMx转换内存寄存器来存储转换结果。每个ADC12MEMx都配置了一个相关的ADC12MCTLx控制寄存器。SREFx位定义基准电压,INCHx位选择输入通道。ADC12EOS位定义了当使用顺序转换模式时序列的结束。当ADC12MCTL15中的ADC12EOS位未被设置时,序列从ADC12MEM15滚动到ADC12MEM0。

  CSTARTADDx位定义了第一个ADC12MCTLx用于任何转换。如果转换模式是单通道或重复单通道,CSTARTADDx将指向要使用的单个ADC12MCTLx。

  如果选择的转换模式是通道序列或通道重复序列,CSTARTADDx将指向序列中使用的第一个ADC12MCTLx位置。当每次转换完成时,一个软件不可见的指针会按顺序自动递增到下一个ADC12MCTLx。该序列继续进行,直到处理ADC12MCTLx中的一个ADC12EOS位,这是最后一个被处理的控制字节。

  当转换结果被写入一个选定的ADC12MEMx时,在ADC12IFGx寄存器中设置相应的标志。

ADC12MEMx有两种格式可用于存储转换结果:
  当ADC12DF=0时,转换得到无符号,右对齐的数据结果
  当ADC12DF=1时,转换得到左对齐的二进制补码类型数据结果
在这里插入图片描述

11、ADC12_A转换模式
  ADC12_A有四种运行模式,由CONSEQx位选择(见下表),所有状态图都假定为12位分辨率设置
                                转换模式总结

ADC12CONSEQx模式操作
00单通道单次转换模式单个通道转换一次
01序列通道转换模式(自动扫描)一个通道序列转换一次
10单通道多次转换模式单个通道被反复转换
11序列通道多次转换模式(重复扫描)重复转换一系列通道

12、单通道单次转换模式
  单个通道被采样和转换一次。ADC结果被写入由CSTARTADDx位定义的ADC12MEMx。下图显示了单通道单转换模式的流程。当ADC12SC触发一个转换时,连续的转换可以由ADC12SC位触发。当使用其他触发源时,ADC12ENC必须在每次转换之间切换。
在这里插入图片描述

13、通道序列模式(自动扫描模式)
  在通道序列模式(也称为自动扫描模式)中,对通道序列进行一次采样和转换。从CSTARTADDx位定义的ADCMEMx开始,ADC结果被写入转换内存。序列结束后,ADC12EOS置位控制表示测量的通道序列结束。图28-8显示了通道序列模式。当ADC12SC触发一个序列时,通过ADC12SC位可触发连续序列。ADC12SC必须在每个序列之后被软件清除,以触发另一个序列。当使用任何其他触发源时,ADC12ENC必须在每个序列之间切换。
在这里插入图片描述

14、单通道多次转换模式
  单个通道被连续采样和转换。ADC结果被写入由CSTARTADDx位定义的ADC12MEMx。每次转换完成后都需要读取结果,因为只有一个ADC12MEMx内存被使用,并且被下一个转换覆盖。图28-9显示了重复-单通道模式。
在这里插入图片描述

15、通道重复序列模式(重复自动扫描模式)
  在这种模式下,对一系列通道进行重复采样和转换。此模式也称为重复自动扫描模式。从CSTARTADDx位定义的ADC12MEMx开始,ADC结果被写入转换内存。以设定的ADC12EOS位测量该通道后,序列结束,下一个触发信号重新启动序列。图28-10显示了通道的重复序列模式。
在这里插入图片描述

16、使用多样本和转换(ADC12MSC)位
  要将转换器配置为自动且尽可能快地执行连续转换,可以使用多个采样并转换函数。当ADC12MSC = 1, CONSEQx > 0,并且使用样本定时器时,SHI信号的第一个上升沿触发第一次转换。一旦前一个转换完成,将自动触发后续转换。SHI上的额外上升沿被忽略,直到序列在单序列模式下完成,或者直到ADC12ENC位在重复单通道或重复序列模式下被切换。使用ADC12MSC位时,ADC12ENC位的功能不变。

17、停止转换
  停止ADC12_A活动取决于操作模式。停止主动转换或转换序列的方法有:
   1、在单通道单转换模式下重新设置ADC12ENC会立即停止转换,结果是不可预测的。对于正确的结果,在清除ADC12ENC之前轮询检测“忙”位直到重置。
   2、在重复单通道操作中重置ADC12ENC将在当前转换结束时停止转换器
   3、在序列或重复序列模式中重置ADC12ENC将在序列结束时停止转换器
   4、任何转换模式下可以通过设置CONSEQx = 0和重置ADC12ENC位立即停止转换,但是转换数据不可靠。
   如果没有设置ADC12EOS位的情况下选择序列模式,重新设置ADC12ENC位并不会停止序列。要停止序列,首先选择单通道模式,然后复位ADC12ENC

18、接地和噪音的考虑
  与任何高分辨率ADC一样,应遵循适当的印刷电路板布局和接地技术,以消除接地回路、不必要的寄生效应和噪声。

  ADC的返回电流流过与其他模拟或数字电路相同的路径时,就形成了地回路。如果不小心,这个电流会产生小的不必要的偏移电压,可以增加或减少ADC的参考电压或输入电压。图28-12中所示的连接防止了这种情况。

  除了接地之外,由于数字开关或开关电源造成的电源线路上的纹波和噪声峰值也会破坏转换结果。为了达到高精度,TI推荐使用单点连接的单独模拟和数字地平面的无噪声设计。

在这里插入图片描述

19、ADC12_A中断
  ADC12_A有18个中断源:
   ADC12IFG0 ~ ADC12IFG15
   ADC12OV —> ADC12MEMx溢出中断
   ADC12TOV —> 转换时间溢出中断

   AD12IFGx位是在其对应的ADC12MEMx内存寄存器加载一个转换结果时设置的。如果设置了相应的ADC12IEx位和GIE位,就会产生一个中断请求。ADC12OV条件发生在一个转换结果被写入任何一个ADC12MEMx之前的转换结果被读取。ADC12TOV条件是在当前转换完成前请求另一个采样和转换时生成的。直接存储器存取被触发后转换在单通道转换模式或完成一个序列的通道转换在顺序的通道转换模式与相应的ADC12IE位复位。

  • 5
    点赞
  • 86
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
要在MSP430微控制器上使用软件触发ADC采样,您可以按照以下步骤进行操作: 1. 配置ADC模块:首先,您需要配置ADC模块的相关寄存器以使其工作。这包括设置参考电压、采样时钟、输入通道等。您可以使用MSP430ADC配置寄存器来完成此操作。 2. 配置IO口:如果您希望手动触发ADC采样,您需要配置一个IO口来作为触发信号的源。您可以使用MSP430的GPIO配置寄存器来设置IO口的功能和方向。 3. 软件触发:一旦ADC模块和IO口配置完成,您可以编写代码来实现软件触发ADC采样。以下是一个示例代码片段,演示了如何使用软件触发ADC采样: ```c #include <msp430.h> void ADC_init() { // 配置ADC模块 ADC10CTL0 = ADC10SHT_2 | ADC10ON; // 采样保持时间和使能ADC模块 ADC10CTL1 = INCH_0; // 选择输入通道A0 ADC10AE0 |= BIT0; // 允许A0通道的模拟输入 // 配置IO口 P1DIR &= ~BIT3; // 将P1.3设置为输入 P1IE |= BIT3; // 允许P1.3的中断 P1IES |= BIT3; // 设置P1.3的中断触发边沿(下降沿) } void ADC_start() { ADC10CTL0 |= ENC | ADC10SC; // 使能ADC模块和开始采样 } #pragma vector=PORT1_VECTOR __interrupt void PORT1_ISR(void) { if (P1IFG & BIT3) // 检查P1.3的中断标志位 { ADC_start(); // 手动触发ADC采样 P1IFG &= ~BIT3; // 清除P1.3的中断标志位 } } int main(void) { WDTCTL = WDTPW | WDTHOLD; // 停用看门狗定时器 ADC_init(); // 初始化ADC模块和IO口 __bis_SR_register(GIE); // 允许全局中断 while (1) { // 主循环 } } ``` 在上面的示例代码中,我们初始化了ADC模块和IO口,并设置了P1.3作为软件触发信号的输入引脚。当P1.3引脚的中断触发边沿(下降沿)被检测到时,中断服务程序会调用ADC_start()函数来启动ADC采样。 请注意,上述代码仅提供了一个基本的示例,您可能需要根据您的具体应用做出适当的修改。此外,确保根据您的MSP430型号和器件文档进行适当的配置和初始化。 希望这可以帮助您实现MSP430上的软件触发ADC采样!如果您有任何进一步的问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值