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.

[参考译文] TMS320F28379D:来自 CPU1和 CPU2的控制 ADC

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/942646/tms320f28379d-control-adc-from-cpu1-and-cpu2

器件型号:TMS320F28379D

您好!

实际上、我正在尝试使用您的双 CPU Delfino Launchpad 之一来控制电力驱动器。为此、我正在利用 Matlab Code Composer、因此我在 Simulink 中进行编程。

我的常规实际方法是在 CPU1上实现速度控制、并实现电流控制 CPU2。 当然、这将通过 IPC 接口进行通信。

对于速度控制、我有一个5kHz ePWM 中断、该中断生成一个 SOCA 和 SOCB、可将6个霍尔传感器的值读取到 ADC 上。

考虑到 ADC-A 模块被多次使用、SOC 序列相应地增加。 另一方面、ADC-B 和 ADC-C 仅抽头一次、因此在 SOC0上读取这两个值。

这是由 CPU1完成的、它工作正常。 如下所示。

如前所述、我打算控制 CPU2上的电流。 我使用中断 ePWM7以45kHz 的频率启动例程。 在例程内部、下面的 PWM 1-2-3模块也以45kHz 的频率进行切换、生成各自的 SOCA 和 SOCB 来读取 ADC 模块 B 和 C 上的电流

我现在尝试同时测试霍尔传感器的电流控制和采样。

第一张图片中的霍尔传感器始终可以成功读取。 测试电流控制时出现问题。

电流的 PWM 模块会生成 SOCA 和 SOCB 触发器、这些触发器应从上面控制 ADC。 如果使用与来自 CPU1的霍尔传感器相同的 SOC 对它们进行采样、我最终会读取它们的值、而不是电流的值。 我理解。 不过、如果我将它们设置为使用后续 SOC 值进行采样、它们根本不会进行采样... 因此、电流控制不起作用。

足够有趣的是、如果我对霍尔传感器(来自 CPU1)的 ADC-B 和 ADC-C 进行注释、则会在 CPU2中正确地对电流进行采样。 当我尝试在同一个 CPU 上运行两个例程时,情况是一样的:它实际上可以正常工作。

是否有人对如何正确配置 ADC 以使 CPU1和 CPU2能够正确共享这些 ADC 有任何想法?

提前感谢、

帕特里西奥

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

    BTW、我尝试将第一个图像(霍尔传感器、CPU1)的 SOC 从0 - 5开始设置、然后将 CPU2的 SOC 设置为6和7、但仍然无法正常工作。

    然而、在对来自 CPU1的 ADC B 和 C 的电流进行注释时、来自 CPU2的电流控制功能仍然非常出色。

    在某种程度上,CPU1对 ADC B 和 C 的利用“阻止”了它与 CPU2的通信,我认为……

    谢谢、

    帕特里西奥

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

    帕特里西奥

    根据您的描述、我怀疑存在 CPU1/CPU2所有权问题。  对于您所描述的内容、我想确认您是否具有如下设置:

    ADC A/B/C -全部由 CPU1拥有和配置(即使对于电流控制采样也是如此)

    速度控制 PWM - CPU1

    电流控制 PWM -CPU2

    即使 ADC 由 CPU1 "拥有"、您仍可以配置 SOC、以便从 CPU2拥有的 PWM 触发电流控制。

    ADCINT 并行连接到两个 CPU、因此您只需为速度控制信号设置一组 INTS、CPU1将启用该 INTS、而为 CPU2设置另一个 INT、它将启用该 INTS。

    最后、无论 CPU 的所有权如何、两个 CPU 都可以读取 ADC 结果寄存器。  如果 ADC 结果寄存器是双端口、我不是100%、这意味着它们是否可以支持从两个 CPU 同时读取(如果转换的时序正确)、 但在最坏的情况下、读取不会丢失、只会挂起、直到另一个 CPU 读取完成。

    单个 ADC 只能有一个 CPU 来控制它们、但出于系统的目的、您可以将其视为一个 CPU 来配置 ADC。  对于 ADC 设置、通常在初始化期间设置这些设置、并且在很大程度上是单独设置的。

    请告诉我这是否能解决问题。

    最棒的

    Matthew

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

    Matthew、您好!

    感谢您的快速准确响应。

    由于您的指示、代码现在可以正常工作。 了解 ADC 只能由一个 CPU 来控制、这一点很关键。

    实际上、我尝试在不同的 CPU 上配置 ADC;也就是说、我在 CPU1上配置速度控制的 ADC A/B/C、在 CPU2上配置 ADC B/C 以进行电流控制。

    现在、我将电流控制 ADC B/C 添加到 CPU1。 它们配置成功、我可以从 CPU2读取它们、而不会出现任何问题(尚未尝试同时读取它们、即也在 CPU1中读取它们)。

    最棒的

    帕特里西奥

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

    很高兴这是个问题、并帮助您使事情正常工作。  我确实确认了 ADC 结果寄存器是双端口、这意味着您可以同时使用 CPU1和 CPU2进行访问、而不会对任一 CPU 造成任何性能影响。   

    最棒的
    Matthew