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.

[FAQ] [参考译文] [常见问题解答] MSP430F67791A:EMDC 在100ms 内需要计量数据

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/936001/faq-msp430f67791a-metering-data-required-within-100-ms-with-emdc

器件型号:MSP430F67791A
主题中讨论的其他器件:EVM430-F6779TUSB3410MAX3232MSP-ISO

您好 James、

很抱歉在多次尝试后再次返回此讨论/问题。现在查看一些替代解决方案。

1)无法在100mSec 时间内使用 TI 库( SLAA577G)获得所需的结果

2) 2) 如果我转至 TI 的新 EMDC 库,您(或 TI 团队)能在100毫秒内帮助获得结果。

    需要反向功率检测+电压、电流、频率、PF 和功率计量。

3)查看关键时序要求,您是否有符合上述要求的任何应用程序代码(没有任何库... 只是想它能更快地获得结果。可能是我错了!!)

此致、

ARS

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

    这是一种将您的工程资源解放给芯片供应商的创新方法。

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

    您好、ARS、

    如果您使用单相配置、则100ms 内的结果应该是可能的。 几个月前、我在 i20xx 上进行了测试、并通过对 EMDC 生成的'hal_adc.c'文件进行单次更改来实现逐周期更新。 这部分可以通过250k 波特的高默认波特率实现。

    假设您的标称交流电源频率为50Hz。 此外、让我们假设您的采样率为4096个样本。 将采样率除以交流电源频率可得出每个交流电源周期的样本数。 即~81.92个样本或82个完整样本。 因此、如果您需要逐周期更新、则需要更改'hal_adc.c'中的更新限制以在82个样本后触发。

    如果未连接交流电源(例如未检测到过零),则 else if()是2秒后的超时,用于报告结果。  gEmSWConfig.algorithmConfig->mainNomFreq 等于默认为4096的采样率、但取决于 EMDC 中选择的采样率。 这允许更新通常每隔1秒进行一次。 将 gEmSWConfig.algorithmConfig->mainNomFreq 更改为82个样本将导致~20ms 的更新速率、小于100ms。 显然、您可以在两个、三个或四个周期后调整要报告的样本数。

    原始代码

    if (gemSWResult.phaseMetrologyPing[EM_PH_A_IDX]->cycleCount =gEmSWConfig.algorithmConfig->mainFreq)
    {
    phaseDataReady |= HAL_ADC_PHASE_DATA_READY;
    EM_perDataChunk (&gEmSW_END_EM_FAST_END_ENABLE_END_ENABLE_ENABLE_ENABLE_ENABLE_ENABLE_ENABLE_ENABLE_ENABLE_ENABLE_ENABLE_ENABLE_ENABLE_ENABLE_ENABLE_ENABLE_ENABLE_ENABLE_ENABLE_ENABLE_ENABLE_ENABLE_ENABLE_ENABLE_ENABLE_ENABLE_ENABLE_ENABLE_ENABLE_ENABLE_ENABLE_ENABLE_ENABLE_ENABLE_ENABLE_ENABLE_ENABLE_ENABLE_ENABLE_ENABLE_EN
    
    
    
    
    
    

    修改了代码

    if (gemSWResult.phaseMetrologyPing[EM_PH_A_IDX]->cycleCount = 82)
    {
    phaseDataReady |= HAL_ADC_PHASE_A_DATA_READY;
    EM_perDataChunk (&gEmult_SW_Lib_Resume_Handle *){&Emult_ADC_PH_FAST_END_END_ENABLE_ENABLE_ENABLE_ENABLE_ENABLE_ENABLE_ENABLE_ENABLE_SWEM_ENABLE_ENABLE_ENABLE_ENABLE_ENABLE_ENABLE_ENABLE_ENABLE_ENABLE_ENABLE_ENABLE_ENABLE_ENABLE_ENABLE_ENABLE_ENABLE_ENABLE_ENABLE_ENABLE_ENABLE_ENABLE_ENABLE_ENABLE_ENABLE_ENABLE_ENABLE_ENABLE_ENABLE_ENABLE_ENABLE
    
    
    
    
    
    

    此致、

    James

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

    您好 James、

    感谢您的支持。

    [引用 user="James Evans 的说法]如果您使用单相配置、则可以在100ms 内得到结果。 几个月前、我在 i20xx 上进行了测试、并通过对 EMDC 生成的'hal_adc.c'文件进行单次更改来实现逐周期更新。 这部分可以通过250k 波特的高默认波特率实现。[/QUERP]

    是的、我将其用于单相应用。您的测试结果听起来不错!

    由于计量部分是 我的应用项目的一部分,因此将新的 emdc 库重新移植到原始项目需要一些时间。

    是否有方法从 EMDC 源代码创建库文件、将此库添加到主 IAR 项目中并使用特定 API 获取仪表数据。

    Rgds、

    ARS

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

    您好、args、

    [引用 user="ARS"]由于计量部分是 我的应用程序项目的一部分,因此需要一些时间才能将新的 emdc 库重新移植到原始项目。

    是的、这是可以理解的。 在执行该操作时、我建议保留一个仅包含自动生成代码的"黄金"EMDC 项目。 这样、如果您需要调试(比较)移植项目中的代码、您就有一个可靠的参考。

    [引用 user="ars"]是否有方法可以从 EMDC 源代码创建库文件,将此库添加到主 IAR 项目中,并使用某些 API 获取仪表数据。

    这应该是可能的。 我担心它会增加一些开销或复杂性、这些开销或复杂性无法轻松调试(无论如何、首先)。

    [常见问题解答]使用 CCS v5为 MSP430项目创建库

    如何在 IAR Workbench 中为 MSP430创建库

    此致、

    James

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

    尊敬的 James:

    感谢您的支持。

    [引用 user="James Evans 的说法]在执行此操作时、我建议保留一个仅包含自动生成代码的"黄金"EMDC 项目。 这样、如果您需要调试(比较)移植项目中的代码、您就有一个可靠的参考。

    好主意。我通常采用这种方法。 我当然也会这样做。

    谢谢与 Rgds、

    ARS

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

    您好、ARS、

    听起来不错。

    此致、

    James

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

    [引用 user="James Evans "]我建议保留一个仅包含自动生成代码的"黄金"EMDC 项目

    我开始使用 EMDC 库、目标是获得计量参数<100 msec 的更新。仅为 MSP430F67791A 器件生成代码、保持1个电压和1个电流(PHASE_A)通道、采样频率= 4096 Hz、OSR = 256、
    SMCLK = 16.777MHz
    I m、使用 IAR 编译代码。
    对于 EMDC 代码练习,我使用的是相同的定制板(HW),其中基于 SLAA577库的计量代码工作正常。
    为了保持简洁、我没有像在日期那样将主应用程序代码合并到 emdc 生成的代码中。 当我单步执行代码时,代码会在
    函数调用中卡在无限循环中...void UCS_initFLL (uint16_t fsystem、uint16_t 比率)....在这里正在检查 DCOFFG。 

    while (HWREG8 (UCS_BASE + OFS_UCSCTL7_L)& DCOFFG)
    {
    //清除 OSC 标志
    HWREG8 (UCS_BASE + OFS_UCSCTL7_L)&=~(DCOFFG);
    
    //清除 OFIFG 故障标志
    HWREG8 (SFR_BASE + OFS_SFRIFG1)&&~OFIFG;
    } 
    您能不能就我可能出错的地方提出建议。 
    
    接下来
    ,我的测量信号频率为40Hz 至70Hz。
    在 EMDC GUI 的“高级参数”下,有参数 IIR 最大频率和 IIR 最小频率。为什么需要? 如何选择这些频率? 您能详细解释一下吗?
    在我的测量信号频率下、这些参数是什么。 
    
    在 EMDC GUI 的“基本参数”下,有 AC 电源频率可供选择。我选择了50Hz。生成的代码是否可以在40–70Hz 的信号频率范围内工作?
    
    谢谢、Rgds、
    ARS 

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

    您好 ARS、

    [报价用户="ARS"]我使用的是相同的定制板(HW)[/报价]

    我假设您在 EVM430-F6779上看不到该问题。 我怀疑这是晶体故障(XT1)、但您可以在   《MSP430x5xx 和 MSP430x6xx 系列用户指南》的 UCS 模块失效防护运行部分中阅读可能导致 DCOFFG 被置位的其他内容以及如何正确配置 XT1。

    [引用 user="ARS]EMDC GUI 中“高级参数”下有参数 IIR 最大频率和 IIR 最小频率。为什么需要? 如何选择这些频率? 您能详细解释一下吗? 在我的测量信号频率下、这些参数是什么。 [/报价]

    这是您期望的输入频率上限和下限。 有关更多详细信息、请参阅 EMDC 技术指南

    [引用 user="ARS"]在 EMDC GUI 的“基本参数”下,可以选择交流电源频率。我选择了50Hz。生成的代码是否可以在40–70Hz 的信号频率范围内工作?

    基本参数下的频率是预期的标称输入频率。 IIR 最大值和最小值定义了频率范围。 如果增大该范围、则需要增大查找表大小以在这些输入频率范围内保持精度。 有关更多详细信息、请参阅 EMDC 技术指南

    此致、

    James

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

    尊敬的 James:

    谢谢。

    [引用 user="James Evans 的说法]我假设 您在 EVM430-F6779上看不到此问题。 我怀疑这是晶体故障(XT1)、但您可以在   《MSP430x5xx 和 MSP430x6xx 系列用户指南》中的 UCS 模块失效防护操作部分中阅读可能导致 DCOFFG 置1的其他内容以及如何正确配置 XT1。[/QUERP]

    否 它不是晶振故障(XT1)。 如前所述、我在同一定制板上运行基于 SLA577g 的旧代码、运行良好。未设置 DCOFFG。

    只有 EMDC 生成的代码卡在 DCOFFG 上。

    [引用 USER="James Evans ] IIR 最大值和最小值定义了频率范围。 如果增大该范围、则需要增大查找表大小以在这些输入频率范围内保持精度。 [/报价]

    好的。 明白了。 这意味着 ,如果预期信号在40 - 70 Hz 范围内,IIR 最小值和最大值应为40Hz 和70Hz。

    (1)...在我的应用程序中,我想执行以下操作... 希望您能通过从 emdc 代码本身提供指导或 API 来帮助我。

    示例:R PHASE VOLT = 220V,R PHASE CURRENT = 5A,单位 pf 工作功率= 1100W, 是单相系统

    现在,我准备将电压连接到 R 相或 Y 相或 B 相中的任何一个,但从 R 相电流连接到 R 相,下面我们来考虑:

    Y 相电压= 220V、R 相 电流= 5A 。单位 pf 工作功率将相同1100 W。 也就是说、我希望在代码中将 Y 相电压进行几乎120度的相移、以便它表示 R 相电压。 然后乘以 R 相电流、使有功功率值相同。

    您能不能用任何参考/代码指导我这么做。在本例中、我的要求是将 Y 相电压相移120度。

    (2) TI EMDC 团队是否考虑将 EMDC GUI 通信接口连接到 MSP430板...更通用?据我了解,目前 EMDC GUI 使用 MSP4305529 Launchpad (HID 桥接器)+ MSP ISO 连接到 MSP430板。 但我无法使用它,因为我的定制板通过 TUSB IC 接口连接到 EMDC GUI。 即 MSP430F67791A => UART => TUSB3410 => USB 端口=> PC EMDC GUI.Hence 定制板无法连接到 GUI。

     如果接口只是一个 UART 就更好了……作为一个用户,我可以在 PC EMDC GUI 和 MSP430之间连接 max3232或 tusb IC。我相信我像我一样…… 许多其他人将会受益。感谢您的努力和支持。  

    Rgds、

    ARS

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

    您好、ARS、

    [引用 user="ARS"]

    否 它不是晶振故障(XT1)。 如前所述、我在同一定制板上运行基于 SLA577g 的旧代码、运行良好。未设置 DCOFFG。

    只有 EMDC 生成的代码卡在 DCOFFG 上。

    [/报价]

    我无法在 EVM430-F6779上重复此操作。 在 EMDC 中、我将 MCLK 频率更改为16、777、216Hz、生成了代码、将其导入到 CCS 中、然后对器件进行编程/调试。 如下所示、没有 DCOFFG。 同样、我怀疑您的问题源于您的定制板、也许是 XT1晶振。 例如、SLAA577代码使用 XT1DRIVE_3、而 EMDC 代码使用 XT1DRIVE_0。 您可能需要根据您的设计调整这些内容。

    此致、

    James

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

    您好、ARS、

    您的最后两个问题在您的初始问题范围之外徘徊。 我将在这里简要介绍一下这些问题、但如果您想进一步讨论这些问题、您需要为他们制定一个新的主题。

    [引用 user="ARS"]您能否指导我使用任何参考/代码来实现这一点。在这种情况下、我只需要将 Y 相电压相移120度。

    预加载只会调整几度、因此您需要使用整个采样延迟。 这些在'hal_adc.c'中的每相 SD ADC ISR 中实现。 在'hal_adc.c'中搜索"样本对齐变量"。 对于50Hz 的输入信号和4096Hz 的采样率、每个周期的采样数为4096/ 50 =每个周期的81.92个样本。 每个周期代表360度。 漂移120度、这是1/3周期、因此这是电压和电流之间~27.3个完整样本的漂移。 不过、请记住、每个样本的移位量取决于输入频率!

    [引用 user="ARS]* 如果接口只是一个 UART 就更好了...然后作为用户,我可以在 PC EMDC GUI 和 MSP430之间连接 max3232或 tusb IC。我相信我像... 许多其他人将会受益。感谢您的努力和支持。  [/报价]

    选择使用 USB HID 而非 CDC 是有意的、因此用户无需担心安装 CDC 所需的平台特定驱动程序。 EMDC GUI 仍可与您的定制板配合使用。 只需将 UART RX 和 TX 引脚连接到 MSP-ISO 板(当然还有电源和接地)。 请记住、您可以使用 EMDC 技术指南中的协议部分中描述的命令数据包、使用 PC 上的串行终端通过 UART 控制电路板。

    此致、

    James

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

    James、

    好的、您已经尝试复制了。。。 结束时的工作。谢谢。

    [引用 user="James Evans 的说法] 我无法在 EVM430-F6779上重复此操作。 在 EMDC 中、我将 MCLK 频率更改为16、777、216Hz、生成了代码、将其导入到 CCS 中、然后对器件进行编程/调试。 如下所示、没有 DCOFFG。 同样、我怀疑您的问题源于您的定制板、也许是 XT1晶振。 例如、SLAA577代码使用 XT1DRIVE_3、而 EMDC 代码使用 XT1DRIVE_0。 您可能需要根据您的设计调整这些内容。

    这可能是一个问题。但理论上这两种解决方案都应该能够工作、因为我的定制板上的晶振频率和3.3V 已经足够好了。无论如何...对于我的情况、它通过替换   SLAAXT_Start (XT1DRIVE_0、UCS_XCAP_0) 中生成的 EMDC 代码577_TurnOnLFXT1 (UCS_XT1_DRIVE_0、UCS_XCAP_0)<=。

    静态空 hal_system_ClockInit (uint32_t mclkFreq)
    {
    PMM_setVCore (PMM_CORE_LEVEL_3);
    
    // UCS_TurnOnLFXT1 (UCS_XT1_DRIVE_0、UCS_XCAP_0);//注释
    
    LFXT_Start (XT1DRIVE_3);//取自 SLAA577g 库
    
    UCS_initClockSignal (
    UCS_FLLREF、
    UCS_XT1CLK_SELECT、
    UCS 时钟分频器1);
    
    UCS_initClockSignal (
    UCS_ACLK、
    UCS_XT1CLK_SELECT、
    UCS 时钟分频器1);
    
    UCS_initFLSettle (
    mclkFreq/1000、
    mclkFreq/32768);
    } 

    此致、

    ARS

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

    James、

    感谢您的参与

    [引用用户="James Evans 的说法]您的最后两个问题在您的初始问题范围之外徘徊。 我将在这里简单地介绍一下这些问题、但如果您想进一步讨论这些问题、您需要为他们制定新的主题。

    好的。已理解。如果需要更多地讨论 这2个问题,我将用单独的主题回来。

    [引用 user="James Evans 的值]预加载仅调整几度、因此您需要使用整个采样延迟。 这些在'hal_adc.c'中的每相 SD ADC ISR 中实现。 在'hal_adc.c'中搜索"样本对齐变量"。 对于50Hz 的输入信号和4096Hz 的采样率、每个周期的采样数为4096/ 50 =每个周期的81.92个样本。 每个周期代表360度。 漂移120度、这是1/3周期、因此这是电压和电流之间~27.3个完整样本的漂移。 但是、请记住、每个样本的移位量取决于输入频率![/quot]

    让我将这个概念应用于我的具体要求。

    [引用 user="James Evans 的说法]选择使用 USB HID 而不是 CDC、因此用户无需担心安装 CDC 所需的平台特定驱动程序。 EMDC GUI 仍可与您的定制板配合使用。 只需将 UART RX 和 TX 引脚连接到 MSP-ISO 板(当然还有电源和接地)。 请记住、您可以使用 EMDC 技术指南中的协议部分所述的命令数据包、使用 PC 上的串行终端通过 UART 控制电路板。[/quot]

    了解了..TI 对 HID 而不是 CDC 的偏好。但它需要额外的套件/电路板。正如您所说的、它仍然可以在 UART 上工作...让我尝试一下我的设置:

    [定制板] MSP430F67791A - UART <=>TUSB3410 <==>USB-PC [ EMDC GUI ]。 希望它能正常工作。

    现在回到我原来的问题:

    有关 EMDC 库的 plz 注释,我使用的是与 SLAA577G 库完全校准且功能正常的同一定制板。

    我尝试通过调试模式校准使用 EMDC 代码编程的电路板。

    根据您在之前的帖子中的建议,我已修改 hal_dc.c 中 的代码部分,该部分将按以下方式触发相位数据就绪:

    if (gEmSWResult.phaseMetrologyPing [EM_PH_A_IDX]->cycleCount ==328)//数据值为80毫秒,50Hz 电源=> 82个样本,80毫秒数据=> 328个样本计数
    {
    phaseDataReady |= HAL_ADC_PHASE_A_DATA_READY;
    em_perDataChunk (&gEmSWConfig、(EM_SW_Lib_Result_Handle *)&gEmSWResult、EM_PH_A_IDX);
    }
    否则(gEmSWResult.phaseMetrologyPing[EM_PH_A_IDX]->sampleCount >(1 FREEM_SAMPLING_Q_Hz)
    
    phaseDataReady |= HAL_ADC_PHASE_A_DATA_READY;
    em_perDataChunk (&gEmSWConfig、(EM_SW_Lib_Result_Handle *)&gEmSWResult、EM_PH_A_IDX);
    } 

    并在 校准过程中修改了.voltageSF、.currentSF、.activePowerSF、.reactivePowerSF、.phaseCorrection。  我有以下看法:

    注入电压= 220V AC,I = 1A,PF = 1

    校准后,我的产品读数为 Volt = 219.9 V AC,Current = 0.99Amp,PF = 1,Active Power = 219 W,View Power = 220 VA。

    然后我进行相位校准,PF =0.5 (角度60度),V& I 与上述相同。但这次意外的是,视在功率发生了变化。PF = 0.5时的读数为215 VA。它不应受功率因数变化的影响。

    要更正它,如果将.phaseCorrection 从0更改为255,则不会获得 PF = 1和0.5的要求结果  

    问题可能出在哪。哪个文件和代码段... 我应该寻找解决方案。

    谢谢和 Rgds

    ARS

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

    您好、ARS、

    [报价用户="ARS"]我尝试通过调试模式校准使用 EMDC 代码编程的电路板。[/quot]

    调试模式意味着什么? 您是指使用 EMDC GUI 的校准模式吗?

    [引用 user="ars"]并在 校准过程中修改了.voltageSF、.currentSF、.activePowerSF、.reactivePowerSF、.phaseCorrection。

    您是如何执行校准的? 我强烈建议使用 EMDC GUI 执行校准。 完成后、您可以将其保存到信息存储器中、也可以保存 EMDC 项目以更新生成的代码中的校准值。 如果您未保存 EMDC 项目、则在下次执行该操作时不会生成更新的校准值。

    使用 EMDC GUI 执行校准后、您可以记下校准因数、然后在定制代码中手动更改这些因数。

    [引用 user="ARS"]

    注入电压= 220V AC,I = 1A,PF = 1

    校准后,我的产品读数为 Volt = 219.9 V AC,Current = 0.99Amp,PF = 1,Active Power = 219 W,View Power = 220 VA。

    [/报价]

    此处提供了详细信息。 感谢您的分享。

    [引用 user="ARS"]然后我进行了相位校准,PF =0.5 (角度60度),V& I 与上述相同。但奇怪的是,这次视在功率发生了变化。PF = 0.5时的读数为215 VA。它不应受功率因数变化的影响。

    实际上、视在功率取决于有功功率和无功功率。 如果相位校准未正确完成、则无功功率将不正确、这会影响视在功率。 这也会影响功率因数。

    [引用 user="ARS"]

    要更正它,如果将.phaseCorrection 从0更改为255,则不会获得 PF = 1和0.5的要求结果  

    问题可能出在哪。哪个文件和代码段... 我应该寻找解决方案。

    [/报价]

    如果您在定制电路板上使用 EMDC GUI 和由 EMDC 生成的代码并执行增益和相位校准、则 PF = 0和 PF = 1时的结果应该是正确的。 如上所述、校准完成后、您可以保存 EMDC 项目、重新生成代码并查看更改了什么。 对于增益、比例因子会发生变化。 对于相位校准、预加载(分数延迟)和缓冲器偏移/指针(整个采样延迟在软件中完成)将发生变化。

    但愿这对您有所帮助。

    此致、

    James