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.

[参考译文] MSP430I2041:如何监控 DVCC 是否出现电源故障

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1021622/msp430i2041-how-to-monitor-dvcc-for-power-failure

器件型号:MSP430I2041

您好,

我们还询问了另一个问题,因为我们要检测电源故障状况。
为此,我们正在监视 VMONIFG 标志,但我们将其与内部 DVCC 电压基准结合使用以进行比较。
因为有一个外部电压 m (VMONIN 引脚)基准可用,但是没有关于如何使用 DVCC 的示例。
您能指导我们如何使用它吗?
谢谢、此致、
Ashwini Jadhav
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    您应该能够使用该示例并只需更改 VMONCTL 寄存器中的 VMONLVLx 位。 无论监视的内容是什么、该功能都应该非常相似。 更多详细信息、请参阅用户指南中的第3.2.3节。

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

    我已经介绍了用户指南。

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

    以下是我们正在工作但未获得预期结果的代码。请检查并告知我是否缺少任何内容。要监控 DVCC、不需要向右添加外部电路?

    WDT_hold(WDT_BASE);
    
    // Setup the LED
    GPIO_setOutputLowOnPin(GPIO_PORT_P1, GPIO_PIN4);
    GPIO_setAsOutputPin(GPIO_PORT_P1, GPIO_PIN4);
    
    // Setup the voltage monitor to compare VMONIN to 1160mV
    PMM_setupVoltageMonitor(PMM_DVCC_2850MV);
    
    // When started up, VMON requires a settling time of 0.5us
    // MCLK = ~16MHz; 1 cycle = ~0.0625us
    __delay_cycles(10);
    
    // Setup VMONIN Pin
    GPIO_setAsPeripheralModuleFunctionInputPin(GPIO_PORT_P2,GPIO_PIN3,GPIO_TERNARY_MODULE_FUNCTION);
    
    // Enable the voltage monitor interrupt
    PMM_enableInterrupt(PMM_VMON_INTERRUPT);
    
    
    while(1) {
    // If we are not in ISR then VMONIN > 1160mV
    GPIO_setOutputHighOnPin(GPIO_PORT_P1, GPIO_PIN4);
    }
    __attribute__((interrupt(VMON_VECTOR)))
    void VMON_ISR(void) {
    // VMONIN < 1160mV, LED Off
    GPIO_setOutputLowOnPin(GPIO_PORT_P1, GPIO_PIN4);
    }

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

    您不启用全局中断。 再次查看"pMM_ex2_vmon1160mV.c"代码示例。

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

    此外、当您粘贴代码时 、请使用"插入">"代码">" C "插入代码。我已相应地更新了您的线程。 如果设置了格式、则更易于阅读、您可能有更好的机会从社区获得帮助。

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

    您好 James、

    已启用全局中断、但仍无法按预期获得结果。

    因为我们希望在发生电源故障时将数据保存到闪存中。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="472268" URL"~/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1021622/msp430i2041-how-to-monitor-dvcc-for-power-failure/3780583 #3780583"]已启用全局中断,但仍未按预期获得结果。

    结果是什么意思? DVCC 降至定义的水平以下时是否调用 VMON ISR?

    [引用 userid="472268" URL"~/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1021622/msp430i2041-how-to-monitor-dvcc-for-power-failure/3780583 #3780583"]因为我们希望在发生电源故障时将数据保存到闪存中。

    这是一个不同的主题、可以在 VMON ISR 正常工作后在后面进行介绍。 现在让我们重点讨论一下这个问题。

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

    是的,每当 DVCC 低于定义的水平时,VMON ISR 就会调用。当我们尝试硬编码值时,每当调用 VMON ISR 时,它们都会保存在内存中。

    但是、当我们尝试保存实时数据时、它无法正常工作。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="472268" URL"~/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1021622/msp430i2041-how-to-monitor-dvcc-for-power-failure/3781923 #3781923"]是,每当 DVCC 降至定义的级别以下时,VMON ISR 就会调用。

    因此 VMON 功能正常工作。 这很好、应该解决这个线程的主要问题。

    [引用 userid="472268" URL"~/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1021622/msp430i2041-how-to-monitor-dvcc-for-power-failure/3781923 #3781923"]

    当我们尝试使用硬编码值时,每当调用 VMON ISR 时,它们都会保存在内存中。

    但是、当我们尝试保存实时数据时、它无法正常工作。

    [/报价]

    与原始问题相比、这有点偏离主题。 我不明白为什么虚拟数据会被写入、而实时数据不会被写入。 它们应具有相同的类型并且工作方式相同。 您的意思是"它不起作用"? 这是否意味着实时数据不会被写入闪存、而虚拟(硬编码)值被写入闪存?

    其他意见:

    • 修改链接器文件、使其在主(而非 INFO)存储器中具有专用段、用于存储这些值。 读取存储的值后、应擦除该段、以便为 VMON ISR 中的写入做准备。
    • 使用最高 VCC 跳闸电平(3)来有更多时间备份值。 考虑使用一个外部分压器在内部跳闸电平之前触发 VMON、以便给自己更多时间。
    • 确保闪存控制器运行速度尽可能快(但小于最大值)、以最大限度地缩短 VMON ISR 中的写入时间、从而确保在断电之前写入所有数据。

    下面是一些用于在 VMON ISR 中将 RAM 中的值写入闪存的伪代码:

    /* Check for Flash Access */
    while (FCTL3 & BUSY);
    
    /* Write Energy Values in RAM to Backup Memory Segment in Flash */
    FCTL3 = FWKEY;                                          // Clear LOCK bit
    FCTL1 = FWKEY | WRT;		                            // Set WRT bit for write
    *ACTIVE_POWER_BACKUP_ptr = active_power_working;        // 32-bit value
    *REACTIVE_POWER_BACKUP_ptr = reactive_power_working;    // 32-bit value
    *APPARENT_POWER_BACKUP_ptr = apparent_power_working;    // 32-bit value
    *ENERGY_RESIDUAL_BACKUP_ptr = energy_residual_working;  // 32-bit value
    
    /* Trap for Power Loss */  
    while(1)
    {
      __no_operation();
    }

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

    您好!

    实际上,我们观察到 ISR 在上电条件下被调用,预计在断电条件下被调用。

    ~、我们已将此延迟周期增加到1000000、即 Δ t。5sec、现在当存在断电情况但 ISR 未被调用时。

    即//启动时,VMON 需要0.5us 的稳定时间
    // MCLK =~16MHz;1个周期=~0.0625us
    _DELAY_CYCLES (1000000);

    因此、请指导我们这可能是什么问题。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="472268" URL"~/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1021622/msp430i2041-how-to-monitor-dvcc-for-power-failure/3786873 #3786873"]实际上,我们观察到 ISR 在需要在断电条件下调用的上电条件下被调用。

    请记住、在加电期间通过 BORH 和 SVSL 释放欠压复位(BOR)后、器件将开始执行代码(请参阅用户指南中的图3-2)。 当 VCC 至少为2.2V 时、该器件可安全执行代码。 因此、如果在电源电压达到大于为 VMON 定义的限值(例如3.0V)之前启用 VMON (例如2.8V)、则将触发 VMON ISR。 如果您使用的是定制板、并且遵循 CVCC 与 CVCORE 的建议电容器比率10、则可以测量电源电压达到高于 VCC 的 VMON 电平的阈值所需的时间、并等待该时间、然后在代码中启用 VMON。

    此外、请确保在 MSP430i2041的 CCS 项目中包含'low_level_init.c'文件。 如果您从 Resource Explorer 导入代码示例、它也应自动导入该文件。

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

    器件型号:MSP430I2041

    您好!

    我们使用了示例代码 PMM_ex2_vmon1160mV

    针对2.850V 电平的 DVCC 进行了编辑、如下所示:

    原始代码---

    PMM_setupVoltageMonitor (PMM_VMONIN_1160MV);

    _DELAY_CYCLES (10);

    GPIO_setPeripheralModuleFunctionInputPin (GPIO_PORT_P2、GPIO_PIN3、GPIO_ternary_MODULE_Function);

    PMM_enableInterrupt (PMM_VMON_INTERRUPT);

    编辑了一个---

    PMM_setupVoltageMonitor (PMM_DVCC_2850MV);

    _DELAY_CYCLES (10);

    //GPIO_setPeripheralModuleFunctionInputPin (GPIO_PORT_P2、GPIO_PIN3、GPIO_ternary_MODULE_Function);//不使用为不使用外部电压

    PMM_enableInterrupt (PMM_VMON_INTERRUPT);

    P2.3引脚为 NC。

    将数据保存到闪存的中断例程中。

    但该代码不起作用。 不在 ISR 中将数据保存到闪存。(闪存保存功能单独测试、其工作)不进入 ISR。

    我在代码中错过了什么吗?

    Anuradha。

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

    Anuradha、您好!  

    我已经将您的主题与这个合并、因为它是同一个主题。 请参阅以上我的建议。

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

    尊敬的 James:

    我们都在同一个项目上工作,而且从很久以前就面临这个问题。

    我已经检查了您的所有建议。

    请检查上述代码中的 DVCC 是否启用 VMONIN、并在需要时建议纠正措施。

    或者、请建议 DVCC 模式的示例代码。

    我们的基本查询是、如果我们使用 DVCC、则无需为参考 VTG 连接外部电路。 对吧? (Ashwini 之前问过、但没有回答)

    请帮助我们成功运行此功能。

    谢谢、

    Anuradha。

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

    Anuradha、您好!

    [引用 userid="419231" URL"~/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1021622/msp430i2041-how-to-monitor-dvcc-for-power-failure/3789651 #3789651"]我们都在同一个项目上工作,并且从很久以前就面临这个问题。

    在此主题前面、Ashwini 确认、当 DVCC 降至所选阈值以下时、VMON ISR 正被正确触发。 此问题应该已经得到解决。 您是否曾一起讨论过这个问题?

    [引用 userid="419231" URL"~/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1021622/msp430i2041-how-to-monitor-dvcc-for-power-failure/3789651 #3789651"]

    请检查上述代码中的 DVCC 是否启用 VMONIN、并在需要时建议纠正措施。

    或者、请建议 DVCC 模式的示例代码。

    [/报价]

    您已经在使用唯一的 DriverLib VMON 代码示例"pMM_ex2_vmon1160mV.c"。 要使用 DVCC 模式、请更改 VMONCTL 寄存器中的 VMONLVLx 位并删除 P2.3作为 VMONIN 引脚的配置。 这些变化相当简单、示例并不复杂。 使用代码示例和可调电源、您应该能够轻松地对其进行测试。 LED 提供有关 VMON 状态的简单视觉反馈。

    您可以利用其他非 DriverLib 寄存器级 VMON 代码示例、例如'msp430i20xx_PMM_03.c'

    [引用 userid="419231" URL"~/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1021622/msp430i2041-how-to-monitor-dvcc-for-power-failure/3789651 #3789651"]

    我们的基本查询是、如果我们使用 DVCC、则无需为参考 VTG 连接外部电路。 对吧? (Ashwini 之前问过、但没有回答)

    请帮助我们成功运行此功能。

    [/报价]

    Ashwini 提到了用户指南的详细介绍、并且很清楚这一功能。 它描述了 VMON 如何监控"片上 DVCC 到一个指定的限值"。 "片上"意味着无需外部电路。

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

    --不是,  当 DVCC 降至所选阈值以下时,VMON ISR 没有被正确触发。 实际上、在上电期间、VMON ISR 正在触发、她假设它是在断电期间触发的。 (用于在断电期间在闪存中保存值)

    加电时,我们有了更大的延迟,现在加电时不会触发,而是在断电时也不会触发。 (我们将在 ISR 中写入闪存数据、下次从闪存读取相同数据时再加电、但没有预期结果)

    -是的,代码很简单,但在断电情况下似乎不起作用。 我们选择了 DVCC 模式、并将 VCC 电源 VTG 从3.3变为2.5V、从而保持 VMON 触发 VTG 2.85V。  它的工作原理是、通过改变电位器可以轻松地演示。 但我们的实际应用是在断电期间保存数据。 在突然断电情况下(在微秒内发生)、不是通过逐渐改变电源 VTG。 在这里、我们没有获得预期的结果。

    请建议可能的解决方案。

    谢谢  

    Anuradha。

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

    听起来 VMON 功能正常、但在断电期间、您没有足够的时间在掉电时写入闪存。 我建议通过打开 LED 或在 VMON ISR 开始时将 GPIO 驱动为高电平来确认 VMON 功能。 然后,您可以禁用中断并进入无限 while ()循环,直到断电。

    在下一个调试步骤中、我将通过切换 GPIO 并使用逻辑分析仪捕获时间来测量您的代码写入闪存所需的时间。 然后、测量 GPIO 在 VMON ISR 中保持高电平的时间。 如果您需要更多时间、请考虑增大 DVCC 上的电容以降低功率损耗率。

    尝试这些建议、并尝试缩小具体可行和无效的范围。

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

    您好 James、

    感谢您的这些建议。 我们将尝试这些调试步骤。

    Anuradha。

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

    很好。 我希望这能帮助您缩小问题的范围。