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:TMS320F28379D

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1245836/tms320f28379d-tms320f28379d

器件型号:TMS320F28379D
主题中讨论的其他器件:SysConfigC2000WARE

您好!

为什么重复采样正弦波 ADC 数值?

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

    您好 Vadim:

    我需要更多详细信息来了解您的问题。 您能否提供您的 ADC 设置代码(如果使用的话、还能提供 SysConfig 设置)? 另外、您是如何读取结果的?

    谢谢。
    伊袋

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

    __interrupt void INT_myADC0_1_ISR (void)
    {
    //
    //将最新结果添加到缓冲区中
    //

    adcAResults[index++]= ADC_readResult (ADCARESULT_base、ADC_SOC_NUMBER0);

    //
    //如果缓冲区已满,则设置 bufferFull 标志
    //
    if (results_buffer_size <= index)
    {
    索引= 0;
    bufferFull = 1;

    //
    //清除中断标志
    //
    ADC_clearInterruptStatus (ADCA_BASE、ADC_INT_number1);

    INTERRUPT_clearACKGROUP (INTERRUPT_ACK_GROUP1);


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

    尊敬的 Ibukun:

    感谢您的支持! 以上是我的 ADC 读取例程。 如何附加 syscfg 文件?

    谢谢 Vadim

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

    Vadim、

    您只需在工程目录中附加.syscfg 文件(或在文本编辑器中将其打开并粘贴其内容)。 ADC 设置是完全通过 SysConfig 完成的、还是您是否具有可以操控 SOC 配置的 C 代码?

    此致、
    伊袋

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

    尊敬的 Ibukun:

    我完全是通过 SysConfig 完成的、

    /**
    *这些参数是在生成该文件时使用的。 它们将自动应用到系统的后续
    *通过 GUI 或 CLI。 有关如何覆盖这些参数的附加信息,请使用"--help"运行 CLI。
    *@cliArgs --设备"F2837xD"-包装"F2837xD_337ZWT"-部件"F2837xD_337ZWT"-上下文"CPU1"-产品"C2000WARE@4.02.00.00 "
    *@版本{"tool":"1.15.0+2826"}
    */

    /**
    *导入此配置中使用的模块。
    */
    const adc = scripting.AddModule ("/driverlib/adc.js "、{}、false);
    const adc1 = adc.addInstance ();
    const ePWM = scripting.AddModule ("/driverlib/epwm.js、{}、false);
    const epwm1 = ePWM.addInstance();
    const epwm2 = ePWM.addInstance();

    /**
    *将自定义配置值写入导入的模块。
    */
    ADC1.$name ="myADC0";
    adc1.enableSOC =["ADC_SOC_NUMBER0"];
    adc1.soc0SampleWindow = 20;
    ADC1.enableInts =["ADC_INT_number1";
    ADC1.enableInterrupt1 = true;
    ADC1.enableInterrupt1ContinuousMode = true;
    ADC1.registerInterrupts =["1"];
    ADC1.soc0Trigger ="ADC_TRIGGER_EPWM2_SOCA";
    ADC1.adcInt1.enableInterrupt = true;

    epwm1.epwmTimebase_counterMode ="EPWM_COUNTER_MODE_UP";
    epwm1.epwmTimebase_hsClockDiv ="EPWM_HSCLOCK_DIVIDER_1";
    epwm1.$name ="myEPWM1_Input";
    epwm1.epwmActionQualifier_ePWM_AQ_OUTPUT_A_ON_TIMEBASE_ZERO ="ePWM_AQ_OUTPUT_LOW";
    epwm1.epwmActionQualifier_ePWM_AQ_OUTPUT_A_ON_TIMEBASE_PERIOD ="ePWM_AQ_OUTPUT_LOW";
    epwm1.epwmActionQualifier_ePWM_AQ_OUTPUT_A_ON_TIMEBASE_UP_CMPA ="ePWM_AQ_OUTPUT_HIGH";
    epwm1.epwmCounterCompare_enableShadowLoadModeCMPA = false;
    epwm1.epwmTimebase_period = 2199;
    epwm1.epwmCounterCompare_cmpA = 1099;
    epwm1.ePWM.$assign ="EPWM1";

    epwm2.epwmTimebase_counterMode ="epwm_counter_mode_up";
    epwm2.epwmTimebase_hsClockDiv ="EPWM_HSCLOCK_DIVIDER_1";
    epwm2.$name ="myEPWM2_ADC";
    epwm2.epwmActionQualifier_ePWM_AQ_OUTPUT_B_ON_TIMEBASE_ZERO ="ePWM_AQ_OUTPUT_LOW";
    epwm2.epwmActionQualifier_ePWM_AQ_OUTPUT_B_ON_TIMEBASE_PERIOD ="ePWM_AQ_OUTPUT_LOW";
    epwm2.epwmActionQualifier_ePWM_AQ_OUTPUT_B_ON_TIMEBASE_UP_CMPA ="ePWM_AQ_OUTPUT_HIGH";
    epwm2.epwmCounterCompare_enableShadowLoadModeCMPA = false;
    epwm2.epwmActionQualifier_ePWM_AQ_OUTPUT_A_ON_TIMEBASE_ZERO ="ePWM_AQ_OUTPUT_LOW";
    epwm2.epwmActionQualifier_ePWM_AQ_OUTPUT_A_ON_TIMEBASE_PERIOD ="ePWM_AQ_OUTPUT_LOW";
    epwm2.epwmActionQualifier_ePWM_AQ_OUTPUT_A_ON_TIMEBASE_UP_CMPA ="ePWM_AQ_OUTPUT_HIGH";
    epwm2.epwmTimeBase_period = 199;
    epwm2.epwmCounterCompare_cmpA = 99;
    epwm2.epwmEventTrigger_EPWM_SOC_A_triggerEnable = true;
    epwm2.epwmEventTrigger_EPWM_SOC_A_triggerSource ="EPWM_SOC_TBCTR_U_CMPA";
    epwm2.epwmEventTrigger_EPWM_SOC_A_triggerEventPrescalar ="1";
    epwm2.ePWM.$assign ="EPWM2";
    epwm2.ePWM.epwmaPin.$assign ="bul.A7";
    epwm2.epwm2.epwmmbpin.$assign ="Ball.b7";

    /**
    *用于未锁定引脚/外设的 Pinmux 解决方案。 这样可确保将来对自动解算器进行细微更改
    *该工具的版本不会影响您最初看到的 pinmux。 可以完全删除这些行、以便
    *从头开始重新解决。
    */
    epwm1.ePWM.epwmaPin.$appinestSolution ="Ball.c8";
    epwm1.epwm.epwmbPin_$appenestSolution ="ball.d8";

    谢谢 Vadim

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

    您好 Vadim:

    我没有 在上面粘贴的 SysConfig 中看到 ADC 时钟预分频设置或分辨率/信号模式设置。

    作为参考、假设 SYSCLK 为200MHz、 该器件的最小 ADC 时钟预分频必须被4.0分频。

    看起来您已经在 ePWM 上配置了输出 A 和输出 B 以执行 CMPA、这将生成 SOC 触发器。 我想这是导致在相同的时基周期发出两个 SOC 触发信号、从而导致在相同的 ePWM 周期内进行背靠背转换、并会解释您的结果。

    此致、
    伊袋

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

    谢谢! ADC 预分频是一个问题。

    瓦迪姆