Forum: Mikrocontroller und Digitale Elektronik Kapazitätmessen - komische Werte


von Franz (Gast)


Lesenswert?

Hallo,
ich will die Kapazität von einem kondensator so im Bereich 10pF - 100pF 
messen, und zwar indem ich die Zeit messe, die der Kondensator braucht 
um sich auf 63% der Ladespannung 5V aufzuladen. µc ist ein Atmega8 der 
mit 16Mhz läuft ohne Vorteiler.
Jetzt brauche ich für 55pF aber 691 Takte zum aufladen anstelle der 
errechneten 880, genauso für 102pF 1050 anstatt 1632. Der Ladewiderstand 
beträgt 1Mohm, und ich verwende den internen Komparator des ATmega8. 
Noch etwas Code:
1
SIGNAL(SIG_COMPARATOR)
2
{
3
  double result = 0;
4
  result = TCNT1;//*62/1000;
5
  //result = TCNT1;
6
  char test[10];
7
  dtostrf(result,3,1,test);
8
  send_string(test);
9
  send_string("pF---");
10
  ACSR &= ~(1<<ACIE);  //Interrupt disablen um prellen zu verhindern
11
  
12
}
13
14
void get_cap(void)
15
{
16
  
17
  TCNT1 = 0x00;    // Timerregister 0 setzen
18
  PORTD |= (1<<PD5);  // High setzen um Kondensator zu laden
19
  ACSR |= (1<<ACIE);    //Interrupt enablen
20
}
21
22
int main(void)
23
{
24
 sei();
25
 init_usart();
26
 DDRD |= (1<<PD5);
27
 DDRD &= ~(1<<PD7) | ~(1<<PD6);
28
 TCCR1B = (1 << CS10);  //Prescaler: keiner
29
 ACSR |= (1<<ACIE) | (1<<ACIS0) | (1<<ACIS1); //Interrupt enable rising edges
30
31
  while(1)
32
  {
33
    delay_ms(1000);
34
    PORTD &= ~(1<<PD5);  // Kondensator entladen
35
    delay_ms(1000);
36
    get_cap();
37
    
38
  }
39
40
}
Wäre super wenn einer von euch eine Idee hätte, ich habe keine :(

von peter-neu-ulm (Gast)


Lesenswert?

Wie ist denn die Schaltschwelle des Komparators festgelegt? schaltet er 
wirklich bei 63% der Ladespannung ?

von Dieter W. (dds5)


Lesenswert?

Vielleicht spielt auch ein unerwünschter Strom durch den Anschlußpin des 
Komparators eine Rolle.

von Alexander S. (esko) Benutzerseite


Lesenswert?

Schaltplan her. Wie entlädst du den Kondensator vorher?

von Franz (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,
im Anhang der Schaltplan. Schaltschwelle ist 3.15V. Der Kondensator wird 
durch den PD5 entladen, indem ich ihn low setze(siehe Code).
Gruß
Franz

von Alexander S. (esko) Benutzerseite


Lesenswert?

Der Strom nach AIN0 ist mit maximal 1µA spezifiziert.
Durch den 1Mohm fließen 2µA < I < 5µA.
Am besten mal nachmessen wieviel real reinfließen.

Desweiteren ist das Ziel 10pF - 100pF mit einem AVR zu messen recht 
ehrgeizig.
10pf dürften schon die zwei Beinchen mit Leiterbahnen haben.

von Ralli (Gast)


Lesenswert?

Wenn programmtechnisch alles stimmt, hilft vielleicht folgende Annahme:

102 pF / 55 pf = 1,85

1050 / 691 = 1,52

137 pF / 90 pF = 1,522

Eine zusätzliche Schaltungskapazität von 35 pF
würde also schon alles erklären.

Ansonsten: Was kommt denn bei C = 0 pF raus?

Da der zu messende Wert schon im Bereich der parasitären Kapazitäten
im Aufbau und im ATMega8 liegt, (temperaturabhängig!) muss dieser
Wert vor jeder Messung ermittelt werden!

Gruß Ralli

von Benedikt K. (benedikt)


Lesenswert?

Das hier ist nicht nur zum Nachbauen interessant, auch ein paar Tricks 
zum Messverfahren sind hier beschrieben:

http://elm-chan.org/works/cmc/report.html

Vor allem dieser Satz dürfte das Problem erklären:
Leakage current on analog input. Accrding to AVR data sheet, the leakage 
current on analog input is increased near zero volt. This will cause a 
measurement error

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.