PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Spannungsmessung mit A/D Wandler von AVR ATMEGA8



denk
17.05.2007, 21:50
Hallo alle,

ich möchte euch fragen und zwar es geht um die Spannungsmessung mit A/D Wandler von AVR ATmega8. Ich möchte eine Analogue signal (GLEICHSPANNUNG) an meinem PORT anlegen. Diese Spannung muss kleiner gleich meine Referenzspannung. Meine Frage lautet:

Welche Vorausetzung auf die ich aufpassen muss , um meine Port nicht zu schaden. Ich meine damit, welche schaltung muss ich bauen , um meine Platine zu schutzen. Brauche ich vielleicht einenTiefpass schaltung???

danke schön,

Jon
17.05.2007, 21:53
Die Spannung darf nicht größer als die Referenzspannung sein. Mehr gibt es da nicht zu beachten.

jon

avion23
17.05.2007, 22:31
Stromstärke unter dem maximalen des Ports, also 20mA.

Mirror81
17.05.2007, 22:46
Im Datenblatt sind auch noch einige Infos:


The ADC is optimized for analog signals with an output impedance of approximately
10 kΩ or less. If such a source is used, the sampling time will be negligible. If a source
with higher impedance is used, the sampling time will depend on how long time the
source needs to charge the S/H capacitor, with can vary widely. The user is recommended
to only use low impedant sources with slowly varying signals, since this
minimizes the required charge transfer to the S/H capacitor.
Signal components higher than the Nyquist frequency (fADC/2) should not be present for
either kind of channels, to avoid distortion from unpredictable signal convolution. The
user is advised to remove high frequency components with a low-pass filter before
applying the signals as inputs to the ADC.

Hubert.G
18.05.2007, 15:57
Die Spannung auf einem ADC-Port muss nicht kleiner sein als die Referenzspannung, sie darf nicht größer als VCC +0,5V sein. Ist die Spannung größer als AREF ist der Ausgabewert bei 8-bit 255 oder bei 10-bit 1023, sonst passiert nichts.
Hubert

denk
20.05.2007, 10:28
Ich danke euch alle für Ihre antworten.
Ich habe schon eure Vorschläge probiert. Die spannung und Ströme sind beide wichtige Parameter, um richtige Messungen zu machen.

Jetzt habe ich meine Aufgabe weiter verbreitet, in dem möchte ich meine Akku Spannung messen.
Aber das problem ist das meinen Mikrokontroller kann nur spannungen unter 5V auswerten oder messen . Mein Akku wird bis 6 V geladen. und möchte ich meine Akku zustand kontrollieren. Das heisst ich möchte die entladungspannung messen innerhalb einer Sekunde. Von Programmierung ist das nicht schwer. Aber jetzt meine Frage welche Schaltung muss ich entwicklen, um diese Spannung über 5 V zu messen??
und auf welche Parameter muss ich aufpassen??
ich danke euch nochmals.....
danke schön

Michael 123
20.05.2007, 10:48
Hallo,

am einfachsten ist es wenn man einen spannungsteiler nimmt. ABER da musst du dann VIEL berechnen.
(Wollte auch mal sowas bauen habe es dann aber aufgegeben wegen der vielen faktoren die da reingespielt haben)

mfg
Michael

Hubert.G
20.05.2007, 11:43
Wenn du nur die Akkuspannung messen willst musst du nicht viel berechnen. Ich weiss nicht welchen Akku du hast, du nimmst die max. Spannung die anstehen kann, Ladespannung beachten, und etwas Sicherheitsreserve. Das ergibt z.B. 7V, einen Spannungsteiler 2k und 5k, den 2k nach +, dann hast du genau 5V. Nachdem 2k und 5k ein Problem sind, einen 2k2 und anstelle des 5k einen Spindeltrimmer mit 10k, das Verhältnis dieser beiden Widerstände auf 2:5 eingestellt und fertig. Das Ergebnis des ADC mit 1,4 multipliziert und du hast die Akkuspannung.
Den Eingangswiderstand des ADC kannst du vernachlässigen, der ist lt. Datenblatt im MOhm-Bereich.
@Michael 123 Was muss man deiner Ansicht nach noch Berücksichtigen? Ich habe schon einige solcher Messungen aufgebaut und die funktionieren abgesehen von ADC-Auflösung und sonstigen Einflüssen recht genau.

Hubert

