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.
您好 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 项目
我开始使用 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