Preface
Por favor, lea esto cuidadosamente. Le dedico mucho tiempo y realmente estoy intentando entender. He leído numerosos artículos sobre circuitos de CC y CA y he buscado en numerosos lugares para obtener esta respuesta, pero no estoy seguro de saber los términos correctos que están involucrados.
También, sí, he buscado en Google "¿un circuito de CC puede tener frecuencia?" Y las respuestas que obtiene son que los circuitos de CC tienen una frecuencia de 0.
Background
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):
Explicacióndeerrores
Puedeverque,poralgunarazón,eldiseñadororiginaldibujólasalidadeOpAmp2apesardequenotieneentrada.
Miintentodeprueba
Desdequeestabaintentandoprobarelcódigodeeseartículo.SoloqueríaleeralgunosvaloresfueradeA0.Soloparavercómofuncionalacosa,asípodrécomenzaraaplicaringenieríainversaalcircuitoobviamenteerróneo.
Noreproducirétodoelcódigo,peroaquíestálaparteimportante:Nota:elcódigoesdelartículodondeobtuveelesquema(
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 recibía del método meter.getFrequency () e imprimirla en el monitor de serie.
Preparé el siguiente circuito:
(Ahora) Resultados obvios
Así que encendí el código, abrí el monitor de serie y comencé a girar la perilla del potenciómetro, pero como probablemente ya sabes, el monitor de 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 totalmente 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 simplemente se amplifican con la opamp de todos modos
¿Los pulsos se convierten en frecuencia?
¿Ese es 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 del ArduinoFrequencyMeter en: enlace
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 el valor de amplitudeThreshold entonces volverá -1. Entonces, es probable que eso sea lo que está sucediendo en el caso en el que veo todos -1.
Pero, debido a la forma en que está el código, no puede diferenciar ese problema del problema de la frecuencia que se encuentra fuera del rango, ya que la frecuencia fuera del rango también devuelve el mismo valor.
Probablemente alteraré el código en algún punto y lo devolveré -1, -2, -3 para cada caso.