Michael 123
20.05.2007, 11:52
Z.B. den innenwiederstand des µC (stichwort belasteter spannungsteiler)

mfg
Michael

Dirk
20.05.2007, 13:10
Hallo Michael,

wenn dein 6V-Akku z.B. ein Bleiakku ist, dann kann die Ladeendspannung bis 7,2V gehen. Ich würde also den max. Messbereich bis 7,5V auslegen.

Spannungsteiler (Widerstände 1/4 W, 1% Metallfilm):
2,55 kOhm - 5,10 kOhm

Umrechnungsfaktor: 1,5


Z.B. den innenwiederstand des µC (stichwort belasteter spannungsteiler)
Das kann man vernachlässigen. Du kannst deine Berechnungen für Spannungsteiler am ADC-Eingang eines uC so anstellen, als ob du es mit einem unbelasteten Spannungsteiler zu tun hättest.

Gruß Dirk

denk
22.05.2007, 11:25
Hallo alle,

Ich habe erstmal mit spannungsteiler meinen Vérsuch gemacht und die Ergebnisse waren sehr gut .

Jetzt möchte ich eine Schaltunmg bauen, in dem ich meine Aufladespannung und Entladspannung kontrollieren.

Icvh habe mir so gedacht, dass ich 2 relais nehme und diese relais werden meinen Aufladzustand und Entladzustand kontrollieren.
Das heisst Relais1 wird für Entladung zuständig und die Relais 2 für Aufladungsvorgang zuständig.
jezt meine frage ich kann als ausgang von meinen Kontroller nur 5V liefern. Wie kann ich jetzt mein Relais steuern.
Noch einen Punkt: bei Entladevorgang geht meine Spannung bis 3 V dann muss ich meine Akku auf Ladevorgang schalten. Und wenn meine Akkuspannungv6 V erreicht hat dann muss ich auf entladevorgang schalten.
Wie kann mann das realisieren?? Ich danke euch immer für ihre Idee....

Michael 123
22.05.2007, 16:22
Hallo,

es gibt keleine Relais die du sogar dirkrekt an den µC hängen kannst. (Mach das aber nur wenn du dier SEHR sicher bist) Sonst musst du dir einen kleinen Transistor verstärker bauen oder einen IC aus der ULN sereie nehmen (8-fach Verstärker).
Beim "Kontrollieren" musst dir was passendes schreiben. Wenn du uns noch deine programmiersprache sagst können wir die Helfen. Es gibt nämlich viele. (Basik, C, Assambler)

mfg
Michael

denk
24.05.2007, 09:50
Hallo Michael,

ich werde diese Aufgabe mit c programmieren. Ich habe schon ein Programm geschrieben und habe auch eine Test gemacht. Ich habe 2 relais genommen und jeder relais ist mit eine Leuchtdiode verbunden. Und ich habe versucht diese relais zu schalten. das heisst ich habe eine Spannungswert in meinem PortC anglegt.Und wenn diese spannung unter eine Schwelle liegt dann schalte ich die Relais 1 dann wird eine Diode leuchten und wenn meine Spannung über einen béstimmten Wert liegt dann schaltet die Relais 2 und automatisch die Leuchdiode rot. Also das war für mich nur ein Testaufgabe , um diesen Umschaltsvorgang zu realisieren. Das relais braucht eine betriebspannung von 12 V, deshalb habe ich einen Transistor genommen und diese relais zu schalten.

Aber meine Aufgabe lautet wie folgt:
Ich möchte meine Akku entladen durch eine Leistungswiderstand, weil ich meine Akku schnell entladen möchte(ich werde eine Leistung wiederstand von 3R3 und eine Leistung von 50 W). Und meine Akkupack hat eine Spannung von 6V. Und wenn meine entladspannung (wird durch meine PORTC gemessen A/D Wandler) 3 V erreicht hat, dann muss ich meine Akku wieder von Aussen mit eine Ladegerät aufladen.Und wenn meine Aufladspannung 6V erreicht hat ,dann muss ich wieder meine Akku durch die Leistungswiederstand entladen.

Meine frage ist , Worauf muss ich aufpassen(meine ich ströme und Spannung und wie kann ich das vermeiden). Vielleicht muss ich die Schaltung aufzeichen um das gut zu klären.....

Michael 123
25.05.2007, 16:18
Hallo,

wenn du in c programmierst muss ich dich entäuschen. (Hab da überhaupt keine Ahunung) In Basic (Bascom) bin ich inzwischen sehr gut. Mit Basic kann ich dir also helfen.

