mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Kapazitiver Sensor Offset Problem


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
Autor: Bert S. (kautschuck)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

Ich habe folgenden Sensor:

http://www.ti.com/lit/ds/symlink/fdc1004.pdf

Das auslesen über I2C funktioniert soweit, jedoch kann ich den Offset 
irgendwie nicht richtig setzen und komme bei angehängten Kabeln sehr 
schnell in die Sättigung. Im Measurement Configuration Register habe ich 
bereits CAPDAC auf 0b11111 gesetzt, jedoch ändert sich das auslesen nur 
minim.

Jemand eine Idee, was man da sonst noch ändern muss um den Offset 
herunterzusetzen?

Autor: Wolfgang (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bert S. schrieb:
> ... und komme bei angehängten Kabeln sehr schnell in die Sättigung.

Vielleicht überschreitet deine Kabelkapazität den lt. Datenblatt 
möglichen Offset-Bereich von 100pF?

Autor: Bert S. (kautschuck)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wolfgang schrieb:
> Vielleicht überschreitet deine Kabelkapazität den lt. Datenblatt
> möglichen Offset-Bereich von 100pF?

Wenn ich den Offset auf 0b11111 setzte ohne irgend ein Sensor angehängt, 
dann lese ich folgendes aus (MSBH, MSBL,LSBH,LSBL):

(4,180,120,0)

Wenn der Offset auf 0b00000 ist ohne angehängten Sensor, dann lese ich 
folgendes aus:

(2,49,120,0)

Wobei die LSB Werte natürlich stärker schwanken.

Der maximale ausschlag für diese Werte ist:

(127,255,255,0)

und sollte eigentlich +15pF entsprechen, oder? Daher müssten ja bei 
einer Offset Änderung sofort die Werte (0,0,0,0) erscheinen?

Autor: Bert S. (kautschuck)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe mal Tests mit Kapazitäten im pF Bereich gemacht:

2.2pF führt zu (26,123,166,0)

15pF führt zu (127,255,255,0) wie erwartet.

Daher scheint einfach der Offset nicht zu greifen. Das Measurement 
Register 0x08 beschreibe ich mit dem Wert (0x1FE0), was den Offset 
eigentlich auf 100pF setzen sollte.

Autor: Bert S. (kautschuck)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe hier mal noch den Code:
#include "Wire.h"

#define ADDR 0x50
#define FDC 0x0C

#define SIZE 2

uint8_t lower[SIZE];
uint8_t higher[SIZE];

uint32_t corr_factor=524288; //2^19

void setup() {
  // put your setup code here, to run once:
  Wire.begin();
  Serial.begin(9600);

  Wire.beginTransmission(ADDR); //Repeated reading channel 1
  Wire.write(0x0C);
  Wire.write(0x05);
  Wire.write(0x80);
  Wire.endTransmission();  
  delay(5);

  Wire.beginTransmission(ADDR); //Set offset to 100pF
  Wire.write(0x08); //ConfigMes1
  Wire.write(0x1C); //High bytes
  Wire.write(0x00); //Low bytes
  Wire.endTransmission();  
  delay(5);
}

void loop() {
  Wire.beginTransmission(ADDR); //MSB Channel 1
  Wire.write(0x00);
  Wire.endTransmission();  
  delay(5);
  
  Wire.requestFrom(ADDR , SIZE);    // request 2 bytes from slave device 0x30

  for(uint8_t i=0;i<SIZE;i++) {
    higher[i]=Wire.read();
  }

  Wire.beginTransmission(ADDR); //LSB Channel 1
  Wire.write(0x01);
  Wire.endTransmission();  
  delay(5);
  
  Wire.requestFrom(ADDR , SIZE);    // request 2 bytes from slave device 0x30

  for(uint8_t i=0;i<SIZE;i++) {
    lower[i]=Wire.read();
  }

  Serial.print(higher[0]);
  Serial.print(",");
  Serial.print(higher[1]);
  Serial.print(",");
  Serial.print(lower[0]);
  Serial.print(",");
  Serial.print(lower[1]);
  Serial.println("");

  uint32_t cap = (((uint32_t)higher[0])<<24) | (((uint32_t)higher[1])<<16) | (((uint32_t)lower[0])<<8) | ((uint32_t)0x00);
  cap = cap/corr_factor;
  Serial.println(cap);

  delay(500);

}

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.