an STM32F103-benutzer, ADC

Gast #2199355
Lesenswert?

Hallo,
ich habe folgendes Problem:
ich habe der AD-Wandler des Microkontrollers STM32F103 wie folgendes 
programmiert.

    ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;
    ADC_InitStructure.ADC_ScanConvMode = DISABLE;
    ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;
    ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;
    ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
    ADC_InitStructure.ADC_NbrOfChannel = 1;
    ADC_Init(ADC3, &ADC_InitStructure);


Das SimpleTime beträgt 6µs (maximale SimpleTime was ich einstellen kann, 
ist 18µs).
    ADC_RegularChannelConfig(ADC3, ADC_Channel_11, 1, 
ADC_SampleTime_71Cycles5);

wenn ich jetzt als Eingangsignal eine Sinusfunktion (100 Hz) einspeise, 
werden in dem Speicher mehrere gleiche
Werte nacheinnander kommen.(Foto am Anhang)

woran kann das liegen? ich habe auch mit abtastzeit 18µs probiert kommt 
aber das Problem raus...

Danke für eure Hilfe
Angehängte Dateien:
Gast #2232131
Lesenswert?

ick komme nicht mehr weiter. mehr als 3 Wochen suche ich den Fehler :( 
Könnte an RCC-Einstellung sein?
mein RCC-Code ist folgendes:
Danke für Eure Hilfe!

/**
  * @brief  Configures the different system clocks.
  */
void RCC_Configuration(void)
{
    /* RCC system reset(for debug purpose) */
  RCC_DeInit();
   /* Setup the microcontroller system. Initialize the Embedded Flash 
Interface,
     initialize the PLL and update the SystemFrequency variable. */
  SystemInit();
  /* Enable HSE */
  RCC_HSEConfig(RCC_HSE_ON);

  /* Wait till HSE is ready */
  HSEStartUpStatus = RCC_WaitForHSEStartUp();

  if(HSEStartUpStatus == SUCCESS)
  {
    /* Enable Prefetch Buffer */
    FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);

    /* Flash 2 wait state */
    FLASH_SetLatency(FLASH_Latency_2);

    /* HCLK = SYSCLK */
    RCC_HCLKConfig(RCC_SYSCLK_Div1);

    /* PCLK2 = HCLK */
    RCC_PCLK2Config(RCC_HCLK_Div1);

    /* PCLK1 = HCLK/2 */
    RCC_PCLK1Config(RCC_HCLK_Div2);

    /* ADCCLK = PCLK2/4 */
    RCC_ADCCLKConfig(RCC_PCLK2_Div4);

#ifndef STM32F10X_CL
    /* PLLCLK = 8MHz * 7 = 56 MHz */
    RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_7);

#else
    /* Configure PLLs *********/
    /* PLL2 configuration: PLL2CLK = (HSE / 5) * 8 = 40 MHz */
    RCC_PREDIV2Config(RCC_PREDIV2_Div5);
    RCC_PLL2Config(RCC_PLL2Mul_8);

    /* Enable PLL2 */
    RCC_PLL2Cmd(ENABLE);

    /* Wait till PLL2 is ready */
    while (RCC_GetFlagStatus(RCC_FLAG_PLL2RDY) == RESET)
    {}

    /* PLL configuration: PLLCLK = (PLL2 / 5) * 7 = 56 MHz */
    RCC_PREDIV1Config(RCC_PREDIV1_Source_PLL2, RCC_PREDIV1_Div5);
    RCC_PLLConfig(RCC_PLLSource_PREDIV1, RCC_PLLMul_7);
#endif

    /* Enable PLL */
    RCC_PLLCmd(ENABLE);

    /* Wait till PLL is ready */
    while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET)
    {
    }

    /* Select PLL as system clock source */
    RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);

    /* Wait till PLL is used as system clock source */
    while(RCC_GetSYSCLKSource() != 0x08)
    {
    }
  }

/* Enable peripheral clocks -----------------*/
  /* Enable DMA1 and DMA2 clocks */
  RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1 | RCC_AHBPeriph_DMA2, 
ENABLE);
  /* Enable ADC1 and GPIOC clock */
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC3 | RCC_APB2Periph_GPIOC | 
RCC_APB2Periph_GPIOD, ENABLE);
  /* Enable DMA1 or/and DMA2 clock */
  RCC_AHBPeriphClockCmd(SPI_MASTER_DMA_CLK | SPI_SLAVE_DMA_CLK, ENABLE);
  /* Enable CRC clock */ //für CRC_CalcBlockCRC
  RCC_AHBPeriphClockCmd(RCC_AHBPeriph_CRC, ENABLE);
   /* Resets the CRC Data register */ //für CRC_CalcBlockCRC
    CRC_ResetDR();

/* KHM__SPI --------------------------*/
#ifdef USE_STM3210C_EVAL
  /* Enable GPIO clock for SPI_MASTER and SPI_SLAVE */
  RCC_APB2PeriphClockCmd(SPI_MASTER_GPIO_CLK | SPI_SLAVE_GPIO_CLK |
  RCC_APB2Periph_AFIO, ENABLE);


  /* Enable SPI_MASTER Periph clock */
  RCC_APB1PeriphClockCmd(SPI_MASTER_CLK, ENABLE);

#else
  /* Enable SPI_MASTER clock and GPIO clock for SPI_MASTER and SPI_SLAVE 
*/
  RCC_APB2PeriphClockCmd(SPI_MASTER_GPIO_CLK | SPI_SLAVE_GPIO_CLK |
                       SPI_MASTER_CLK, ENABLE);

#endif
  /* Enable SPI_SLAVE Periph clock */
  RCC_APB1PeriphClockCmd(SPI_SLAVE_CLK, ENABLE);

}
Gast #2232176
Lesenswert?

Die ADC-Werte wurden im Speicher mittels DMA-Modus Kontiniuerlich 
abgelegt.

void DMA2_Configuration(void)
{
  /* DMA2 channel5 configuration------------*/
  DMA_DeInit(DMA2_Channel5);
  DMA_InitStructure.DMA_PeripheralBaseAddr = ADC3_DR_Address;
  DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)Speicher1;
  DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC; //Read from 
peripheral ADC3
  DMA_InitStructure.DMA_BufferSize = Buffer1;
  DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
  DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
  DMA_InitStructure.DMA_PeripheralDataSize = 
DMA_PeripheralDataSize_HalfWord;
  DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;
  DMA_InitStructure.DMA_Mode = DMA_Mode_Circular; //to transfer 
continuously converted data from ADC3 to memory.
  DMA_InitStructure.DMA_Priority = DMA_Priority_High;
  DMA_InitStructure.DMA_M2M = DMA_M2M_Enable;
  DMA_Init(DMA2_Channel5, &DMA_InitStructure);
}
Gast #2233674
Lesenswert?

Danke an Gebhard Raich, & an euch alle für die Unterstützung!

blöde Fehler.
DMA_InitStructure.DMA_M2M = DMA_M2M_Enable; (es muss DMA_M2M_Disable 
sein)

Problme irgendwie gelöst, ich bekomme nicht mehr die gleiche digitale 
Werte nacheinnander raus. aber, soll es nicht sein, dass die Diferenz 
zweier Werte gleich sein soll? 889-861=...=886-881=943-925=...also das 
gleiche Abstand?
bild vom Speiche ist am Anhang

Mein Eingangssignal ist ein Sinusfunktion.
Angehängte Dateien:

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren