Red de conocimiento informático - Conocimiento informático - Cómo recibir una forma de onda de 20 kHz a través del puerto de micrófono de audio de desarrollo de Android

Cómo recibir una forma de onda de 20 kHz a través del puerto de micrófono de audio de desarrollo de Android

¿Cómo desarrollar un puerto de micrófono de audio de Android para recibir una forma de onda de 20 kHz?

1. Características de la comunicación de audio de teléfonos móviles

1. Gran versatilidad: hoy en día, con la popularidad de los teléfonos inteligentes, los teléfonos móviles tienen varias interfaces de comunicación externa, entre las que se encuentra la interfaz de audio de 3,5 mm. es universal y el más potente. Básicamente, todos los teléfonos móviles y tabletas tendrán esta interfaz, por lo que en algunos dispositivos que requieren versatilidad, las interfaces de audio han subido al escenario.

2. Velocidad baja: dado que la frecuencia de muestreo de la parte de audio de los teléfonos móviles es generalmente de 44,1 KHZ (algunos imitadores domésticos son de 8 KHZ), esto limita en gran medida la velocidad de comunicación de audio. Todos sabemos que la frecuencia de muestreo es 44,1 KHZ, por lo que la frecuencia de señal más alta solo puede ser de aproximadamente 20 KHZ, y el ciclo de la señal no puede tener solo 2 puntos de muestreo, generalmente más de 10, por lo que se puede imaginar la velocidad de comunicación en cada nivel.

3. Señal pequeña: las señales para la comunicación de audio tienen un nivel de milivoltios. Cada fabricante de teléfonos móviles es ligeramente diferente, pero generalmente el máximo no supera los 200 mv. Por lo general, la intensidad de la señal que utilizamos para la comunicación es de aproximadamente. 100 mv. Como resultado, la señal es más susceptible a las interferencias y existen varias restricciones en las herramientas durante la etapa de desarrollo.

2. Clasificación de la comunicación de audio por teléfono móvil

1. Método inalámbrico:

a) Puede que no estés familiarizado con el método inalámbrico, así que déjame explicarte. lentamente. Todos sabemos que la frecuencia del sonido que el oído humano puede oír es de 20 HZ ~ 20 KHZ, y la frecuencia de la señal de la comunicación por teléfono móvil es de solo 20 KHZ, por lo que la comunicación inalámbrica es factible. Porque aunque el límite auditivo del oído humano puede alcanzar los 20 KHZ, la gente común generalmente no puede escuchar nada por encima de 19 KHZ. Por lo tanto, si la intensidad de la señal es relativamente débil y se controla entre 19 KHZ y 20 KHZ, entonces podemos considerarlo como un "ultrasonido". .

b) De hecho, aquí se menciona el método inalámbrico de comunicación de audio de teléfonos móviles para darle una idea para el desarrollo de productos. Su radio de comunicación es de unos 10 millones y sus perspectivas siguen siendo muy amplias. Si estás interesado, puedes probarlo. (De hecho, ya existen productos en esta área)

2. Modo cableado:

a) El modo cableado se divide en dos tipos: unidireccional (dispositivo → teléfono móvil). ) y bidireccional Tiene menos restricciones y es menos difícil de desarrollar, pero su aplicación práctica será limitada. La comunicación bidireccional tiene muchas restricciones y es más difícil de desarrollar, pero es más conveniente en la aplicación real.

b) Dispositivo → Teléfono móvil: codificación Manchester; DTMF; onda sinusoidal personalizada

c) Teléfono móvil → Dispositivo: dado que la señal de audio emitida por el teléfono móvil es muy pequeña , no se puede usar directamente. Use un amplificador operacional para aumentar el voltaje a un rango adecuado o use un comparador de voltaje para convertirlo en una onda cuadrada TTL.

3. Clasificación de los métodos de comunicación de hardware de comunicación de audio de teléfonos móviles: los métodos de comunicación de hardware de comunicación de audio de teléfonos móviles se pueden dividir aproximadamente en dos tipos: onda cuadrada y onda sinusoidal.

