Hallo,
ich habe hier eine alte AD-Karte auf der zwölf AD654 verbaut sind.
(https://www.analog.com/media/en/technical-documentation/data-sheets/AD654.pdf)
Die maximale Frequenz pro Kanal liegt bei 4 kHz. Ich würde gerne die
negativen/positiven Flanken zählen und anschließend auf einem
Webserver(wie das geht ist mir klar) anzeigen lassen. Jetzt zur Frage:
Wie kann ich dies am besten mit einem Mikrocontroller bewerkstelligen?
Ich habe hier ein paar Arduinos(Due,Nano,IoT33) und ein STM32F401RE
Board rumliegen.
Was ist denn die niedrigste Frequenz und wie hoch soll die Auflösung
sein?
Der STM32F401 bietet die einfachste Lösung: drei Timer mit jeweils vier
Capture-Eingängen (z.B. TIM2 - TIM4) liefern die Periodendauer, die sich
leicht umrechnen läßt.
Nix pollen!
Paul schrieb:> Wie kann ich dies am besten mit einem Mikrocontroller bewerkstelligen?
Verteile deine 12 Signale auf zwei GPIO Ports, lies die
interruptgesteuert alle 100µs ein, erkenne durch Vergleich mit dem
vorherigen Zustand die Flanken. Dann musst du sie nur noch zählen und
die 12 Zählerstände für den Webserver zur Verfügung stellen.
m.n. schrieb:> Was ist denn die niedrigste Frequenz und wie hoch soll die> Auflösung> sein?>> Der STM32F401 bietet die einfachste Lösung: drei Timer mit jeweils vier> Capture-Eingängen (z.B. TIM2 - TIM4) liefern die Periodendauer, die sich> leicht umrechnen läßt.> Nix pollen!
Die niedrigste Frequenz liegt irgendwo um die 10 Hz. Ich möchte jede
negative bzw. positive Flanke erkennen. Also von 10 Hz bis 4 kHz. Der
Ausgang der AD654 ist immer für ~1-5 Sekunden aktiv
Paul schrieb:> Ich würde gerne die> negativen/positiven Flanken zählen
Da der IC eine Frequenz ausgibt, sollte man auch über die Periodendauer
messen und nicht nur über die Pulsbreite.
Solche ICs haben oft einen hohen Jitter, daher sollte man über mehrere
Perioden messen, um einigermaßen Auflösung zu erhalten.
Solche Notlösungen würde ich heutzutage aber nicht mehr einsetzen. Es
gibt reichlich echte 16Bit ADCs mit Eingangsmultiplexer.
Ich nehme gerne den MAX1300 (±16.5V Overvoltage Tolerant Inputs).
Peter D. schrieb:> Da der IC eine Frequenz ausgibt, sollte man auch über die Periodendauer> messen und nicht nur über die Pulsbreite.
Das hängt aber auch davon ab, welche Auflösung und Messzeit man haben
will oder muss.
Im Notfall kann man dann Frequenz und Periodendauer messen und je nach
Ergebnis den besseren Wert nehmen.
Dietrich L. schrieb:> Im Notfall kann man dann Frequenz und Periodendauer messen und je nach> Ergebnis den besseren Wert nehmen.
Steht denn im Datenblatt auch eine Formel für die Pulsdauer bezüglich
der Eingangsspannung?
Ich würde nur die Größe auswerten, die auch explizit lt. Datenblatt
dafür vorgesehen ist.
Peter D. schrieb:> Pulsdauer
Hier geht es um die Periodendauer, nicht Pulsdauer.
Natürlich hängt das Ergebnis auch davon ab, wie stabil die Frequenz ist.
Ich habe jetzt nicht nachgeschaut, ob da was beim AD654 spezifiziert
ist.
Außerdem: man muss ja nicht unbedingt die Dauer einer Periode messen,
es dürfen auch mehrere sein.
Dietrich L. schrieb:> Hier geht es um die Periodendauer, nicht Pulsdauer.
Deshalb hab ich doch gesagt, daß man nicht negative und positive Flanken
zählen sollte.
Peter D. schrieb:> Dietrich L. schrieb:>> Hier geht es um die Periodendauer, nicht Pulsdauer.>> Deshalb hab ich doch gesagt, daß man nicht negative und positive Flanken> zählen sollte.Zählen darf man sie schon (auch wenn es unnütz ist), aber man darf
halt nicht die Zeit zwischen negativer und positiver Flanke messen ;-)
Peter D. schrieb:> Dietrich L. schrieb:>> Hier geht es um die Periodendauer, nicht Pulsdauer.>> Deshalb hab ich doch gesagt, daß man nicht negative und positive Flanken> zählen sollte.
Ich möchte aber gerne die negativen Flanken zählen. Das alte Interface
bestand aus einem kaskadierten 3-Digit BCD-Counter, der eben genau die
Anzahl der negativen Flanken anzeigt, weil er bei einer negativer Flanke
zählt. Mir geht es nicht um die Frequenz als solche.
Paul schrieb:> Ich möchte aber gerne die negativen Flanken zählen. Das alte Interface> bestand aus einem kaskadierten 3-Digit BCD-Counter, der eben genau die> Anzahl der negativen Flanken anzeigt, weil er bei einer negativer Flanke> zählt.
Das ist ja auch egal, ob du die positiven oder die negativen Flanken
zählst. Nur beide macht keinen Sinn.
m.n. schrieb:> Sondern?
Hatte ich schon vermutet: Es geht darum, bis zu 12 Spannungsmessungen
zu verarbeiten. Die ominöse Messkarte hat dooferweise U-zu-f-Wandler...
Mit dem Arduino geht das auch, wenn man etwas mehr an der Hardware
arbeitet.
Die AVRs können Pin Change Interrupt, mit einer ISR pro Port bzw.
Interrupt Gruppe.
Da würde ich mir zwei Ports nehmen (16 Eingänge). In der ISR dann
jeweils ermitteln welcher Pin die fallende Flanke ausgelöst hat und
hochzählen. Dazu braucht man einen Zwischenspeicher, die Interrupts
sagen leider nicht von sich aus welcher Pin das war.