mfg
Michael

denk
25.05.2007, 16:30
Hallo,
Ich danke für deine Hilfe. Aber ich möchte nur deine Idee nach der Schaltung haben.
Ich möchte nur gern wissen , ob whärend der Entladung wird nichts in meinem PORTC zu A/D wandler passieren. Du hast schon geschrieben, dass dere A/D Wandler hochohmig ist. Kannst du mir vielleicht einen Link geben. Ich möchte das gern wiessen. Ich habe einen Leistungwiderstand von 3,3 Ohm und einen Spannung von 4V(Nur erstmal zum Probieren).Das heisst mein Strom, der durch meinen Leitstungswiederstand ist ungefähr 1,21A. Ich werde die Spannung an meinem Akku kontrollieren.Aber ich habe einen Zweig einmal zum Widerstand und einmal zu meinem PORTC. Die Frage , ob der Entladstrom nur durch meinen Widerstand fliessen wird(weil meine A/D Hochohmig ist) . Oder der Strom wird auch zum PORTC Fliessen(In diesem Fall wird meine Kontroller Kapuut).
Danke schön

Hubert.G
25.05.2007, 17:21
Strom ist Abhängig von Spannung und Widerstand, der Strom in den ADC wird sich im nA-Bereich bewegen.
Aussehen wird deine Schaltung warscheinlich so:

Hubert

goara
26.05.2007, 16:56
zwischen welche ports muss ich denn ein poti schalten , wenn ich es las drehgeber verwenden will?? einfach den eingang auf vcc den ausgang auf gnd und das mittlere auf den adc eingang ?? is das so korrekt ?? und kann ich die refernazspannung einfach so lassen ?? danke shcon mal...

Hubert.G
28.05.2007, 14:39
@goara Ja, passt so, Referenzspannung intern auf VCC.
Hubert

denk
31.05.2007, 14:33
#define F_CPU3686400
#include <avr\io.h>
#include <avr/interrupt.h>
#include <avr/signal.h>
#include <avr/wdt.h>


SIGNAL (SIG_ADC)
{
unsigned int x,y;
double SPN;
while(1){
x=ADCL;
y=ADCH;
y=y<<8;
y=(y|x);
SPN=(y*4.6)/1024;


if(SPN <=2.0 ) //" LEDS einschalten
{
ADCSRA=0x4d;
PORTB=0x03;
ADMUX=0x01;
ADCSRA=0xcd;
}
else if(SPN > 3.7 )
{
PORTB=0x00;//beide LEDa ausschalten
ADCSRA=0x4d;
ADMUX=0x00;
ADCSRA=0xcd;
}

}
}



int main (void)
{
DDRB=0xFF;
DDRD=0xFF;
ADMUX=0x00;
ADCSRA=0xcd;
sei();
return 0;
}


Ich ahbe einen Programm geschrieben ,um messung von 2 kanäle zu starten. Aber diese Programm macht nur led einschalten. Die Spannungen habe ich in POrtC angelegt. Ich ahbe zwei POTI einen mit PORTc .0 und andrer mit pin 1 verbunden. Am anfang messt er die Spannung vom PORTc.o und dann schltet die led . aber wenn ich die andere Poti anlege bei PORTc.1 macht er keine reaktion. kann man vielleicht helfen oder diese Programm korrigieren.
danke schön

denk
31.05.2007, 14:46
Meine Ziel ist , dass wenn die Spannung im PORTC.0 kleiner als 2V dann müssen die Zwei LEDs leuchten und gleichzeitig möchte ich die Messung am anderen kannal starten PORTC.1. und wenn die Spannung im kanalPORTC.1 grösser als 3,7 dann müssen die LEDS ausgechaltet sein.Aber er macht nur denn ersten Fall. Ich habe das Probiert, in dem ich zwei Potis an den beiden eingängen von PORTC gechlossen habe.
danke schön

Hubert.G
01.06.2007, 15:42
#define F_CPU 3686400
#include <avr/io.h>
#include <avr/interrupt.h>
//#include <avr/signal.h>
#include <avr/wdt.h>


