Forum: Mikrocontroller und Digitale Elektronik Fehlerhafte Werte vom ADC


von STM-Programmierer (Gast)


Lesenswert?

Hallo zusammen,

ich programmiere an einem STM32F429 und möchte Analogwerte einlesen mit 
ADC1 und ADC3.

Beide Einheiten habe ich initialisiert und konfiguriert (Beispiel für 
ADC3):

/* ADC common init */
ADC_CommonInitStructure.ADC_Mode = ADC_Mode_Independent;
ADC_CommonInitStructure.ADC_Prescaler = ADC_Prescaler_Div8;
ADC_CommonInitStructure.ADC_DMAAccessMode = ADC_DMAAccessMode_Disabled;
ADC_CommonInitStructure.ADC_TwoSamplingDelay = 
ADC_TwoSamplingDelay_5Cycles;
ADC_CommonInit(&ADC_CommonInitStructure);

ADC_InitStructure.ADC_Resolution = ADC_Resolution_12b;
ADC_InitStructure.ADC_ScanConvMode = DISABLE;
ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;
ADC_InitStructure.ADC_ExternalTrigConvEdge = 
ADC_ExternalTrigConvEdge_None;
ADC_InitStructure.ADC_ExternalTrigConv = 0;
ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
ADC_InitStructure.ADC_NbrOfConversion = 1;
ADC_Init(ADC3, &ADC_InitStructure);

/* ADC3 regular channel xx configuration */
//ADC_RegularChannelConfig(ADC3, ADC_Channel_14, 1, 
ADC_SampleTime_15Cycles);

/* Enable end-of-conversion-bit */
ADC_EOCOnEachRegularChannelCmd(ADC3,ENABLE);

/* Enable ADC3 */
ADC_Cmd(ADC3, ENABLE);

Ich habe eine Wandlungsroutine für jeden ADC, die ich aus der Software 
aufrufe, darin (hier das Beispiel für ADC3) und übergebe den Kanal als 
parameter (u8param_ADC_Channel)

/* Configure the ADC-channel */
ADC_RegularChannelConfig(ADC3,u8param_ADC_Channel,1,ADC_SampleTime_28Cyc 
les);
/* Clear all flags which could be coming up */
ADC_ClearFlag(ADC3, ADC_FLAG_OVR | ADC_FLAG_STRT | ADC_FLAG_EOC);
/* Start conversion */
ADC_SoftwareStartConv(ADC3);

/* Read out measured value */
u16l_adc_value = ADC_GetConversionValue(ADC3);

Jetzt funktioniert soweit alles, ich bekomme korrekte Werte. Nur wenn 
ich versuche auf beiden ADCs Werte auf dem gleichen Kanal (z.B. 
ADC_Channel_15) einzulesen erhalte ich einen falschen Wert.

Ich bin vertraut mit dem Aufbau der ADCs, die Kanäle werden umgeschaltet 
von einem ADC zum anderen.

Wenn ich nun 2 ADCs (ADC1 und 3) und dazu noch den selben Kanal 
gleichzeitig benutzen will, muss ich dann definitiv den 
ADC_TripleMode_xxx auswählen speziell für diese Kanäle oder für alle?
Was wäre denn von den Triple-Modi der einfachste, da ich keine 
zeitkritischen Wandlungen machen muss?

Danke soweit

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.