ADC - Analog Digital Converter

Die Welt ist analog, dass heisst ein Wert kann von 0 - 1 alles mögliche sein, dass heisst auch 0.034566, oder 0.9999.

Um jetzt dieses analoge Signal auch in der digitalen Wert verwenden zu können, gibt es ADC's. Diese wandeln den analogen Wert in einen digitalen Wert um.

Wir machen uns dabei ein Phenomen der Elektrotechnik zugunsten, wo wir mit hilfe von Widerständen eine Spannung aufteilen können.

Wenn wir jetzt bei einem der Signale, 1-5V einen Komparator, auch Vergleicher genannt, hinzufügen, dann ist es relativ einfach zu verstehen wie der ADC funktioniert.

Das Verhältnis der Widerstände ist jeh nach ADC unterschiedlich.

alt text

Dem ADC wird ein sehr genaues Referenzsignal (VREF) hineingefügt.

Fehler

Full-scale-error = offset error + gain error

Quantization

  • Analoges Signal ist eine gerade
  • Digitals Signal kann nur gewisse Werte analoge Werte weiderspiegeln.
  • Fehler zwischen -0.5 und + 0.5, der kleinsten Auflösung (LSB)

alt text

Offset

  • Nullpunkt nicht korrekt eingestellt

alt text

Gain

alt text

Conversion Modes

Single ChannelMulti channel
Single ConversionConvert 1 channel, then stop.Convert all channels in group, one after the other, then stop. Sequence can be programmed
Continous conversionContinously convert 1 channel until stop order is givenContinously convert a group of several channels until the stop order is given. Sequence can be programmed

Timing

alt text

Register Bits

Common Control Register (ADC_CCR_ADC)

RegisterBeschreibungadditional
TSVREFEenable/disable temp sensor and vREFITNT
VBATEenable/disable vbatVBAT => Batteriespannung, nur wenn eine angeschlossen ist
ADCPRE[1:0]Prescaler for ADCCLKAPB2 clock divided by
00 -> 2
01 -> 4
10 -> 6
11 -> 8
, APB2 clock = 42 Mhz on this board

Status Register (ADC_SR)

RegisterBeschreibung
OVROverrun, Daten wurden überschhrieben
STRTConversion started (regular channel)
EOCEnd of conversion. Cleared by reading result of conversion

Control Register 1 (ADC_CR1)

RegisterBeschreibungAdditional
OVRIEOverride Interrupt enable
EOCIEEOC Interrupt enable
RES[1:0]Conversion resolution00 -> 12 bit
01 -> 10 bit
10 -> 8 bit
11 -> 6 bit
SCANEnable scan mode

ADC Control Register 2 (ADC_CR2)

RegisterBeschreibungAdditional
SWSSTARTStart conversion of regular channel by softwareIs cleared by hardware
EXTEN[1:0]External trigger for regular channel00 -> disabled
01 -> positive edge
10 -> negative edge
11 -> positive & negative edge
EXTSELExternal event select to trigger conversion of a regular group
ALIGNData Alignment0 -> right aligned
1->left aligned
EOCSEOC Selection0 -> EOC shows end of each sequence of conversions
1 -> end of each conversion
DMAEnable DMAkopiere direkt vom adc in den memory.
CONTContinous mode0 -> single conversion mode
1 -> continous conversion mode
ADONADC Onaktivert den ADC

Sample Time

ADC Sample time register

Konfiguriert die Zeit, in der die Spannung gemessen ist.

Sampling for channel: SMPx[2:0]

  • 0x00: '000b' -> 3 cycles
  • 0x01: '001b' -> 15 cycles
  • 0x02: '010b' -> 28 cycles
  • 0x03: '011b' -> 56 cycles
  • 0x04: '100b' -> 84 cycles
  • 0x05: '101b' -> 112 cycles
  • 0x06: '110b' -> 144 cycles
  • 0x07: '111b' -> 480 cycles

ADC_SMPR1

  • Address offset 0x0C
  • Reset Value: 0x0000 0000

alt text

ADC_SMPR2

  • Address offset 0x10
  • Reset Value: 0x0000 0000

alt text

Sequence of Channels (ADC_SQR1/2/3)

alt text

  • Address offset: 0x2C
  • Reset value: 0x0000 0000
RegisterBeschreibungAdditional
L[3:0]Sequence lengthL+1 = number of conversions in regular sequence
SQx[4:0] Channel number of xth conversion ins sequence1 <= x <= 16

e.g. SQ3[4:0] = 0x7 means the 3rd conversion takes place on channel 7

Rechnungen

Sampling Time

Max sampling rate

  • PBA2 -> ADC Frequency, by default 42Mhz => 42'000'000 Hz