ISR(ADC_vect)
{
unsigned int y;
double SPN;
//while(1){
//x=ADCL;
y=ADC;
//y=y<<8;
//y=(y|x);
SPN=(y*4.6)/1024;


if(SPN <=2.0 ) //" LEDS einschalten
{
//ADCSRA=0x4d;
PORTB=0x03;
ADMUX=0x41;
ADCSRA=0xcd;
}
else if(SPN > 3.7 )
{
PORTB=0x00;//beide LEDa ausschalten
//ADCSRA=0x4d;
ADMUX=0x40;
ADCSRA=0xcd;
}

}
//}



int main (void)
{
DDRB=0xFF;
DDRD=0xFF;
ADMUX=0x40;
ADCSRA=0xcd;
sei();
for(;;){}
}


Ich habe das im AVR-Studio simuliert.
Was verwendest du für eine Referenzspannung, ich habe auf AVCC intern geschaltet, das müsstest du dir eventuell umstellen.


Hubert

denk
01.06.2007, 17:20
Hallo Hubert,

Erstmal danke schön für deinen Vorschlag. Ich ahbe es probiert ,aber leider hat es nicht geklappt. Und zwar habe ich auch mit AVR Studio und meine Programm hat nichts getan. Ausser die beiden LEDs waren angeshaltet . Und wenn ich den anderen POTI umdrehe(er ist mit PORTC.1 verbunden), um die Spannung über 3.7 zu erhöhen.Leider passiert nicht.Normalweise müssen die LED Aus weil die Kannal 1 ist geschaltet. ich bitte dich ,dass du nochmals das Programm prüft.etwas stimmt nicht.




Für deine Frage ich nutze einen Referenzspannung vom 4.6 V .Diese Spannung muss ich immer mit Multimeter messen. Diese Spannung ist Variabel vom PC zu anderen .Bei manchen ist 5V und bei anderen ist 4.6V

izaseba
01.06.2007, 17:57
Hallo,
1. Was passiert denn, wenn die Spannung mal zwischen 2 und 3,7 V liegt ?
es wird keine Messung mehr gemacht, oder ?
lagere mal


ADCSRA=0xcd;
aus der if else if Abfrage raus, damit die Wandlung immer gestartet wird.
Oder benutze mal den freilaufenden ADC
2. Anstatt mit Gleitkomma zu rechnen würde ich feste ADC Werte nehmen.

Gruß Sebastian

Hubert.G
01.06.2007, 19:26
#define F_CPU 3686400
#include <avr/io.h>
#include <avr/interrupt.h>
//#include <avr/signal.h>
#include <avr/wdt.h>


ISR(ADC_vect)
{
unsigned int y;
double SPN;
//while(1){
//x=ADCL;
y=ADC;
//y=y<<8;
//y=(y|x);
SPN=(y*4.6)/1024;


if(SPN <=2.0 ) //" LEDS einschalten
{
//ADCSRA=0x4d;
PORTB=0x03;
ADMUX=0x41;
ADCSRA=0xcd;
}
else if(SPN > 3.7 )
{
PORTB=0x00;//beide LEDa ausschalten
//ADCSRA=0x4d;
ADMUX=0x40;
ADCSRA=0xcd;
}
else{
ADCSRA=0xcd;
}
}
//}



int main (void)
{
DDRB=0xFF;
DDRD=0xFF;
ADMUX=0x40;
ADCSRA=0xcd;
sei();
for(;;){}
}

Wenn keine der beiden Bedingungen erfüllt ist wird der ADC nicht mehr gestartet, daher noch ein else.

Hubert

denk
01.06.2007, 20:01
Hallo Hubert,
Danke nochmal für die Antwort,
Ich möchte dir gern noch die Schaltung schiken, die ich programmieren möchte . Ich habe schon die Schaltung im Paint gezeichnet. Aber ich weiss nicht wie kann ich diese Datei anhängen. Weisst du vielleicht wie das geht? ,um dir die Schaltung schiken zu können
Danke

denk
01.06.2007, 20:11
Ich danke dir nocheinmal jetzt hat das Programm gut geklappt. und war nur eine Probe für mich bevor ,dass ich mit meine Akku aufgabe anfange.
deshalb ich möchte dir gern meine Zeichnung schicken...Aber ich weiss nicht genau wie das geht, um diese datei aufzuhängen.
danke schön

Hubert.G
01.06.2007, 20:58
Wenn du nicht das Fenster für kurz Antwort nimmst, sondern noch etwas weiter nach unten gehst, kommt ein Button antwort erstellen, dort kannst du auch ein Attachment anhängen.
Hubert

