Forum: Mikrocontroller und Digitale Elektronik interner Temperatursensor NAU7802 24Bit ADC


von Anon Y. (anonymous)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,

ich verwende in einem Projekt den 24Bit ADC NAU7802. Ich möchte den 
internen Temperatursensor auslesen, erhalte aber nur unplausible Werte.

Im Datenblatt
http://www.chipcad.hu/letoltes/NAU7802.pdf
steht auf Seite 22, dass ich den Temperatursensor als Eingang auswählen 
soll. Den PGA habe ich ausgeschaltet, weil ich mit eingeschaltetem PGA 
auch bei dem normalen Eingang nur zufällige Werte erhalte.

Nach Seite 8 sollte ich bei 25°C einen Wert von 109mV erhalten, der 
Temperaturkoeffizient ist 360uV/°K.

Ich erhalten aber einen Wert von 40239uV, der sich auch nicht mit der 
Temperatur ändert. Hat jemand eine Ahnung, wie das Ding funktioniert, 
oder was ich noch ausprobieren könnte?

Anbei noch etwas Code:
1
int32_t nau7802_readTemperatureADC() {
2
  uint8_t reg = 0;
3
  // read I2C_CONTROL register
4
  nau7802_read(&reg, 1, I2C_CONTROL);
5
  // enable Temperature select bit
6
  reg |= (1 << TS);
7
  // write back bit
8
  nau7802_writeAndVerify(&reg, 1, I2C_CONTROL);
9
10
  // get the value
11
  int32_t result = nau7802_readADC();
12
13
  reg = 0;
14
  // read I2C_CONTROL register
15
  nau7802_read(&reg, 1, I2C_CONTROL);
16
  // disable Temperature select bit
17
  reg &= ~(1 << TS);
18
  // write back bit
19
  nau7802_writeAndVerify(&reg, 1, I2C_CONTROL);
20
21
  return result;
22
}
23
int32_t adc = nau7802_readTemperatureADC();
24
int32_t temperature = nau7802_convertToUV(adc);

Die 'nau7802_convertToUV(adc)' Funktion ist getestet. Der rohe Wert des 
Temperatursensors ist 282653 bei einer Vref von 2,4V.


Ich habe eine *.c und *.h Datei geschrieben um den A/D-Wandler zu 
konfigurieren. Also im wesentlichen das Datenblatt abgeschrieben. Wer 
sich etwas Ärger sparen möchte, kann diese gerne privat verwenden.

von Anon Y. (anonymous)


Angehängte Dateien:

Lesenswert?

Ich habe den chinesischen Support kontaktiert und wirklich gute und 
schnelle Hilfe in Form von fertig ausgefüllten i2c Registern bekommen.

Der Temperatursensor funktioniert jetzt. Die Änderungen sind:

1. PGA_BYPASS muss disabled sein. Sonst "dropt" die Spannung des LDOs 
bei jeder Wandlung, was man auch deutlich mit dem Oszi sehen kann.

2. Die Werte des Temperatursensors sind anscheinend nur 23bit (?). D.h. 
bei einer funktionierenden Messung habe ich Werte von ca. 54mV bekommen. 
Als fix habe ich die Werte für eine Temperaturmessung mit 2 
multipliziert.

3. Der Wandler braucht nach einem Kanalwechsel lange, um sich 
einzustellen. D.h. die ersten 4 Messungen sind nicht zu gebrauchen. Ich 
starte nach dem Kanalwechsel 4 dummy samples. Es kann sein, dass auch 
Warten reicht.

Im Anhang die aktuelle Version.

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.