Prefacio
Por favor, lea esto detenidamente. Le dediqué mucho tiempo y realmente estoy tratando de entender. He leído numerosos artículos sobre circuitos de CC y CA y busqué en numerosos lugares para obtener esta respuesta, pero no estoy seguro de conocer los términos correctos involucrados.
Además, sí, busqué en Google "¿puede un circuito de CC tener frecuencia?" Y las respuestas que obtiene son que los circuitos de CC tienen una frecuencia de 0.
Fondo
Estoy intentando construir un circuito que examine una frecuencia de entrada y la convierta a MIDI. Aquí está el esquema del circuito del sitio oficial de Arduino (que es incorrecto en al menos un lugar):
Error explicado
Puede ver que, por alguna razón, el diseñador original dibujó la salida de OpAmp2 aunque no tiene entrada.
Mi intento de probar
Ya que estaba intentando probar el código de ese artículo. Solo quería leer algunos valores de A0. Solo para ver cómo funcionaba para poder comenzar a aplicar ingeniería inversa al circuito obviamente erróneo.
No reproduciré todo el código, pero aquí está la parte importante: Nota : el código es del artículo donde obtuve el esquema ( 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];
Básicamente, todo lo que me importaba era leer la frecuencia que obtuve del método meter.getFrequency() e imprimirla en el monitor serial.
Preparé el siguiente circuito:
simular este circuito : esquema creado con CircuitLab
(Ahora) Resultados obvios
Así que encendí el código y abrí el monitor en serie y comencé a girar la perilla del potenciómetro, pero como probablemente ya sepa, el monitor en serie solo imprime -1.0 (negativo 1.0).
No hay frecuencia en un circuito de CC
Al principio, estaba muy confundido. ¿Por qué nunca obtendría un valor diferente a pesar de que la entrada de voltaje estaba cambiando?
Entonces, me golpeó. No hay frecuencia en un circuito de CC.
La pregunta
¿Cómo podría el código leer la frecuencia fuera del circuito? ¿Cómo podría haber frecuencia en un circuito de CC? ¿Cómo es eso posible?
Entiendo que estoy ignorando por completo el trabajo realizado por la entrada en el circuito original (micrófono a amplificador operacional), pero también entiendo que la entrada será solo una serie de corrientes y voltajes que, de todos modos, simplemente son amplificados por el amplificador operacional.
¿Los pulsos se convierten en frecuencia?
¿Es ese el punto, que se convertirán en pulsos y esos pulsos tendrán una frecuencia?
EDITAR: Agregar código GetFrequency Puede ver el código fuente de ArduinoFrequencyMeter en: https://github.com/arduino-libraries/AudioFrequencyMeter/blob/master/src/AudioFrequencyMeter.cpp
Aquí está la fuente del método getFrequency():
float AudioFrequencyMeter::getFrequency()
{
float frequency = -1;
if (checkMaxAmp > amplitudeThreshold) {
frequency = (float)(sampleRate / period);
if ((frequency < minFrequency) || (frequency > maxFrequency)) {
frequency = -1;
}
}
return frequency;
}
Es interesante que si checkAmp no es mayor que amplitudeThreshold, devolverá -1. Entonces, es probable que eso sea lo que sucede en el caso en que veo todo -1.
Pero, debido a la forma en que está el código, no puede diferenciar ese problema del problema de la frecuencia que cae fuera del rango, ya que la frecuencia fuera del rango también devuelve el mismo valor.
Probablemente modificaré el código en algún momento y haré que devuelva -1, -2, -3 para cada caso.
"DC" es muy parecido a decir "sin fricción". Hay dos formas de definirlos:
CC es frecuencia cero. Sin fricción es cero fricción.
Cualquier frecuencia que sea demasiado pequeña para que nos importe (es decir, demasiado larga en el tiempo) es CC. Cualquier fricción que sea demasiado pequeña para que nos importe no tiene fricción.
La definición #1 es una buena definición teórica. No hay ambigüedad sobre lo que significa: cero es cero. Es lo que encontrará a menudo en los libros de texto.
La definición #2 es más práctica. Ningún ciclo natural tiene frecuencia cero, ya que su período sería una cantidad infinita de tiempo. Todo sistema mecánico tiene algo de fricción. Pero en ambos casos, estos efectos pueden ser tan pequeños que no nos preocupamos por ellos. Entonces podemos tratarlos como si fueran cero.
Entonces, ¿cuál es la frecuencia de corte para DC? Varía con cada problema y, a veces, es una cuestión de opinión. Parte de ser un EE es saber cuándo puede asumir que las cosas están en estado estable.
En cuanto a tu pregunta sobre Arduino... Le das una señal e intenta determinar su frecuencia. No es magia; hay un algoritmo involucrado. El algoritmo tiene una frecuencia mínima y máxima; tiene razón en que devuelve -1 si la señal parece estar por encima de la frecuencia máxima o por debajo de la mínima.
Este es el por qué. Suponga que el software puede leer frecuencias tan bajas como 1 Hz. Eso significa que, en el peor de los casos, tendrías que esperar 1 segundo (*nota 1) para encontrar la frecuencia.
Ahora suponga que cambia la frecuencia mínima a 0,1 Hz. El tiempo de espera en el peor de los casos será de 10 segundos. A 0,001 Hz, 1000 segundos. A medida que la frecuencia se acerca a la frecuencia cero "ideal" de CC, el tiempo de espera se vuelve infinito.
No querrás esperar una eternidad para que el algoritmo te diga que estás en DC. Por lo tanto, devolverá -1 a menos que haya encontrado una frecuencia en el rango correcto.
(*nota 1) Sí, tal vez 0,5 segundos debido a la tasa de Nyquist. Todavía no cambia mi argumento de que el tiempo de espera se vuelve infinito.
simular este circuito : esquema creado con CircuitLab
Figura 1. Conexión del potenciómetro.
El circuito de prueba de su potenciómetro está cableado incorrectamente. En la Figura 1a, si el potenciómetro se gira al mínimo, cortocircuitará el suministro de 5 V a GND. En su lugar, conéctelo como en la Figura 1b para que A0 pueda pasar de 0 a 5 V. Solo fluirán 5/10k = 0,5 mA a través de R2.
¿Cómo podría el código leer la frecuencia fuera del circuito? ¿Cómo podría haber frecuencia en un circuito de CC? ¿Cómo es eso posible?
Es posible y es inherente a algunos diseños y está diseñado deliberadamente en otros circuitos.
Fuente de alimentación DC
Figura 1. Una fuente de alimentación de CC alimentada por la red proporciona una salida de CC pero con una ondulación de 100 o 120 Hz. (Tomado de mi respuesta a ¿cómo funciona el condensador de filtro en un circuito rectificador? ).
Figura 2. Resultados del simulador. (Click para agrandar.)
Amplificadores de audio
Los amplificadores de audio requieren una polarización de CC en la señal de audio (que es CA) cuando el amplificador recibe alimentación de una fuente de alimentación de un solo extremo.
Figura 3. El amplificador operacional recibe alimentación de un solo suministro, por lo que no puede aceptar señales de entrada negativas ni voltajes negativos de salida.
La solución para la Figura 3 es:
Sistema telefónico tradicional (POTS)
Figura 4. Un teléfono rotatorio GPO 746 transmite CA superpuesta a la alimentación de 50 V CC.
Otro caso familiar es el teléfono estándar. El teléfono recibe alimentación de 50 V CC de la central, pero el audio se superpone a la CC y se transmite por la línea.
brahans
PlasmaHH
Raddevus
Raddevus
PrácticoHowie
Raddevus
Raddevus
PlasmaHH
eliot alderson
Raddevus