1. Onda cuadrada: la onda cuadrada generalmente usa el método de codificación Manchester (compruébelo usted mismo para descubrir qué es la codificación Manchester. Su ventaja es que puede usar un microcontrolador para generar directamente la onda cuadrada). Se puede utilizar después de la atenuación. Conveniente y simple. La desventaja es la mala compatibilidad, porque la parte de audio del teléfono móvil tiene una característica tal que solo reconoce señales de nivel cambiante. Cuando la entrada de señal del micrófono permanece en un cierto nivel distinto de cero durante mucho tiempo, el teléfono móvil lo hará. trátelo como cero y retroceda con fuerza hasta el potencial cero. Ésta es la razón principal por la que el método de comunicación de onda cuadrada tiene poca compatibilidad y las ondas cuadradas también son susceptibles a interferencias.

2. Onda sinusoidal: La onda sinusoidal no tiene el problema de la onda cuadrada mencionada anteriormente, por lo que la onda sinusoidal tiene mejor compatibilidad y estabilidad. Las soluciones más utilizadas incluyen FSK, DTMF, generador de señales o onda cuadrada a onda sinusoidal, etc.

(Las soluciones anteriores se analizarán una por una más adelante)

3. Análisis del canal de comunicación

a) Sabemos que la interfaz de audio tiene 4 cables, MIC, tierra, izquierdo y derecho. canales. Dispositivo → El teléfono móvil usa MIC, teléfono móvil → El dispositivo usa cualquiera de los canales de tierra, izquierdo y derecho. Permítanme hablar de ello aquí. En los productos reales, algunos fabricantes reemplazarán el cable de tierra, es decir, cambiarán uno de los canales izquierdo y de audio originales por un cable de tierra. Debido a que la señal de comunicación de audio es una señal de CA y la tierra es en realidad una tierra flotante, incluso si se cambia el cable de tierra, la forma de onda final seguirá siendo la misma, porque en última instancia lo que el teléfono móvil necesita para analizar la señal es la frecuencia y amplitud. Esto deja un canal de audio, que generalmente se usa para ayudar al dispositivo a identificar cuándo está encendido, porque los dispositivos de comunicación de audio generalmente funcionan con baterías.

b) Además, se debe conectar una resistencia de 4,99 K en paralelo entre el MIC y tierra, porque el teléfono móvil determina si la impedancia entre el MIC y tierra es de 4,99 K (también hay otras valores de resistencia) Esto es algo a tener en cuenta si hay un dispositivo (auriculares) conectado.

IV.Análisis comparativo de diversas soluciones de comunicación

1. Dispositivo→Teléfono móvil:

a) Codificación Manchester: Entre muchos métodos de comunicación, la codificación Manchester es la más utilizada. El método más flexible es simple: la señal codificada puede ser generada directamente por el microcontrolador y puede usarse directamente después de ser atenuada por el circuito de atenuación. Nota: Hay dos formas de generar señales codificadas en Manchester, una es usar la generación PWM y la otra es usar la interrupción del temporizador para invertir IO. Personalmente, prefiero el método de interrupción del temporizador. Porque sabemos que hay bordes anchos y bordes estrechos en la codificación Manchester, y que los bordes anchos y los bordes estrechos pueden cambiar de manera flexible, y no es fácil controlar con precisión los cambios en la salida del borde ancho y del borde estrecho utilizando el método PWM, y el método de interrupción del temporizador es muy difícil. Flexible y fácil de controlar. (Proporcionaré las funciones de codificación y decodificación de Manchester que escribí más adelante)

b) Métodos FSK y DTMF: FSK y DTMF son similares entre sí. Generalmente se generan mediante chips integrados cuando se usan. Cumple con los requisitos de los protocolos de comunicación fijos (FSK es el protocolo Bell202 o V.23, DTMF no recuerdo el nombre). Las ventajas de estos dos métodos de comunicación son la comunicación por onda sinusoidal, buena estabilidad y facilidad de uso. Sin embargo, debido a las limitaciones de los protocolos de comunicación fijos, la velocidad de comunicación y la velocidad de bits también son limitadas y carecen de flexibilidad. Aquí le recomiendo un chip de comunicación británico de la serie CMX. Esta serie de chips integra codificación y decodificación FSK y DTMF, lo cual es muy bueno. Si está interesado, puede probarlo. (Los manuales pertinentes se encuentran en el archivo adjunto)

