mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik mehrere Sinussignale abtasten mit ATmega


Autor: Hendrik (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Mikrocontrollerfreaks!

Erstmal möchte ich Eure Seite loben. Sie ermöglicht den Einstieg auch 
für Anfänger wie mich in das Genre der Mikrocontroller.
So nun zu meinem Problem:
Ich möchte mit einem ATmega 8 an den sechs Eingangsports ADC0 bis ADC5
(PDIP 28 Gehäuse) unterschiedliche Sinusimpulse messen. Diese stammen 
von einem Präzisions-OPV. Dieser erfasst eingangsseitig die 
Differenzspannung über Strombegrenzungswiderstände von einem 
Leistungs-OPV und verstärkt sie entsprechend. Hierbei handelt es sich um 
die positive Sinus-Halbwelle. Der Differenzverstärker verstärkt diese 
und gibt diese dann verstärkt an den ATmega heraus. Dabei wird zwischen 
zwei wichtige Sinus-Spitzenwerte unterschieden. 3,7Volt, d.h. der 
Leistungs-OPV ist noch nicht in Strombegrenzung und 4,0V der 
Leistungs-OPV ist in Strombegrenzung. Realisiert wird das für 6 
Leistungs-OPV, d.h. 3x Strom und 3x Spannung. Somit muss ich 6 
unterschiedliche Pegel mit dem ATmega messen können.  Mein Problem ist 
hierbei, dass die Frequenz der Sinusimpulse variabel zwischen 40 – 60 Hz 
ist (T zwischen 16 und 25 Millisekunden), weiterhin sind sie 
gegeneinander frei phasenverschiebbar. Die Cursor-Messung der 
Ausgangssignale des Differenzverstärkers mittels Pspice ergab, dass der 
Spitzenwert der Halbwelle eine Zeitdauer von 1,4ms aufweist. Mein 
Grundgedanke war pro Kanal mehrere Abtastungen durchzuführen in der „ 
Hoffnung“ das der Spitzenwert bei der Abtastung „irgendwann“ erwischt 
wird. Anschließend soll auf den nächsten Kanal umgeschaltet werden 
–Abtastung, auf den nächsten Kanal umschalten usw. Misst der ATmega 
mehrere aufeinander folgende Spitzenwerte größer 3,9V z.B. soll er 
ausgangsseitig eine Meldung erzeugen (LED leuchtet). Mehrere Impulse 
sollen es schon sein, damit eine Schaltberuhigung der Überlastanzeige 
erreicht wird (Einschaltimpulse unterdrückt werden).
Der Blick und die Übersetzung aus dem Datenblatt ergibt eine maximale 
ADC Clock von 200kHz. Dies bedeutet bei minimal 13 Impulsen zur Wandlung 
eine Zeit von 65 Mikrosekunden. Jetzt ist aber weiter angegeben, Zitat 
Datenblatt: “The first conversion after the ADC is switches on takes 25 
ADC clock cycles in order to initialize the analog circuitry“.  Was 
bedeutet das? Erstmaliges Einschalten des ADC nach Kanalumschaltung und 
es werden 25 x 5Mikrosekunden=125Mikrosekunden benötigt?? Eine 
Synchronisation ist nicht vorgesehen, ich wüsste auch nicht wo ich diese 
anschließen sollte, der Schaltungsaufwand sollte ebenfalls so gering wie 
möglich sein. Habe diese Schaltung mit diskreten BE schon aufgebaut, 
aber der Aufwand (Zähler, NE555, usw.) ist viel zu groß (Platzbedarf 
eine Platine 200x100mm) so dass ich eine Lösung mit dem ATmega verfolge.
Weiterhin interessiert mich, ob die Sache der Abtastung überhaupt 
funktioniert, da die Sinushalbwelle sich im Grunde ständig ändert (ist 
kein ständig anstehender Pegel), und somit das Abtastergebnis ständig 
verfälscht.

Vielen Dank für Eure Hilfen und Tipps

Gruß
Hendrik

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Hendrik,
so wie ich dich verstanden habe geht es primär nur um die Feststellung 
das 3.9V überschritten werden.
Wenn du also nich an der Aufzeichnung der Signalform interessiert bist, 
dann würde ich den Analog Comparator verwenden auf den ich die zu 
messenden Kanäle mittel jeweils einer Diode gemeinsam aufschalte.
Das ist schneller und du musst nur einen Pin anschließen und abfragen.

Durch die Dioden reduziert sich deine Abfragespannung noch um 0,7V.

Gruß
Stefan

Autor: Hendrik (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Stefan!

Wenn ich alle Eingänge über eine Diode beschalte, kann ich keine direkte 
Meldung mehr generieren, welcher einzelne Leistungs-OPV (L1, L2, I1, 
usw.) in Überlast ist.

Gruß
Hendrik

Autor: Michael Waiblinger (wiebel42)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Aber du kannst jeden einzelnen auf einen PCINT pin geben dann bekommst 
du zwar auch nur einen Interrupt kannst aber auswerten wer dafür 
verantwortlich ist. Das erfordert allerdings afaik einen neueren AVR.
Intern hast du, glaube ich, nicht genügent Komperatoren um das alles zu 
erledigen.  -wiebel

Autor: Hendrik (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo !

Habe mal bei Atmel nachgeschaut. Der AT90PWM3 besitzt drei 
Analogkomparatoren. Mit zwei Stück von der Sorte müsste es klappen. 
Leider haben diese SOIC Gehäuse, wo wieder teuere Adapter fällig werden. 
Gibt es noch andere ATMEL-Typen mit 3 Analog-Komparatoren, die ein 
DIP-Gehäuse besitzen??

Danke

Hendrik

Autor: H. W. (digger72)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich würde die eigentliche Aufgabe analog lösen und den AVR nur die
Auswertung machen lassen.
Wenn ich das richtig verstanden habe interessieren nur
die Strom- und Spannungsspitzenwerte.
Dazu muss man nicht die ganze Halbwelle durch den ADC jagen.
Warum nicht einfach einen Opamp als peak-Meter beschalten
und dann auf den ADC ?
Dann hat sich auch die Problematik mit den 1,4 ms erledigt.

Gruss
Digger

Autor: Hendrik (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!

Denke ich habe eine Problemlösung. Die Sache mit den Komparator ist, 
denke ich eine lösbare Sache. Beim Studium des Datenblattes ist mir 
aufgefallen, dass man über den ADC Multiplexer (ATmega8) die 
verschiedenen Eingänge (ADC0-ADC5 bei PDIP28) an den negativen Eingang 
des Komparators schalten kann. Damit wäre eine Zuordnung für jeden Kanal 
möglich. Denkbarer Ansatz: An den positiven Pin des Komparators Referenz 
(z.B. über Spannungsteiler U=3,9V) anlegen. Über den Multiplexer ADC 0 
(z.B. I1) 100ms jeden Kanal  abfragen. Erfolgt Überschreitung, Wert ins 
Register schreiben. Jeden weiteren Kanal 100ms abfragen und Ergebnisse 
in die dazugehörigen Register schreiben. Liegen beim zweimaligen 
Abfragen eines Kanals immer noch Überschreitungen an, dann wird die 
entsprechende "Überlast" LED gesetzt, und mit einer Zeitschleife 
entsprechend lang gesetzt. In der Zwischenzeit wird das betroffene 
Register zurückgesetzt und das Abfragen der Kanäle geht weiter. Die 
Zeitschleife der LED wird dabei solange gesetzt, dass in der 
Zwischenzeit ein zweimaliges Abfragen des betroffenen Kanals stattfinden 
kann, und dieser ggf. die Zeitschleife der LED weitergesetzt lässt (wenn 
immer noch Überlast anliegt).  Liegen dagegen beim zweimaligen Abfragen 
eines Kanals die Überlastimpulse nicht mehr an, wird der Wert aus dem 
Register gelöscht (z.B. Einschaltvorgang ist beendet).
Frage:
Muss bei Verwendung des Komparators der AVCC genauso wie bei Verwendung 
des A/D Wandlers mit einem Kondi beschaltet werden??
Ich habe darüber nichts im Datenblatt gefunden.

Vielen Dank

Gruß
Hendrik

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.