STM32F4 Discovery ADC schwankt stark

OP #3419467
Hallo Zusammen,

ich möchte gerne den ADC des STM32F4 Discovery Board nutzen. Dies 
funktioniert soweit auch nur schwanken die Werte um ca. 400. Ich habe 
ein 10k Poti was an 3V und GND angeschlossen ist, zwischen 
Mittelabnehmer und GND ist noch ein 100nF Keramik Kondensator. Was kann 
ich dagegen machen?

Vielen Dank.

1
void ADC_init(void)
2
{
3
  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);
4
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC3, ENABLE);
5

6
  //GPIO initialisieren
7
  GPIO_InitTypeDef  GPIO_InitStructure;
8
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1 | GPIO_Pin_2;
9
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN;
10
  GPIO_InitStructure.GPIO_OType = GPIO_OType_OD;
11
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
12
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
13
  GPIO_Init(GPIOA, &GPIO_InitStructure);
14

15
  //erweiterte ADC Funktionen
16
  ADC_CommonInitTypeDef ADC_CommonInitStruct;
17
  ADC_CommonInitStruct.ADC_Mode = ADC_Mode_Independent;
18
  ADC_CommonInitStruct.ADC_Prescaler = ADC_Prescaler_Div4;
19
  ADC_CommonInitStruct.ADC_DMAAccessMode = ADC_DMAAccessMode_Disabled;
20
  ADC_CommonInitStruct.ADC_TwoSamplingDelay = ADC_TwoSamplingDelay_5Cycles;
21
  ADC_CommonInit(&ADC_CommonInitStruct);
22

23
  //als ADC initialisieren
24
  ADC_InitTypeDef ADC_InitStruct;
25
  ADC_InitStruct.ADC_Resolution = ADC_Resolution_12b;
26
  ADC_InitStruct.ADC_ScanConvMode = DISABLE;
27
  ADC_InitStruct.ADC_ContinuousConvMode = ENABLE;
28
  ADC_InitStruct.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_None;
29
  ADC_InitStruct.ADC_DataAlign = ADC_DataAlign_Right;
30
  ADC_InitStruct.ADC_NbrOfConversion = 1;
31
  ADC_Init(ADC1, &ADC_InitStruct);
32

33
  ADC_Cmd(ADC3, ENABLE);
34
}
35

36
uint16_t ADC_Read(uint8_t kanal)
37
{
38
  uint16_t messwert = 0;
39

40
  ADC_RegularChannelConfig(ADC3, kanal, 1, ADC_SampleTime_480Cycles);
41
  ADC_SoftwareStartConv(ADC3);
42
    while(ADC_GetFlagStatus(ADC3, ADC_FLAG_EOC)==RESET);
43
    messwert = ADC_GetConversionValue(ADC3);
44

45
    return(messwert);
46
}

In der main steht dann: "status1 = ADC_Read(Kanal_A)" wobei Kanal_A ein 
"#define Kanal_A ADC_Channel_1" ist. Diesen Wert gebe ich mir dann auf 
einem Display aus.
Gast
Hallo Steffen,

10k geteilt und 100nF hört sich nach ner Menge Holz für den kleinen Kerl 
an.

Mein Glaskugel sagt:

Probiere mal den 100nF auszulöten, oder/und nimm ein niederohmigeres 
Poti...
Vermutung: Quelle ist zu hochohmig.

Beste Grüße
public
An der Impedanz sollte es bei den verwendeten langsamen Abtastraten 
nicht liegen. Du initialisierst jedoch (versehentlich?) nur ADC1, 
verwendest aber sonst ADC3. Benutze doch nur ADC1, also einfach per 
"Suchen&Ersetzen" ADC3 zu ADC1 umwandeln.

Das Initialisieren der Structures ist ebenfalls zu empfehlen (wird in 
vielen Beispielen nicht gemacht):
1
ADC_CommonStructInit(&ADC_CommonInitStructure);
2
ADC_StructInit(&ADC_InitStructure);

Zur Qualität der STM32F4 ADCs: Beim obigen Anwendungsfall werden diese 
noch gar nicht wirklich "gefordert". Bei meiner Anwendung wird mit bis 
zu 6x 1,4MSps bzw. 1x 8,5MSps bei 12bit abgetastet (leicht übertaktet). 
Ich kann zwar keine quantitative/belastbare Aussage treffen, aber die 
Ergebnisse sehen immer noch sehr gut aus. Evtl. muss man den 
Flash-Prefetch deaktivieren, da dieser Störungen verursacht, oder man 
setzt auf die F429/F439-Serie, wo dieser Bug behoben wurde.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 12 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.