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.

[参考译文] MSP430I2040:当电池电压下降时、从 LPM4.5 唤醒后、输入引脚偶尔读取高电平

Guru**** 2834805 points

Other Parts Discussed in Thread: MSP430I2040

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1630718/msp430i2040-input-pin-occassionally-reads-high-erroneusly-after-waking-up-from-lpm4-5-when-battery-voltage-is-dropping

器件型号: MSP430I2040
主题: MSP430WARE 中讨论的其他部件

您好、

我使用以下电路来检测外部开关的状态变化。 NC-NO-SUP 连接到 MSP430I2040 的输出引脚。 NC-NO-SUP 在 MCU 引导时设置为高电平。 几毫秒后(从 2 个分流电阻器捕获电压信号并生成一些悬空计算结果后)、将读取 MSP430I2040 上连接到输入引脚的 NC-NO-SENSE。 然后 MSP430I2040 将进入 LPM4.5、直到从 P2.1 上的中断唤醒。

这样的电路似乎运行正常。 但在现场使用 2 ~ 3 年后、带有此电路的 2 个器件开始发生故障。 当外部开关据称闭合时、NC-NO-SENSE 读数将为高电平。 但是、如果受影响的器件进行下电上电、当外部开关的状态当然保持闭合时、NC-NO-SENSE 将再次按预期读出低电平、当受影响的器件进行下电上电时也是如此。 进一步检查后、我发现、在开始出现错误读数之前、为受影响器件供电的电池电压开始从通常的 3.6V 下降到 3.3V、然后下降到 3.0V、这可能是由于从器件其他部分汲取的电流增加了。 之后、电池电压开始增加、并在一小时内一直保持在 3.5V、然后进一步保持在 3.6V。 在这段时间内、NC-NO-SENSE 读数保持较高、而预期读数较低。 之后、受影响的器件进行下电上电、然后 NC-NO-SENSE 开始读出低电平、并保持该状态。

我怀疑此类错误读数可能是以下几种情况的结果:1) 电池电量减弱;2) MSP430I2040 进入 LPM4.5。 从 LPM4.5 唤醒后、我假设以下代码将清除 NC-NO-SENSE 和 NC-NO-SUP 引脚的状态、然后分别将其重新初始化为输入和输出。 在此过程中是否会发生某种干扰?

我使用了相同的电路来检测带有 MSP430FR2xxx 系列 MCU 的外部开关的状态、并且没有发现这些 MCU 的异常读数。 因此、我怀疑这可能与 LPM4.5 有关。

有人能提供一些建议吗?

MSP430I2040-NC-NO-Circuit.png

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

    李志勇:

    在 LPM4.5 期间、引脚状态在唤醒时保持并保持、直到 应用代码将 LOCKLPM45 位设置为 0。

    对于您的代码流程、在解锁该寄存器之前、您是否在检查引脚状态?

    第 6.3 节:I/O 配置和 LPM4.5 低功耗模式 详细说明了从 LPM4.5 唤醒时建议的处理流程、您能否确认是否遵循此处理流程?

    如果是、您是否在意外状态期间筛选了引脚、并确认引脚上的电压与预期相符?

    此致、
    Luke

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

    尊敬的 Ledbetter 先生:

    感谢您的答复。

    1) 是的、我们确实遵循了 6.3 节中的说明、以及 MSP430Ware 中 LPM4.5 的示例。 在 MCU 启动时、运行以下代码:

        WDTCTL = WDT_ARST_1000;
        if (LPM45CTL & LPM45IFG)
        {
            // If system wakes up from LPM4.5
            // Clear GPIO state lock so PINs can be configured
            LPM45CTL &= ~LOCKLPM45;
        }
    
    	 // NC-NO-SENSE pin
        P2SEL0 &= ~BIT2;
        P2SEL1 &= ~BIT2;
        P2DIR &= ~BIT2;
        // NC-NO-SUP pin
        P2SEL0 &= ~BIT6;
        P2SEL1 &= ~BIT6;
        P2DIR |= BIT6;
        P2OUT |= BIT6;

    如果 MCU 从 LPM4.5 唤醒、我们是否需要明确将所有输入引脚的拉电阻设置为无?

    2) 由于受影响的设备在现场运行,我们还没有机会对其执行任何操作。 该计划是测量 NC-NO 和 GND 连接到的外部开关上的触点之间的电压、并查看外部开关是否实际打开、或者导线和外部开关的触点之间的电阻是否由于氧化等原因而累积  

    此致、

    ZL

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

    李先生您好:

    我建议在解锁 LPM4.5 状态之前设置 IO 配置、因为这时会有一些未配置的寄存器、但如果您不止一次地检查 IO 状态、我相信这不是您的主要问题。

    是否定期检查 IO 状态?

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

    尊敬的 Ledbetter 先生:

    您的问题的答案是“是“和“否“

    是的、因为 MSP430I2040 从 LPM4.5 定期唤醒(每秒一次)、每次唤醒 MSP430I2040 时都会检查 NC-NO-SENSE 的状态。 否、从 LPM4.5 唤醒时、仅检查一次 NC-NO-SENSE 的状态。

    此例程是通过 P2.1 上的中断从 LPM4.5 唤醒、清除 LPM4.5、然后初始化 NC-NO-SUP 和 NC-NO-SENSE、初始化 SD24 的 2 个通道、测量 2X 分流电阻器上的电压、 检查 NC-NO-SENSE 状态、然后再次进入 LPM4.5。

    此致、

    ZL

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    由于您有片刻未配置的寄存器、因此在解锁 LPM4.5 状态之前的 IO 配置

    我想到了这个未配置状态的短暂时刻。 但据我对用户手册的理解、在解锁 LPM4.5 之前我们无法对 GPIO 执行任何操作。

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

    啊,我可以看到你对这句话的解释。 这意味着、在解锁 IO 之前、对端口配置的任何调整都不会传播到引脚。 因此、如果您将 OUT 状态(例如从高电平调整为低电平)、直到解锁 LOCKLPM45、引脚状态不会改变。

    在设置 LOCKLPM45 时、端口位是可写的。

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

    请知悉、对于有兴趣的用户、它与 MSP430 或任何 MCU 无关。 堆栈~的一些用户启动了使用这些继电器开关所需的最小电流、通常为 10m Ω 100mA。 所连接~中的 R7 + R8 过大、无法使此最小电流通过 3.3k Ω 3.6V 电压下的电流。 虽然电路大部分时间都在工作、但会在电池电压下降时变得不可靠。 抱歉浪费大家的时间。