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.

[参考译文] TM4C123GH6PM:采样期间的峰值过冲问题。

Guru**** 2609995 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/754608/tm4c123gh6pm-peak-overshoot-problem-during-sampling

器件型号:TM4C123GH6PM
#define PWM_FREQUENCY 55

#include 
#include 
#include "inc/hw_ints.h"
#include "inc/hw_memmap.h"
#include "inc/hw_types.h"
#include "driverlib/debug.h"
#include "driverlib/gpio.h"
#include "driverlib/pin_map.h"
#include "driverlib/sysctl.h"












;#include "driverlib/pinpintrl100/ unsignal pinupinupinupinu100";#inupinu/pinupinu/pinupinu/float


1;#id/pinupinupinu/pinupinu/pinu/pinu/pinupinu/pinu/pinpinu100_pinu/pinu/float 1;#id/pinpinpinpinpinpinpinpinpinpinpinu



// float PWM_word;



// PWM_FREQ = 1434;//
CPU_FREQ = 120000000;
// PWM_WORD =(1/PWM_FREQ)* CPU_FREQ;
//sysclock = SysCtlClockFreqSet ((SYSCTL_XTAL_25MHz |SYSCTL_MAIN |SYSCTL_USE_PLL |SYSCTL_CFG_VCO_480)、CPU_FREQ);


SysCtlPWMClockSet (SYSCTL_PWMDIV_64);
SysCtlPeripheralEnable (SYSCTL_Periph_PWM0);
SysCtlPeripheralEnable (SYSCTL_Periph_GPIOE);
GPIOPinTypePWM (GPIO_Porte _BASE、GPIO_PIN_5);
GPIOPinConfigure (GPIO_PE5_M0PWM5);
PWMGenConfigure (PWM0_BASE、PWM_GEN_2、PWM_GEN_MODE_UP_DOWN | PWM_GEN_MODE_DB_NO_SYNC);
PWMGenPeriodSet (PWM0_BASE、PWM_GEN_2、200);//针对200kHz 进行设置
PWMPulseWidthSet (PWM0_BASE、PWM_OUT_1、200);// 50%占空比
PWMGenEnable (PWM0_BASE、PWM_GEN_2);
PWMOutputState (PWM0_BASE、PWM_OUT_5_BIT、TRUE);

uint32_t PWMClock = SysCtlClockGet ()/64;
uint32_t 负载=(PWMClock/PWM_FREQUENCY)- 1;

PWMGenPeriodSet (PWM1_base、PWM_GEN_0、负载);
while (1);




PE3上的//ADC 采样

// SysCtlClockSet (SYSCTL_SYSDIV_5|SYSCTL_USE_PLL|SYSCTL_OSC_MAIN|SYSCTL_XTAL_16MHz);


GPIOPinTypeADC (GPIO_Porte _BASE、GPIO_PIN_3);


SysCtlPeripheralEnable (SYSCTL_Periph_ADC0);
ADCClockConfigSet (ADC0_BASE、ADC_CLOCK_SRC_PLL | ADC_CLOCK_RATE_FULL、266);
ADCSequenceDisable (ADC0_BASE、1);

ADCSequenceConfigure (ADC0_BASE、1、ADC_TRIGGER_PWM0*3、0);
ADCSequenceStepConfigure (ADC0_BASE、1、0、ADC_CTL_CH0);
ADCSequenceStepConfigure (ADC0_BASE、1、1、ADC_CTL_CH0);
ADCSequenceStepConfigure (ADC0_BASE、1、2、ADC_CTL_CH0);
ADCSequenceStepConfigure (ADC0_BASE、1、3、ADC_CTL_CH0 | ADC_CTL_IE | ADC_CTL_END);
ADCSequenceEnable (ADC0_BASE、1);

while (1)
{
ADCIntClear (ADC0_BASE、1);
ADCProcessorTrigger (ADC0_BASE、1);

while (!ADCIntStatus (ADC0_BASE、1、false))
{


}

ADCSequenceDataGet (ADC0_BASE、1、ulADC0Value[100]);
// uint32_t pinVal;//用于保持 pinRead 的变量
PinVal= GPIOPinRead (GPIO_Porte _BASE、GPIO_PIN_3);
pinVal1= GPIOPinRead (GPIO_Porte _BASE、GPIO_PIN_4);
int a=0;

对于(a=1;a<=1;a++){

uint32_t res=a;

}




/*表示(i=0;i<100;i++){
int a=GPIOPinRead (GPIO_Porte _BASE、GPIO_PIN_3);

uint32_t ADC_val []=
}*/

}



------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

我在调试过程中遇到了某些问题。 在这里、我将在 MCU 的引脚中生成信号、然后使用 ADC 对信号进行采样。

