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.

[参考译文] TMS320F28377D:TMS320F28377D

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1187303/tms320f28377d-tms320f28377d

器件型号:TMS320F28377D

您好!

我修改了原始示例 ADC_Ex5_SoC_Continuous、该示例将2个连续转换为1个转换。

代码如下:

Fullscreen
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
//
// Included Files
//
#include "driverlib.h"
#include "device.h"
//
// Function Prototypes
//
void configureADC(uint32_t adcBase);
void setupADCContinuous(uint32_t adcBase, uint32_t channel);
//
// Defines
//
#define RESULTS_BUFFER_SIZE 1024 //buffer for storing conversion results
//(size must be multiple of 16)
#define EX_ADC_RESOLUTION 12
// 12 for 12-bit conversion resolution, which supports (ADC_MODE_SINGLE_ENDED)
// Sample on single pin (VREFLO is the low reference)
// Or 16 for 16-bit conversion resolution, which supports (ADC_MODE_DIFFERENTIAL)
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

当我输入5kHz 正弦波并使用不同的中断源时、我看到有干扰。 我希望  ADC_setInterruptSource (adcBase、ADC_INT_number1、ADC_SOC_NUMBER15); 不应出现任何干扰、因为它会确保所有转换完成。 这是图形的屏幕截图

谢谢 Vadim

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

    您好!  

    由于假期,专家不在办公室。 请在星期二之前回复。

    谢谢。

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

    您好 Vadim、

    如果所有16个 SOC 只使用1个中断、则在开始转换下一组 SOC 之前、没有足够的时间转换这些值。 您查看的示例提供了触发所有16个 SOC (至少2个中断)的正确方法、这样就有足够的时间在读取其他 SOC 的结果的同时转换 SOC。

    此外、作为后续说明、请使用 Instert -> Code 方法复制和粘贴代码。 您在此处插入代码的方式会使读取变得不必要、我将无法轻松找到您所谈论的内容。

    此致、

    Omer Amir

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

    您好、Omer、

    感谢您的支持。 我知道 ADC SOC 根据轮循方法具有优先级。 我理解这一点、因为在前一个转换未完成之前、当前转换将不会开始。

    在这种情况下、分配给最后一个 SOC15的中断应触发第一个通道的第一个 SOC0? 因此,如果我的 ePWM 时基大于连续16 SOC*75 ns,我应该看不到任何干扰?

    我认为我所做的与示例相同、A2输入的示例中具有16个连续通道与4个通道之间存在差异。

    Fullscreen
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    //! This example sets up ePWM1 to periodically trigger a set of conversions on
    //! ADCA including multiple SOCs that all convert A2 to achieve oversampling on
    //! A2.
    //!
    //! ADCA Interrupt ISRs are used to read results of ADCA.
    //!
    //! \b External \b Connections \n
    //! - A0, A1, A2 should be connected to signals to be converted.
    //!
    //! \b Watch \b Variables \n
    //! - \b adcAResult0 - Digital representation of the voltage on pin A0
    //! - \b adcAResult1 - Digital representation of the voltage on pin A1
    //! - \b adcAResult2 - Digital representation of the voltage on pin A2
    //!
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    谢谢 Vadim

    PS 我尝试按照您的建议输入代码。

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

    您好 Vadim、

    [引用 userid="301556" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1187303/tms320f28377d-tms320f28377d/4481943 #4481943"]在这种情况下、分配给最后一个 SOC15的中断应触发第一个通道的第一个 SOC0?

    分配给 SOC 的中断将导致 SOC 触发、因此您可以使用1个中断来触发多个 SOC。 但是、代码的结构是这样的、这样中断1会触发全部16个 SOC。 当到达 ISR 或再次触发中断时、数据可能已就绪、也可能未就绪、SOC 可能没有时间在触发另一个中断之前转换结果(您可以监控中断溢出状态)。

    [引用 userid="301556" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1187303/tms320f28377d-tms320f28377d/4481943 #4481943"]因此,如果我的 EPWM 时基大于连续16 SOC*75 ns,我不应该看到任何干扰?

    如果您使用 ePWM 来触发 SOC、而不仅仅是中断或软件触发器、那么如果您使时基周期足够长、那就可以了。 但是、您拥有的代码看起来不像 ePWM 被用来触发 SOC、它看起来就像您正在使用 ADC 中断1。

    [引用 userid="301556" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1187303/tms320f28377d-tms320f28377d/4481943 #4481943"]我尝试按照您的建议输入代码[/quot]

    我已重新编排了您的原始帖子、以便更易于查看。

    此致、

    Omer Amir

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

    谢谢 Omer、

    因此 、如果我在中使用 ADC_TRIGGER_SW_ONLY

    Fullscreen
    1
    2
    ADC_setupSOC(adcBase, ADC_SOC_NUMBER0, ADC_TRIGGER_SW_ONLY,
    (ADC_Channel)channel, acqps);
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    我必须定义触发 SOC ADC_INT_SOC_TRIGGER_ADCINT1的中断

    Fullscreen
    1
    2
    ADC_setInterruptSOCTrigger(adcBase, ADC_SOC_NUMBER0,
    ADC_INT_SOC_TRIGGER_ADCINT1);
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    在原始示例中、16个 SOC 被分成2组、每个组由不同的中断触发。

    谢谢 Vadim

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

    您好 Vadim、

    是的、没错;原始示例使用了2组中断并使用 ADCINT1来触发一组 SOC、但这是因为使用1个中断不会在该中断再次触发之前提供足够的时间来转换结果。 如果使用 ePWM 或 CPU 计时器等触发器、则应能够将周期设置为足够长、以便能够转换结果(但在一定程度上、这将不会 尽可能快速连续地转换结果、 因为在延长转换时间时、您将丢失值)。
    此致、
    Omer Amir
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    感谢 Omer 的快速响应!

    Vadim