PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Strommessung



IceRage
01.02.2009, 14:17
Hallo

ich habe mal folgenden Code ausprobiert:


uint16_t readADC(uint8_t channel) {
uint8_t i;
uint16_t result = 0;

// Den ADC aktivieren und Teilungsfaktor auf 128 (16MHz) stellen
ADCSRA = (1<<ADEN) | (1<<ADPS2) | (1<<ADPS1) | (1<<ADPS0);

// Kanal des Multiplexers waehlen
ADMUX = channel;
// Externe Referenzspannung verwenden (also 4,95 V)
ADMUX |= (0<<REFS1) | (0<<REFS0);

// Den ADC initialisieren und einen sog. Dummyreadout machen
ADCSRA |= (1<<ADSC);
while(ADCSRA & (1<<ADSC));

// Jetzt 3x die analoge Spannung and Kanal channel auslesen
// und dann Durchschnittswert ausrechnen.
for(i=0; i<3; i++) {
// Eine Wandlung
ADCSRA |= (1<<ADSC);
// Auf Ergebnis warten...
while(ADCSRA & (1<<ADSC));

result += ADCW;
}

// ADC wieder deaktivieren
ADCSRA &= ~(1<<ADEN);

result /= 3;

return result;
}

Habe den Atemga32 auf dem AVR-NET-IO Board, von bekanntem Versandhandel. Ich kann zwar ein bisschen C, aber wie das setzen der Bits funktioniert verstehe ich leider nur zum Teil. Ich habe da eine ganz gute Erklärung gefunden, in wie weit, welche Bits gesetzt werden müssen. Demnach sollte (1<<ADPS2) | (1<<ADPS1) | (1<<ADPS0) für einen Teiler von 128 korrekt sein. Die Frequenz für den AD-Wandler liegt ja dann wohl bei 150kHz, was wohl laut Beschreibung auch richtig wäre.

Bei der Beschaltung der externen Referenz Spannung sollen REFS1 und REFS0 jeweils auf 0 liegen, und dann dieser Wert dem Multiplexer zugewiesen werden. Aber mit: ADMUX |= (0<<REFS1) | (0<<REFS0) erreicht man dies nicht oder? :|

Ansonsten rufe ich den Code innerhalb von httpd_data_send() auf, und setze dann jedes mal einen Wert in var_array auf den aktuellen Ablesewert: var_array[3] = readADC(4). Also jedes Mal, wenn ich die Webseite aufrufe erhalte ich dann den aktuellen Wert. Die Webseite habe ich natürlich entsprechend umgebaut, damit eben dieser angezeigt wird.

Ich habe mir vorgestellt, die Webseite dann über ein Perlskript immer wieder neu aufzurufen und das Ergbnis dann zu parsen. Wie das in Perl funktioniert weiß ich. Nur ob ich die Register richtig gesetzt habe, da bin ich mir nicht so sicher. Der Wert auf der Webseite ist übrigens permanent bei 1023 (also Maximum bei 2^10), da ändert sich nichts.

Wäre nett wenn mir da jemand einen Hinweis geben würde,

vielen Dank IceRage

Hubert.G
01.02.2009, 14:52
Die ADC-Frequenz ist 125kHz, 16000000 / 128


ADMUX |= ADMUX |= (0<<REFS1) | (0<<REFS0); funktioniert nicht, sollte ADMUX &= ~((0<<REFS1) | (0<<REFS0));
Ist aber nicht notwendig da diese bit standard auf 0 sind.

Den ADC wieder deaktivieren ist auch nicht notwendig.

Probiert habe ich den Code nicht, sieht aber sonst gut aus.

IceRage
01.02.2009, 15:25
Super, vielen Dank dir.

Teste ich so bald wie möglich mal an, und melde mich dann zurück.

Gruß, IceRage

Besserwessi
01.02.2009, 17:19
Man sollte da ADMUX einfach gleich in eins setzen: als
ADMUX = channel + (0<<REFS1) | (0<<REFS0)
Die erste Version ist zwar nicht wirksam, aber der vermutlich gemeinte Wert ist nach ADMUX = Channel ja schon drin.

