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.

[参考译文] MSP430F6779:过零

Guru**** 2511985 points
Other Parts Discussed in Thread: MSP430F6779

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/987615/msp430f6779-zero-crossing

器件型号:MSP430F6779

大家好、

我在 MSP430F6779上执行一些需要过零检测的逻辑、以执行时间敏感型继电器开关。

我们还使用 EMDC 封装来进行电能计量。

如果我使用 EMDC 封装、但有一个循环直接读取 ADC 值、等待过零、是否会产生任何后果?

如何使用 EMDC 设置 ADC 的方式实现这样一个等待环路?

由于许多代码都是预编译的、因此我不能完全确定如何在 EMDC 中设置 ADC、也不知道如何等待过零以执行时间敏感型切换。

有什么想法吗?

提前感谢! 到目前为止,TI 支持论坛一直非常有帮助,我们非常感谢 TI 支持团队:)

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

    您好!  

    从 EMDC、我们无法直接为您提供实时过零信号-我假设它将用于控制三端双向可控硅开关元件。 请向 IO 中断添加 ZC 硬件检测、您可以与 ZC 信号进行时间同步。  

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

    是否有任何方法可以直接访问 EMDC 设置的 Δ-Σ 的瞬时电压值? (获取+和-值?)

    如果可能、我们不想添加额外的硬件、因此即使我们在软件中进行了一些基本的过零检测、也会走很长的路。

    我只想有一个 while 环路、等待相位1从正变为负(即使存在一些噪声、我们的应用也不必精确、只是大致接近)。

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

    为了读取瞬时值、我进行了一次尝试;是否有任何缺点需要使用它来读取瞬时值?

    int16_t  read_phaseV (uint8_t  phase)
        int16_t  RetVal
        开关(相位)
        {
            情况 0: // 相 位 A
                RetVal =  SD24_B_getHighWordResults (SD24_BASE、 SD24_B_converter_0);
                RetVal =  EM_voltageDCFilter (&gEmSWResult.phaseBGResults[EM_PH_A_IDX].vDCEsestimal、 RetVal);
                中断;
            案例 1: // B 相  
                RetVal =  SD24_B_getHighWordResults (SD24_BASE、 SD24_B_converter_1);
                RetVal =  EM_voltageDCFilter (&gEmSWResult.phaseBGResults[EM_PH_B_IDX].vDCEsestimal、 RetVal);
                中断;
            案例 2: // C 相  
                RetVal =  SD24_B_getHighWordResults (SD24_BASE、 SD24_B_converter_2);
               RetVal =  EM_voltageDCFilter (&gEmSWResult.phaseBGResults[EM_PH_C_IDX].vDCEsestimal、 RetVal);
                中断;
            默认值: break
        }
        返回  RetVal
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我修改了我的方法;

    https://software-dl.ti.com/msp430/msp430_public_sw/mcu/msp430/EnergyMeasurementDesignCenter/1_40_00_03/release/EnergyMeasurementDesignCenter_1_40_00_03/docs/api_guide/html/group__result__api.html

    int16_t EM_voltageDCFilter (int32_t * p、int16_t x)
     以下 API 用于从16位50Hz/60Hz 电源信号中移除直流内容。 所有采样应按顺序通过滤波器、以获取无直流内容的信号。 估算基于噪声形状的单极 LPF。该滤波器的截止频率设置得很低、因此其增益在45Hz 以上基本保持平坦。 这意味着最初施加信号时、滤波器可能需要几秒钟的时间才能稳定。 更多...

    我想我不会使用上述方法、因为它会破坏直流滤波器。

    如果它对其他人有所帮助、我决定进入"hal_dc.c"并使用新的全局变量来保留这些变量、后者会非常频繁地更新。

    int16_t  phAVInstSamples[3]

    (笑声)

            // 应用  电压直流 滤波器
            tempV =  EM_voltageDCFilter (&gEmSWResult.phaseBGResults[EM_PH_A_IDX].vDCEsestimate、 phAVSamples[phAWriteVIdx]);
            phAVSamples[phAWriteVIdx] = tempV;
            phAVInstSamples[0] = tempV;

    我修改了例程、在每次更新到相位 A 时设置/清除一个位、然后使用逻辑分析仪来检查时序。 它每243us 更新 PhaseA、非常一致。 这是 EMDC 编程的采样率为2048Hz、因此我相信这对于我的目的来说已经足够准确了!

    它每周期1.46%更新一次。 为了识别时钟方向与逆时针方向、这已经足够好了。

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

    您好!

    我认为您的回答是正确的。  根据 ADC 数据、您可以通过 SW 测量 ZC 并检测相电压的峰值/底部。 如果您可以接受该精度、那就好了。 为了减少检测误差、我建议添加一个 SW 迟滞比较器。