我会收到一些警告、这些警告似乎在我的代码中具有某种效果。

#112-D 语句是无法访问   的 project.c   /adc_Sampling2   行66   C/C++问题
"unsigned long"类型的#169-D 参数与"UINT32_t *"类型的参数   project.c   /adc_Sampling2   第91行   C/C++问题不兼容
#177-D 下标超出范围   project.c   /adc_Sampling2   第91行   C/C++问题

我不知道为什么会收到这些警告。 其次、在图形分析过程中、我看到不规则的峰值上升、原因未知。 我要附加图形图像。

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

    您好!

    [引用用户="Soumyadeb Bhattacharjee "]

    看到一些警告、这些警告在我的代码中似乎具有某种效果。

    #112-D 语句是无法访问   的 project.c   /adc_Sampling2   行66   C/C++问题
    "unsigned long"类型的#169-D 参数与"UINT32_t *"类型的参数   project.c   /adc_Sampling2   第91行   C/C++问题不兼容
    #177-D 下标超出范围   project.c   /adc_Sampling2   第91行   C/C++问题

    [/报价]

    清除 几个警告将是第一步、不是? 第一个112-D 是代码 Killer、必须更正169-D 整数类型不匹配、177-D 下标编号在 数组中设置不正确。

    双击"CCS Problems"选项卡中的警告左视图窗格 将显示 错误代码。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我收到#112-D 语句无法访问 project.c /adc_Sampling2行66 C/C++问题
    GPIOPinTypeADC (GPIO_Porte _BASE、GPIO_PIN_3);
    我无法找到它的原因。

    对于#169-D、我已将数据类型更改为 uint_32

    "uint32_t"类型的#169-D 参数与"Uint32_t *"类型的参数project.c/adc_Sampling2第91行C/C++问题不兼容
    我无法理解、因为我收到相同数据类型的类型不匹配错误。

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

    [引用 USER="Soummyadeb Bhattacharje]GPIOPinTypeADC (GPIO_Porte _BASE、GPIO_PIN_3);
    我无法找到原因

    第56行 while (1);缺少{}并返回;

    [引用 user="Soumyadeb Bhattacharjei">对于#169-D、我已将数据类型更改为 uint_32
    [/报价]

    您的代码语法在论坛 报价模式中不可见、因此 我们无法引用您发布的代码剪。

    也许尝试(&ui32MyVariable)与数组,忽略()。  

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

    第56行的说明:

     

    while (1); 

    这会将 CPU 置于一个无限分支中自我(不执行任何操作)。 其余的语句都不会被执行。 我认为您应该删除这一行。

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


    #10010 null:链接期间遇到错误;"ADC_Sampling2.out"未构建   ADC_Sampling2.          C/C++问题
    "="">processors.wiki.ti.com/.../10234"> 空:未解析的符号仍为   ADC_Sampling2          C/C++问题
    gmake:***[ADC_Sampling2.out]错误1   ADC_Sampling2          C/C++问题
    gmake:目标"全部"不会由于错误而重新生成。    ADC_Sampling2.          C/C++问题
    未解析的符号 ulADC0Value、首先在./project.obj   adc_Sampling2中引用          C/C++问题

    删除 while 循环后,我收到这些错误,我在代码中看不到任何突出显示的红线。 我无法理解这些错误的原因。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    主席先生,我能够解决#169-D,但即使放在了小括号后也无法解决#112-D。 建议在移除 while 环路并获得5个新错误后移除下面的 while 环路。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您将支架放在哪里? 该 while 循环的用途是什么? 您似乎在努力了解基本 C 代码。 教授 C 语言并不是这个论坛的目的、对你和我来说效率很低。 我建议您联系您的教授或教学助理以获取此帮助。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    方括号用于 while 循环、在删除 while 循环后、我得到了错误;

    说明   资源   路径   位置   类型
    #10010 null:链接期间遇到错误;"ADC_Sampling2.out"未构建   ADC_Sampling2.          C/C++问题
    "="">processors.wiki.ti.com/.../10234"> 空:未解析的符号仍为   ADC_Sampling2          C/C++问题
    gmake:目标"全部"不会由于错误而重新生成。    ADC_Sampling2.          C/C++问题
    未解析的符号 ulADC0Value、首先在./project.obj   adc_Sampling2中引用          C/C++问题

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

    [引用 user="Soumyadeb Bhattacharje"]空:未解析的符号仍保留   [/引用]

    您的代码可能是指另一个模块中缺少指向此类变量的 include 路径的变量。  

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

    #define PWM_FREQUENCY 55
    #include
    #include
    #include "inc/hw_ints.h"
    #include "inc/hw_memmap.h"
    #include "inc/hw_types.h"
    #include "driverlib/debug.h"
    #include "driverlib/gpio.h"
    #include "driverlib/pin_map.h"
    #include "driverlib/sysctl.h"
    #include "driverlib/pwm.h"
    #include "driverlib/adc.h"

    uint32_t sysclock;
    uint32_t input_value;
    uint32_t i;
    int sample_val[100]、pinVal、pinVal1;
    uint32_t ulADC0Value[100];




    //PG1是 PWM 引脚
    void main()


        PE5上的// 600kHz 信号

     // 浮点 PWM_FREQ;
     // 浮点 CPU_FREQ;
     // 浮点 PWM_WORD;



     // PWM_FREQ = 1434;//
      // cpu_FREQ = 120000000;
      // PWM_WORD =(1/PWM_FREQ)*CPU_FREQ;
       //sysclock = SysCtlClockFreqSet ((SYSCTL_XTAL_25MHz |SYSCTL_MAIN |SYSCTL_USE_PLL |SYSCTL_CFG_VCO_480)、CPU_FREQ);


       SysCtlPWMClockSet (SYSCTL_PWMDIV_64);
       SysCtlPeripheralEnable (SYSCTL_Periph_PWM0);
       SysCtlPeripheralEnable (SYSCTL_Periph_GPIOE);
       GPIOPinTypePWM (GPIO_Porte _BASE、GPIO_PIN_5);
       GPIOPinConfigure (GPIO_PE5_M0PWM5);
       PWMGenConfigure (PWM0_BASE、PWM_GEN_2、PWM_GEN_MODE_UP_DOWN | PWM_GEN_MODE_DB_NO_SYNC);
       PWMGenPeriodSet (PWM0_BASE、PWM_GEN_2、200);//针对200kHz 进行设置
       PWMPulseWidthSet (PWM0_BASE、PWM_OUT_1、200);// 50%占空比
       PWMGenEnable (PWM0_BASE、PWM_GEN_2);
       PWMOutputState (PWM0_BASE、PWM_OUT_5_BIT、TRUE);

       uint32_t PWMClock = SysCtlClockGet ()/64;
       uint32_t 负载=(PWMClock/PWM_FREQUENCY)- 1;

       PWMGenPeriodSet (PWM1_base、PWM_GEN_0、负载);
        //while (1){}




       PE3上的//ADC 采样

         SysCtlClockSet (SYSCTL_SYSDIV_5|SYSCTL_USE_PLL|SYSCTL_OSC_MAIN|SYSCTL_XTAL_16MHz);


          GPIOPinTypeADC (GPIO_Porte _BASE、GPIO_PIN_3);


           SysCtlPeripheralEnable (SYSCTL_Periph_ADC0);
           ADCClockConfigSet (ADC0_BASE、ADC_CLOCK_SRC_PLL | ADC_CLOCK_RATE_FULL、266);
           ADCSequenceDisable (ADC0_BASE、1);

           ADCSequenceConfigure (ADC0_BASE、1、ADC_TRIGGER_PWM0*3、0);
           ADCSequenceStepConfigure (ADC0_BASE、1、0、ADC_CTL_CH0);
           ADCSequenceStepConfigure (ADC0_BASE、1、1、ADC_CTL_CH0);
           ADCSequenceStepConfigure (ADC0_BASE、1、2、ADC_CTL_CH0);
           ADCSequenceStepConfigure (ADC0_BASE、1、3、ADC_CTL_CH0 | ADC_CTL_IE | ADC_CTL_END);
                      ADCSequenceEnable (ADC0_BASE、1);

                      while (1)
                      {
                                    ADCIntClear (ADC0_BASE、1);
                                    ADCProcessorTrigger (ADC0_BASE、1);

                                    while (!ADCIntStatus (ADC0_BASE、1、false))
                                    {


                                    }

                                    ADCSequenceDataGet (ADC0_BASE、1、&ulADC0Value[100]);
                                   // uint32_t pinVal;//用于保持 pinRead 的变量
                                    PinVal= GPIOPinRead (GPIO_Porte _BASE、GPIO_PIN_3);
                                   pinVal1= GPIOPinRead (GPIO_Porte _BASE、GPIO_PIN_4);
                                    int a=0;

                                    对于(a=1;a<=1;a++){

                                // uint32_t res=a;

                                    }




    /*对于(i=0;i<100;i++){
    int a=GPIOPinRead (GPIO_Porte _BASE、GPIO_PIN_3);

    uint32_t adc_val[]=
    }*/






    目前、在此代码中没有错误或警告。 但我仍然得到了我之前提到的峰值过冲、我无法解决它。

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

    我们在这个主题中发现了一些问题、这些问题是为帮助您解决 ADC 问题而打开的、因为 Bob 在此期间帮助解决了另一个主题上的这些问题、 我将继续、并将其标记为已关闭的问题。