c) Generador de señal, método de bucle de bloqueo de fase: este método utiliza un generador de señal o bucle de bloqueo de fase para generar ondas cuadradas u ondas positivas, y el microcontrolador controla el Forma de onda. La salida también puede realizar comunicación de audio y es muy flexible. Pero la desventaja es que el circuito es más complejo y la conexión entre señales de diferentes frecuencias es difícil de dominar. Si no se usa correctamente, será problemático. (Los manuales relevantes se encuentran en el archivo adjunto)

d) Aquí hay una solución que personalmente creo que es mejor: codificación Manchester más un filtro de paso bajo. El microcontrolador genera la codificación Manchester y luego la pasa a través de un filtro de paso bajo. -filtro de paso. El filtro filtra la onda cuadrada en una onda sinusoidal y la emite. No solo resuelve los problemas de flexibilidad de FSK y DTMF, sino que también resuelve los problemas de estabilidad y versatilidad de la onda cuadrada codificada en Manchester. En términos de filtros de paso bajo, yo personalmente uso el "filtro de condensador conmutado de paso bajo integrado". Aunque su costo es mayor, los beneficios también son obvios. El circuito es simple, fácil de usar y ocupa muy poco espacio. (Los manuales pertinentes se encuentran en el archivo adjunto)

2. Teléfono móvil → Equipo:

a) Método del circuito de amplificación: amplifique la señal de salida del teléfono móvil a una amplitud adecuada a través de la amplificación. circuito y luego bloquearlo en bucle de fase o formar FSK, chip DTMF para su análisis. Este método es el más difícil y requiere habilidades muy sólidas en circuitos analógicos. Mi nivel personal es limitado, así que adopté otro método.

b) Método del comparador de voltaje: tire con fuerza de la salida de señal de CA del teléfono móvil al nivel Vcc/2 a través del circuito, luego agréguela a un extremo del comparador de voltaje y conecte el otro extremo a el voltaje de comparación Vcc/2, de modo que la señal de CA es decir, se convierte en una señal de onda cuadrada TTL, y luego el análisis se vuelve muy simple.

5. Precauciones de I+D (la parte de análisis del plan de comunicación es demasiado larga, por lo que se discutirá al final)

1. Es imprescindible un buen software de grabación de teléfonos móviles, preferiblemente. En el teléfono móvil puedes ver directamente la forma de onda.

2. Se recomienda utilizar una computadora portátil para el desarrollo en lugar de una computadora de escritorio. Debido a que la señal de audio es muy pequeña y susceptible a interferencias, mientras que las computadoras de escritorio tienen mayores interferencias, otra ventaja de las computadoras portátiles es que pueden desconectar la fuente de alimentación externa y usar energía de la batería cuando sea necesario.

3. Un buen grabador es fundamental. En ocasiones es necesario obtener señales de audio puras para un análisis más preciso.

4. Haga una placa adaptadora, conecte el conector hembra de audio en un lado y el conector macho de audio en el otro lado. Conecte los cables de micrófono, tierra, canal 4 izquierdo y derecho en una matriz para facilitar. grabación.

5. Cree un circuito de atenuación de señal que pueda atenuar la señal generada por el circuito del dispositivo hasta un rango que la interfaz de audio pueda soportar. Durante la depuración inicial, podemos usar este circuito para registrar la señal en la computadora para su análisis. (Recomiende un software de análisis de señal de audio de computadora: Goldwave)

6. El cable de audio utilizado para la grabación no debe ser demasiado largo, de lo contrario le causará muchos problemas. Es mejor hacerlo usted mismo. Puede hacerlo con encabezados desnudos de audio, cables Dupont y matrices. Es conveniente y fácil de usar.

Las funciones de codificación y decodificación de la codificación Manchester son las siguientes:

/************************ ***** *******************************************

Nota: Todas las funciones de codificación tienen la forma de interrupciones del temporizador, con el borde estrecho de la codificación Manchester como período del temporizador.

Los datos enviados incluyen 1 bit de inicio, 8 bits de datos, 1 bit de paridad y 3 bits de parada.

********************************************* *** *******************************/

vacío estático VIC_VECT_Fucton_00(void)//Enviar función de interrupción de datos codificados