Dabei könnte es aber sein, das das auch nicht die richtige einstellung für AREF ist. Da müßte schon eine externen Verbindung nach 5 V vorliegen. Mit einem Kondensator gegen GND geht das so noch nicht. Da müßte dann 0 1 als kombination für die Ref. rein.

IceRage
02.02.2009, 05:30
Jo besten Dank euch - funktioniert.

Musste nur noch den Jumper auf AREF setzen. Werd mir jetzt mal ne Stromzange kaufen, und dann mal ein paar Testmessungen durchführen. Gibts da evtl. einen Tipp, was für eine Stromzange sich bewährt haben könnte? Suche im Bereich von 0 - ca. 100A - soll für einen Zählerschrank eines ganz normalen Endkunden sein. Also quasi in einer Hausverteilung eingesetzt werden. Da reicht die Spanne ja eigentlich nur bis 63A.

Gruß, IceRage

EDIT: Achso, die Stromzange müsste dann natürlich auch zum vorhandenen Messbereich passen, aso 0 - 5V.

Habe da eine Zange gefunden - 20€ bei Conrad. Der Messbereich geht zwischen 0 - 200A. Der Ausgang geht allerdings nur von 0 - 200mV .. finde ich etwas gering. Kann man das vielleicht doch noch irgendwie vorverstärken? Bei 1mV / A entsteht sicher ein zu hoher messfehler.

Besserwessi
02.02.2009, 17:42
Die meisten Zangen werden für 200mV sein, das paßt zu den normalen DMMs. Man müßte klären ob der Ausgang AC oder DC ist.
Könnte man Verstärken, z.B. mit einem LM358 oder TLC271 könnte man eine 10 fache Verstärkung nehmen und dann mit 2,5 V ARef arbeiten.

IceRage
02.02.2009, 20:07
Ich überlege gerade, ob das Verstärken überhaupt Sinn macht. Der interne AD-Wandler ist ja 10bit auf die AREF Spannung, die dann natürlich auch 200mV sein müsste.

Die Schwankung (angegebene 5%) der Messzange, werde ich damit wohl nicht verbessern können.

Hubert.G
02.02.2009, 20:16
Das wird nicht gehen, lt. Datenblatt ist VREF min. 2V

IceRage
04.02.2009, 12:24
Also dann mit LM358 oder TLC271 auf 10 Fach verstärken?
Was ist denn da so gebräuchlich, dann mach ich das einfach so.

IceRage
23.03.2009, 11:57
Hallo nochmal,

hat etwas gedauert, bis ich mich damit befassen konnte ^^.

Mal eine Rückfrage: der LM358 hat eine Versorgungsspannung von 30V, und der TLC271 hat eine Versorgungsspannung von 18v. Ich habe aber maximal 5v auf dem Board - das ist dieses NETBOARD von pollin. Kann mir da bitte noch mal jemand auf die Sprünge helfen?

Gruß, IceRage

Besserwessi
23.03.2009, 17:06
Die 30V bzw. 18 V sind die maximale Versorgungsspannung der OPs. Sowohl LM358 und TLC271 gehen auch mit nur 5 V als Versorung.

IceRage
23.03.2009, 17:14
Ah super, vielen Dank für deine Hilfe. Hab halt wenig bis keine Ahnung davon, kann nur ein bischen Schaltung lesen ;-).

Ich habe mal folgende Schaltung gefunden: http://www.progshop.com/versand/know-how/op-amp.html#05c

Ich würde die Schaltung für "Nichtinvertierender Verstärker" nehmen. Das müsste gehen oder?

Besten Dank auch an alle Anderen.


Gruß, IceRage

Besserwessi
23.03.2009, 18:45
Der Nichtinvertierende Verstärker ist die richtige Wahl. Bein LM358 und TLC271 aber beachten, das der Ausgang nur von etwa 0...3 V geht. Man wird also wohl mit 2,5 V Referenzarbeiten müssen. Wenn man auch negative Spannungen messen will, müßte man den Massepunkt für die Stromzange etwas anheben.

IceRage
23.03.2009, 19:41
Allerbesten Dank, dann kann ich erstmal zusehen wie weit ich komme. Würde mich dann evtl. noch mal melden.

thx, dir ;-)