Vorwort
Bitte lesen Sie diese sorgfältig durch. Ich stecke viel Zeit hinein und versuche wirklich zu verstehen. Ich habe zahlreiche Artikel über Gleichstrom- und Wechselstromkreise gelesen und an zahlreichen Stellen gesucht, um diese Antwort zu erhalten, aber ich bin mir nicht sicher, ob ich die richtigen Begriffe kenne, um die es geht.
Ja, ich habe auch gegoogelt: "Kann ein Gleichstromkreis jemals eine Frequenz haben?" Und die Antworten, die Sie erhalten, sind, dass Gleichstromkreise eine Frequenz von 0 haben.
Hintergrund
Ich versuche, eine Schaltung zu bauen, die eine Eingangsfrequenz untersucht und in MIDI umwandelt. Hier ist der Schaltplan der Schaltung von der offiziellen Arduino-Site (die an mindestens einer Stelle falsch ist):
Fehler erklärt
Sie können sehen, dass der ursprüngliche Designer aus irgendeinem Grund die Ausgabe von OpAmp2 gezeichnet hat, obwohl es keine Eingabe hat.
Mein Testversuch
Da ich versucht habe, den Code aus diesem Artikel zu testen. Ich wollte nur einige Werte von A0 ablesen. Nur um zu sehen, wie das Ding funktioniert, damit ich anfangen könnte, die offensichtlich fehlerhafte Schaltung zurückzuentwickeln.
Ich werde nicht den gesamten Code reproduzieren, aber hier ist der wichtige Teil: Hinweis : Der Code stammt aus dem Artikel, in dem ich den Schaltplan erhalten habe ( https://www.arduino.cc/en/Tutorial/AnalogToMidi )
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
pinMode(11, OUTPUT);
// Set available bandwidth between 75Hz and 600Hz
meter.setBandwidth(75.00, 600.00);
// Intialize A0 at sample rate of 45kHz
meter.begin(A0, 45000);
}
void loop() {
float frequency = meter.getFrequency();
Serial.prinln(frequency);
if (frequency > 0)
{
// Find the index of the corresponding frequency
int noteIndex = searchForNote(frequency);
int note = notePitch[noteIndex];
Im Grunde ging es mir nur darum, die Frequenz zu lesen, die ich von der Methode meter.getFrequency() erhalten habe, und sie auf dem seriellen Monitor auszudrucken.
Ich habe folgende Schaltung aufgebaut:
Simulieren Sie diese Schaltung – Mit CircuitLab erstellter Schaltplan
(Jetzt) Offensichtliche Ergebnisse
Also habe ich den Code gestartet und den seriellen Monitor geöffnet und angefangen, den Pot-Regler zu drehen, aber wie Sie wahrscheinlich bereits wissen, druckt der serielle Monitor nur -1,0 (negativ 1,0).
In einem Gleichstromkreis gibt es keine Frequenz
Zuerst war ich sehr verwirrt. Warum würde es nie einen anderen Wert bekommen, obwohl sich der Spannungseingang änderte?
Dann traf es mich. Es gibt keine Frequenz in einem Gleichstromkreis.
Die Frage
Wie würde der Code jemals die Frequenz von der Schaltung lesen? Wie könnte es jemals eine Frequenz in einem Gleichstromkreis geben? Wie ist das möglich?
Ich verstehe, dass ich die Arbeit des Eingangs in der ursprünglichen Schaltung (Mikrofon zu Operationsverstärker) völlig ignoriere, aber ich verstehe auch, dass der Eingang nur eine Reihe von Strömen und Spannungen ist, die sowieso einfach vom Operationsverstärker verstärkt werden.
Aus Impulsen wird Frequenz?
Ist das der Punkt, dass sie zu Impulsen werden und diese Impulse eine Frequenz haben?
BEARBEITEN: GetFrequency-Code hinzufügen Sie können den Quellcode des ArduinoFrequencyMeter sehen unter: https://github.com/arduino-libraries/AudioFrequencyMeter/blob/master/src/AudioFrequencyMeter.cpp
Hier ist die Quelle der Methode getFrequency():
float AudioFrequencyMeter::getFrequency()
{
float frequency = -1;
if (checkMaxAmp > amplitudeThreshold) {
frequency = (float)(sampleRate / period);
if ((frequency < minFrequency) || (frequency > maxFrequency)) {
frequency = -1;
}
}
return frequency;
}
Es ist interessant, dass, wenn checkAmp nicht größer als amplitudeThreshold ist, es -1 zurückgibt. Es ist also wahrscheinlich, dass dies in dem Fall passiert, in dem ich alle -1 sehe.
Aufgrund der Art des Codes können Sie dieses Problem jedoch nicht von dem Problem unterscheiden, dass die Frequenz außerhalb des Bereichs liegt – da die Frequenz außerhalb des Bereichs auch denselben Wert zurückgibt.
Ich werde den Code wahrscheinlich irgendwann ändern und ihn für jeden Fall -1, -2, -3 zurückgeben lassen.
"DC" ist so viel wie "reibungslos". Es gibt zwei Möglichkeiten, sie zu definieren:
DC ist Nullfrequenz. Reibungslos ist null Reibung.
Jede Frequenz, die für uns zu klein ist (dh zu lange Zeit), ist Gleichstrom. Jede Reibung, die zu klein ist, als dass wir uns um sie kümmern könnten, ist reibungslos.
Definition Nr. 1 ist eine schöne theoretische Definition. Es gibt keine Zweideutigkeit darüber, was es bedeutet: Null ist Null. Das findet man oft in Lehrbüchern.
Definition Nr. 2 ist praktischer. Kein natürlicher Zyklus hat eine Nullfrequenz, da seine Periode unendlich lang wäre. Jedes mechanische System hat eine gewisse Reibung. Aber in beiden Fällen können diese Effekte so gering sein, dass wir uns nicht darum kümmern. Wir können sie also so behandeln, als ob sie Null wären.
Welche Frequenz ist also die Grenzfrequenz für DC? Sie variiert mit jedem Problem und ist manchmal Ansichtssache. Ein Teil davon, ein EE zu sein, ist zu wissen, wann Sie davon ausgehen können, dass sich die Dinge im stabilen Zustand befinden.
Was Ihre Arduino-Frage betrifft ... Sie geben ihm ein Signal und es versucht, die Frequenz davon zu bestimmen. Es ist keine Magie; Da ist ein Algorithmus beteiligt. Der Algorithmus hat eine minimale und maximale Frequenz; Sie haben Recht, dass es -1 zurückgibt, wenn das Signal über der maximalen oder unter der minimalen Frequenz zu liegen scheint.
Hier ist der Grund. Angenommen, die Software kann Frequenzen von nur 1 Hz lesen. Das heißt, im schlimmsten Fall müssten Sie 1 Sekunde warten (*Anmerkung 1), um die Frequenz zu finden.
Angenommen, Sie ändern die Mindestfrequenz auf 0,1 Hz. Die Wartezeit im schlimmsten Fall beträgt 10 Sekunden. Bei 0,001 Hz, 1000 Sekunden. Wenn sich die Frequenz der "idealen" Nullfrequenz von DC nähert, wird die Wartezeit unendlich.
Sie wollen nicht ewig warten, bis der Algorithmus Ihnen sagt, dass Sie bei DC sind. Daher wird -1 zurückgegeben, es sei denn, es hat eine Frequenz im richtigen Bereich gefunden.
(*Anmerkung 1) Ja, vielleicht 0,5 Sekunden wegen der Nyquist-Rate. Es ändert immer noch nichts an meinem Argument, dass die Wartezeit unendlich wird.
Simulieren Sie diese Schaltung – Mit CircuitLab erstellter Schaltplan
Abbildung 1. Potentiometeranschluss.
Ihre Potentiometer-Testschaltung ist falsch verdrahtet. Wenn in Abbildung 1a das Poti auf Minimum gedreht ist, schließen Sie die 5-V-Versorgung gegen GND kurz. Verdrahten Sie es stattdessen wie in Abbildung 1b, sodass A0 von 0 auf 5 V gewobbelt werden kann. Nur 5/10k = 0,5 mA fließen durch R2.
Wie würde der Code jemals die Frequenz von der Schaltung lesen? Wie könnte es jemals eine Frequenz in einem Gleichstromkreis geben? Wie ist das möglich?
Es ist möglich und in einigen Designs inhärent und in anderen Schaltungen absichtlich konstruiert.
Gleichstromquelle
Simulieren Sie diese Schaltung
Abbildung 1. Ein netzbetriebenes DC-Netzteil liefert einen DC-Ausgang, jedoch mit einer Welligkeit von 100 oder 120 Hz. (Aus meiner Antwort auf Wie funktioniert der Filterkondensator in einer Gleichrichterschaltung? ).
Abbildung 2. Simulatorergebnisse. (Klicken um zu vergrößern.)
Audioverstärker
Simulieren Sie diese Schaltung
Audioverstärker benötigen eine DC-Vorspannung für das Audiosignal (das AC ist), wenn der Verstärker von einer Single-Ended-Stromversorgung gespeist wird.
Abbildung 3. Der Operationsverstärker wird von einer einzigen Versorgung gespeist, sodass er keine negativen Eingangssignale akzeptieren oder negative Spannungen ausgeben kann.
Die Lösung für Abbildung 3 lautet:
Einfache alte Telefonanlage (POTS)
Abbildung 4. Ein GPO 746-Telefon mit Wählscheibe überträgt Wechselstrom, der der 50-V-Gleichstromversorgung überlagert ist.
Ein weiterer bekannter Fall ist das Standardtelefon. Das Telefon wird mit 50 V Gleichstrom von der Vermittlungsstelle versorgt, aber Audio wird dem Gleichstrom überlagert und über die Leitung übertragen.
brhans
PlasmaHH
raddevus
raddevus
HandyHowie
raddevus
raddevus
PlasmaHH
Elliot Alderson
raddevus