denk
01.06.2007, 21:53
Hallo Hubert,

die Schaltung wie du siehst möchte ich Programmieren. Mit dieser Schaltung werde ich meine Akku Spannung kontrollieren und kann ich auch den Entladvorgang und Ladevorgang Starten. Deshalb habe ich erstmal das Programm mit LEDs gemacht dann kann ich das in meiner Schaltung experementieren. Die Leuchtdiode dient als Anzeige für Ladevorgang und wenn diese diode nicht leuchtet das heisst bin ich beim Entladevorgang. Um diese vorgang noch gut zu kontrollieren werde ich noch einen Multimeter parallel zu meinem Akku und werde ich die Spannung änderung anschauen.
jetzt werde ich erstmal mit einem Akku Pack von 4V und diese werde ich versuchen zu entladen und Aufladen.
Gestern habe ich Probiert nur in einem festen Punkt zu messen und zwar habe ich nur einen eizigen Eingang zu meinem A/D wandler benutzt. diese eingang kommt von meinem Akku direkt zu meinem PORTC.0 .beim Entladung klappt gut .ab einer Spannung von 2.0 werde ich auf aufladung umschalten .aber wenn meine AKKU die Spannung 3.7 erreicht hat passiert nicht meine LED bleibt an. UND er versucht auszuschalten aber das Klappt nicht.
dehalb habe ich versucht mit 2 kanäle zu testen aber ich muss das Montag versuchen.dann werde ich wissen wie das geht weiter.

denk
04.06.2007, 23:27
Hallo alle,

Ich habe noch eine andere Frage und zwar:
Bis jetzt ich schalte meine Relais mit mikrokontoller aber mit einem Verstärker (Transistor) . Meine I/O Port liefern einen Strom von 40 mA .Diese Strom ist nicht ausreichend , um meinen Relais anzuschalten.
D

denk
04.06.2007, 23:30
Deshalb frage ich euch ,ob jemand einen Relais kennt, den ich direkt anschalten kann ohne Schaltungsaufwand.
Wenn jemand hat schon mit diesem Relais gearbeitet oder eine kennt , ich bitte euch , um mir die Name zu geben.
ich bedanke mich bei euch alle......

Hubert.G
05.06.2007, 11:21
Reichelt "DIP7212-D 5V"
Conrad "50 45 13"
Das wären Relais die man direkt anschliessen könnte, Spulenwiderstand ~500Ohm. Freilaufdiode nicht vergessen.
Ich weiss nicht warum du dich so gegen einen Transistor sträubst. Diese Relais haben nur 0,5A Kontaktbelastung, ausserdem sollte es mit einem Relais auch gehen wenn die Programmierung passt.
Hubert

denk
05.06.2007, 22:26
Hallo Hubert,

Auf jedenfall hast du recht ....Ich habe nur mit einem Relais die Schaltung emacht und das hat gut geklappt. Aber mit einem Relais ist man entweder bei Entladung oder Aufladung. Deshalb habe ich mich auch noch eine andere einfache Schaltung gedacht, in dem ich meine Akku anschliesse und per Interrupt werde ich die Messung starten oder unterbrechen. Dafür brauche ich 2 Relais(schliesser) ,die ich per kontoller kontrollieren kann. Für diese Aufgabe werde ich versuchen eine Platine zu bauen , um meine Akku verhalten zu wissen. Ich habe schon auch letzte Woche versucht mit einem Anderen Relais, der 12 V Speisspannung benötigt. Aber diese Relais ist für mich eine grosse Schaltungsaufwand. Das heisst : ich muss noch externe 12 V Spannung besorgen. Deshalb möchte ich fast alles nur mit Mikrokontroller steuern. Ich danke dir für deinen Vorschlag.

denk
23.06.2007, 20:52
Hallo Leute,

Ich möchte euch fragen und zwar nach LCD Steuerung. Ich habe Meine LCD an meinem Mikrokontroller angeschlossen. Und möchte ich die Leerlaufspannung Ausgeben. Aber ich habe geschafft nur Dezimal Zahlen auszugeben.

Meine frage ist: Wie kann ich eine Fliesskommazahlen ausgeben.Oder anders gefragt: Welche Methode muss ich verfolgen um eine Fliesskommazahl an meiner LCD auszugeben. Ich habe eine LCD Kontroller KS0070.
Ich danke euch und hoffe ,dass ich von euch lösungen oder Vorschläge bekäme.