-         

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 14

Thema: Strommessung

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    12.12.2007
    Beiträge
    19

    Strommessung

    Anzeige

    Hallo

    ich habe mal folgenden Code ausprobiert:

    Code:
    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

  2. #2
    Erfahrener Benutzer Robotik Visionär Avatar von Hubert.G
    Registriert seit
    14.10.2006
    Ort
    Pasching OÖ
    Beiträge
    6.186
    Die ADC-Frequenz ist 125kHz, 16000000 / 128

    Code:
    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.
    Grüsse Hubert
    ____________

    Meine Projekte findet ihr auf schorsch.at

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    12.12.2007
    Beiträge
    19
    Super, vielen Dank dir.

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

    Gruß, IceRage

  4. #4
    Erfahrener Benutzer Robotik Visionär
    Registriert seit
    26.11.2005
    Ort
    bei Uelzen (Niedersachsen)
    Beiträge
    7.942
    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.

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    12.12.2007
    Beiträge
    19
    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.

  6. #6
    Erfahrener Benutzer Robotik Visionär
    Registriert seit
    26.11.2005
    Ort
    bei Uelzen (Niedersachsen)
    Beiträge
    7.942
    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.

  7. #7
    Neuer Benutzer Öfters hier
    Registriert seit
    12.12.2007
    Beiträge
    19
    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.

  8. #8
    Erfahrener Benutzer Robotik Visionär Avatar von Hubert.G
    Registriert seit
    14.10.2006
    Ort
    Pasching OÖ
    Beiträge
    6.186
    Das wird nicht gehen, lt. Datenblatt ist VREF min. 2V
    Grüsse Hubert
    ____________

    Meine Projekte findet ihr auf schorsch.at

  9. #9
    Neuer Benutzer Öfters hier
    Registriert seit
    12.12.2007
    Beiträge
    19
    Also dann mit LM358 oder TLC271 auf 10 Fach verstärken?
    Was ist denn da so gebräuchlich, dann mach ich das einfach so.

  10. #10
    Neuer Benutzer Öfters hier
    Registriert seit
    12.12.2007
    Beiträge
    19
    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

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •