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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.