{

TIMER0IS =0x0

if((send_time2==0) amp; amp; (send_start==1))

{

switch(FSK_txState)

{

caso STARTBIT:

if((GPIODATAamp;0x00000002) ==0x00000000)/ /Si se detecta que el pin de envío de datos es cero

send_time;

else

{

currentSym= 0;

FSK_txState = BYTE;

}

descanso

caso BYTE:

if(txBit lt; 8)

{

currentSym = (send_byte gt; gt; txBit) amp; = currentSym; //bit de verificación de paridad

}

else if (txBit == 8)

{

currentSym = txParity amp ; 0x01; // Enviar bit de paridad

txBit;

}

else if(txBitgt; 8 amp; txBitlt; 12)

{

// el siguiente bit es el bit de parada

currentSym = 1 //Enviar bit de parada

<

p> txBit;

}

else if(txBit == 12)

FSK_txState = STOPBIT

descanso; >

caso STOPBIT:

txBit=0

FSK_txState=IDLE

send_start=0

txParity=0; ;

send_byte=0;

romper

}

if(lastSym!=currentSym)

{

timer1_num;

lastSym=currentSym

}

}

if(timer1_num2==0 )

GPIODATAamp;=0xFFFFFFFD; //Restablecer pin de salida

else

GPIODATA|=0x00000002 //Conjunto de pines de salida

timer1_num; //Se usa para controlar el cambio de nivel del puerto IO

send_time; //Se usa para controlar cada bit del byte enviado

Delay; Es la función de retardo.

}

/****************************** **** **************************************

Nota: Decodificación de la función adopta la forma de interrupción de E/S externa (interrupción de flanco ascendente o descendente, es decir, interrupción de transición de nivel).

Utiliza un temporizador como reloj y lee el valor de tiempo del temporizador cada vez que se produce una interrupción. Sáquelo y compárelo con el último registro

para averiguar el intervalo de tiempo, a fin de determinar si el borde actual es un borde ancho o un borde estrecho.

********************************************* *** ****************************/

static void VIC_VECT_Fucton_04(void)//Aceptar datos decodificados función de interrupción

{

GPIOIC|=0x00000001; //Borrar el contenido de la última interrupción

RX_time=TIMER1VALUE;

if (RX_lasttimegt;=RX_time )

RX_diff=RX_lasttime-RX_time; //El valor inicial de lasttime es 0

else

RX_diff=65535-RX_time RX_lasttime;

RX_lasttime=RX_time;

switch(RX_state) //el estado se ha configurado como STARTBIT al iniciar el código

{

case STARTBIT_FALL:

if ((SHORTINTERVALlt; RX_diff) amp; amp; (RX_difflt; LONGINTERVAL))

{

if (RX_oneslt; 5) //unos el valor inicial es 0

{

RX_ones = 0

}

else

{

RX_state = DECODE; //Configurar estado a decodificar

}

}

else if(RX_diff lt; SHORTINTERVAL)

RX_ones;

else

RX_ones=0;

descanso

caso DECODIFICAR:

/ ******* *******Determine los datos por la duración del intervalo******************/

si ((SHORTINTERVALlt; RX_diff) amp; amp; (RX_difflt; LONGINTERVAL ))// Si el espaciado está dentro del rango, el valor del bit de datos actual es opuesto al anterior

{

currentbit=(currentbit 1)amp;

RX_times =2;

}

else if( RX_diff lt; SHORTINTERVAL )

{

currentbit=currentbit

RX_times

}

else

<; p> RX_state = DATAINIT;

/******************Acepta bits de datos, recoge del bit bajo********** ** ****/

if(RX_times2==0)

{

if(RX_bitcounterlt;8)

{

p>

if (currentbit==1)

{

uartByteRx = (uartByteRx gt; gt; 1) (1lt; lt; 7

rxParity; //Bit de paridad

RX_bitcounter; //Número de bits de datos a aceptar

}

else

{

uartByteRx = (uartByteRx gt; gt; 1

RX_bitcounter

}

}

el

se

{

rxParityamp;=0x01; //Realizar verificación de paridad

if(rxParity==currentbit)

{< / p>

RX_bitcounter;

RX_finish=1;

RX_state=DATAINIT

}

más

RX_state=DATAINIT; //Si la verificación de paridad es incorrecta, vuelva a verificarla

}

}

break;

case DATAINIT: //Estado del parámetro de inicialización

RX_bitcounter=0;

RX_ones=0

rxParity=0

currentbit= 0;

RX_state=STARTBIT_FALL;

RX_times=0;

descanso

predeterminado:

descanso;

}

}