This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] MSP430FR5994:如何在单通道上启用窗口比较器

Guru**** 2391845 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/983605/msp430fr5994-how-to-enable-window-comparator-on-single-channel

器件型号:MSP430FR5994

您好!

我在我们的现有项目中使用 MSP430、我们在该项目中执行测量和故障检测。

为此、我们目前使用1个通道进行电流测量、另一个通道用于电压测量。

现在、我们需要在一个通道上启用内部温度传感器。 启用后、它会将电流增加约50uA。

为了降低其电流、我想对温度传感器使用窗口比较器模式。

是否可以在不影响其他通道的情况下将 WC 用于内部温度?

如何降低电流消耗?

请共享参考代码以启用此功能。

此致、

Pradeep Lokhande

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    窗口比较器可通过相关 ADC12MCTLx 寄存器中的 ADC12WINC 启用、因此可按通道启用。 如果为多个通道设置 WINC、则由代码确定哪个通道触发比较器。

    示例 msp430fr599x_ADC12_21.c 在单个通道上演示了这一点:

    https://dev.ti.com/tirex/explore/node?node=ABi.t.SEJvbEzrKLdGbCIw__IOGqZri__LATEST

    如果看不到您的实际代码、我预计额外电流的大部分来自内部 VREF [参考数据表(SLASE54C)表5-30]。 由于所有 TLV 温度校准都是使用 VREF 完成的、因此您可能无法将其关闭。 您将节省当前用于进行比较的任何 CPU 活动时间。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    感谢您的回答。

    是否可以在不影响其他 ADC 通道的情况下打开/关闭温度传感器。 我们需要在每小时测量几秒钟的温度。 它将节省电流消耗。

    开/关需要什么配置?

    ADC 初始化例程、以供您参考。

    e2e.ti.com/.../ADC_5F00_Init.c

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    一种相当简单的策略是为温度传感器使用最后一个 MEM 寄存器(如您所做的那样)、并在最后一个和下一个 MCTL 寄存器中设置 EOS 位。 当您想要对温度进行采样时、清除下一个 MCTL 中的 EOS 位、运行 ADC 序列(一次)、然后再次设置该 EOS 位。 当您处理 DMA (目标)缓冲区时、您必须知道第三个条目是否有效(它不会改变、因此它不会是一个奇怪的值或任何东西)。

    您将需要切换 ENC 以更改 EOS 位。 我看不到您对 startConversion 的调用、但如果您使用的是 CONSEQ=3 (ADC12_B_REPEDIATE_SEQOFCHANNELS)、则需要重新启动 ADC。 [不过、如果您想省电、无论如何都不应该使用 CONSEQ=3。]

    您可能能够在温度传感器读数之间关闭 TCMAP; 不过、我不知道这是否会为您节省任何费用。

    未经请求:温度传感器需要至少30us 的采样/保持时间。 使用 MODCLK (5MHz)时、64个时钟(~13us)是不够的。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    我们将使用以下方法来启动转换。

    _interrupt void TIMER0_A0_ISR (void)

    if (Modbus_on = false){
    /**触发 ADC 转换*/
    ADC12_B_startConversion (ADC12_B_base、ADC12_B_START_at_ADC12MEM0、ADC12_B_SEQOFCHANNELS);

    温度传感器的窗口比较器模式将有助于我们降低电流消耗。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    窗口比较器本身使您可以避免使用 CPU 来查看采样值。 由于您仍在查看其他两个通道、边际优势可能很小。 (在不同的应用中、例如在所有通道上使用 WINC、程序可以避免大部分时间处理任何 ADC 结果、因此好处更大。)

    由于您将 VREF 用于其他通道、因此您无法真正避免为此付出代价。 但是、

    1) 1)如果您的应用允许、您可以设置 ADC12PWRMD=1 [ADC12_B_setAdcPowerMode (ADC12_B_LOWPOWERMODE)]、这会将基准缓冲器电流削减大约一半。 [参考数据表(SLASE54C)表5-30]。 您还需要使用 ADC12_B_CLOCKDIVIDER_4 [参考用户指南(SLAU367P)第34.2.5节]、因此每次转换所需的时间为4倍(但对于温度传感器、64个时钟是可以的)。 这可能是一个值得的折衷--我会构建一个电子表格,或者只是针对两个编码情况测量它。

    2)根据用户指南第34.2.4节[我尚未在 FR5994上尝试过这种方法]如果您将 REFON=0、ADC 将为您启动 VREF -每个序列一次、因此它在批次之间关闭。 这在(第一个)转换前增加了大约40uS [参考数据表表5-30]、但如果采样速度不是很快、这可能是一个值得权衡的因素。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    我们尚未尝试选项1、因为它似乎会影响我们的测量。

    第二点、我们验证了 REFON=0和 REFON=1、而不影响任何其他 ADC 配置。 以下是观察结果:

    两个通道的正常电流消耗- 140uA。

    2.为内部温度传感器添加第3个通道并将 SH 周期时间增加至64 - 165 μ A。

    当设置 REFON=1 - 200uA 时。

    设置 REFON=0 - 165uA 时。

    查询:

    在执行 REFON 设置复位时、我们是否需要配置任何其他参数?

    2.我们能否在运行时修改 SH 时间(64周期到4周期)而不重新初始化 ADC? 因为它还可以节省20uA。

    此致、

    Pradeep Lokhande

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    1) 1)据我所知、设置 REFON=0或=1不会影响任何其他设置。 具体而言、不必多次设置 REFVSEL。 您只需记住、它不会立即启动(40-80us)。

    2) 2)要更改 SHT0、您(仅)需要清除、然后围绕更改设置 ADC12ENC [SHT0在用户指南图34-14]中标记为蓝色]。  您可以在更改 MCTL1:EOS 的同时执行此操作。 这是一个相当快速且良好的序列;只需确保您仅在 ADC 空闲时执行此操作。