Forum: Mikrocontroller und Digitale Elektronik SAM4L ADC - "Offset" bei kleinen Eingangssignalen


von Adam P. (adamap)


Lesenswert?

Hallo,

ich bin bei meinem SAM4L am verzweifeln, weder das Internet noch 
Datenblatt lieferten mir eine Lösung.

Problem ist beim SAM4L8 X-Plained Pro sowie auf meinem User-Board 
gleich.

Tabellen (Datenblatt):
REFSEL: S. 109
INTERNAL, MUXNEG, MUXPOS: S. 1014 - 1016

Meine Analog Vref beträgt 3,3V bzw. 2,5V.
Mit der Kanal-Konfig wähle ich externe Ref. aus und setze MUXNEG auf 
"Pad Ground" und MUXPOS auf den AD-Eingang.
1
struct adc_seq_config adc_seq_cfg =
2
{
3
  .zoomrange = ADC_ZOOMRANGE_0,
4
  .muxneg = ADC_MUXNEG_1,       // Pad Ground
5
  .muxpos = ADC_MUXPOS_4,       // AD 4
6
  .internal = ADC_INTERNAL_2,   // Pos. primary & Neg. internal
7
  .gcomp = ADC_GCOMP_DIS,
8
  .hwla = ADC_HWLA_DIS,
9
  .res = ADC_RES_12_BIT,
10
  .bipolar = ADC_BIPOLAR_SINGLEENDED
11
};

Das Problem ist, nach oben hin erreiche ich fast die 4096 Digits bei 
12bit Auflösung - nach unten hin (AD Eingang gegen GND) habe ich einen 
Offset von ca. 800 Digits...

Als wäre GND nicht gleich GND.

Dieses Problem besteht auch, wenn ich einen zweiten AD als Neg. Eingang 
schalte und diesen gegen GND lege und mit dem anderen Messen möchte.
1
struct adc_seq_config adc_seq_cfg =
2
{
3
  .zoomrange = ADC_ZOOMRANGE_0,
4
  .muxneg = ADC_MUXNEG_0,       // AD0 mit GND verbunden (extern)
5
  .muxpos = ADC_MUXPOS_4,       // AD 4
6
  .internal = ADC_INTERNAL_0,   // Pos. primary & Pos. primary
7
  .gcomp = ADC_GCOMP_DIS,
8
  .hwla = ADC_HWLA_DIS,
9
  .res = ADC_RES_12_BIT,
10
  .bipolar = ADC_BIPOLAR_SINGLEENDED
11
};

Dies ist jedoch nicht der Fall wenn ich die möglichen internen Vref 
nutze:

REFSEL:
- 000   Internal 1.0V (10/11*bandgap)
- 001   0.625*VCC
- 1XX   VCC/2

Da funktioniert die Messung im jeweiligen Spannungsbereich.

Gibt es da bei der externen Vref irgendwie ein Problem das mir grad noch 
nicht so ganz einleuchtet?

...so langsam glaub ich irgendwie an ein µC-Bug in der Rev.

Bsp. von Atmel sind halt nur leider mit den internen Spannung zu finden 
& die funktionieren ja auch.

Gruß
Adam

von Adam P. (adamap)


Lesenswert?

Anscheinend haben dieses Problem auch andere:
http://www.at91.com/viewtopic.php?t=22445

Eine Lösung wäre hier zu finden auch wenn sie erstmal komisch wirkt:
https://docs.tockos.org/sam4l/adc/index.html

Die nehmen als Vref die internen VCC/2 und setzen den Gain auf 0,5.
...scheint wohl erstmal zu funktionieren.

Bin aber für Anregungen offen und auf meine Freischaltung beim Microchip 
Support warte ich auch noch - wirklich zufriedentstellend ist das alles 
noch nicht.

von Adam P. (adamap)


Lesenswert?

Hallo zusammen,

wollte euch nur das Ergebnis mitteilen (Kontakt mit Microchip-Support):

Bei dem SAM4L ist es anscheinend wirklich nicht möglich eine andere ext. 
Vref als 1.0V anzulegen - wenn man Unipolar messen möchte.
Da bleiben dann doch nur die internen Vref-Spannungen.

Support:
You have mentioned that you are using Vref as 2.5V for your custom 
board. Please note the Unipolar and Window modes the only reference 
voltage allowed is 1V. Please refer the Table 42-46. DC Characteristics 
for the same.

Ich:
So it is not possible to configure a measuring range of 0 - 2.5V 
(unipolar)?

Support:
->Yes, you can’t configure the reference voltage other than 1V.

Mir leuchtet es zwar nicht ein, warum es bei anderen µC gang und gebe 
ist, die Vref. so zu nutzen wie man es möchte um sich einen Messbereich 
einzustellen und hier soll es nicht gehen - naja.

Hoffe das ersparrt anderen Kopfschmerzen...

Gruß

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.