Detectar la señal de timbre usando un filtro de paso bajo

2

Creé 2 tableros que se comunicaban entre sí como un sistema de intercomunicación. Uno de ellos tiene un botón para enviar una señal de llamada al otro. La señal de llamada consiste en señales PWM creadas por una MCU. Quiero detectar el tono de llamada por la MCU del lado del receptor.

Mi tono de llamada contiene 4 pulsos externos con un período de 300 ms:

200msdeestaseñalcontienelospulsosinternosconunperíodode1.25ms:

Entonces,quieroagregaruncircuitodefiltroalladodelreceptordeltonodellamadayconvertirlaseñalexternaaunaseñalPWMrecta.Acontinuaciónsemuestraunejemplodesalida

:

Hastaahora,heintentadoagregarunfiltrodepasobajoRCconuncortedefrecuenciadelaseñalexterna(1/300ms=3.33Hz).Peronisiquierapudeacercarmealasalidadeejemplo.¿Hayalgoquemalinterpretesobreelconceptoyaquenotengomuchaexperienciaeneldiseñodecircuitos?

Respectoamicircuito:acabodeagregarunaresistenciaenserieyuncondensadorparaleloalnodo:

Editar:noqueríahablarsobreelcircuitoquemanejalaconversióndelaseñaldelalíneadeaudioalPWMyaqueestenoeseltemaenestapregunta.PerosospechoquemifiltroRCnofuncionacorrectamentedebidoaesaparte.Probélassolucionesenlarespuestaperonofuncionaroncomoseesperaba.

Acontinuaciónsemuestraelesquemademiladodeloptoacoplador,laentradadelíneacontienelaseñaldeaudiodelPWM.LaseñaldeaudioconvertidadenuevoalPWMporeloptoacopladorluegorecibolaseñaldePWMqueledialascapturasdepantallaanteriores.PerocuandoagregolaspartesRCalnodoOPTO_OUTPUT,laseñalPWMtambiéncambiaentérminosdevoltios.¿CreesquetengounerroralagregarlaspartesRC?

    
pregunta abdullah cinar

4 respuestas

6

Si desea que se reciba la señal de 300 ms, mientras filtra uno de 1.25 ms, entonces es la señal de alta frecuencia que necesita filtrar, no la otra. Lo que significa que la constante de tiempo elegida es demasiado grande y afecta a la de 300 ms. La señal de alta frecuencia tiene un período de 1,25 ms, así que elija una constante de tiempo que sea más de 10 veces mayor, por ejemplo, 25 ms, que también es más de 10 veces menor que los 300 ms. Aquí hay una prueba rápida en LTspice:

V(a)muestralasalidamodulada,V(b)muestralasalidafiltradaconunaconstantedetiempode22ms,yV(c)muestralaseñalrecuperadaconunahistéresismenorde10mVparacontrarrestarelfiltradonoidealdelRC.Observequelaseñalfiltradatieneunatrazaalgomásgruesa,esoesdebidoaloresidual.PodríausarunfiltroBesseloGaussianparaobtenermejoresresultados,peroesosoloaumentaríalacomplejidady,además,necesitarálarecuperacióndelaseñal,loquesignificaquepuedesimplificarlascosas.

SielvalordeVcces5V,entonceslaresistenciadelcolectoresdemasiadoalta,recuerdequelosoptoaisladorestienenunafuertedependenciadeIc.Siesasí,pruebeconunaresistenciade2k2,quesolousaráIc~2.2mA,ypodríadejarelRextraycolocarCdirectamenteenelcolector(10uF,valoradaptadoparalaconstantedetiempo).Sinembargo,estoaumentaráIccuandosedescargueC.Delocontrario,hagaR=2k7yC=3u9(porejemplo).Noolvidequelaseñalestáinvertidaahora,asíqueheusadouncomparadordehistéresisinvirtiendo(eldisparadorSchmitt).NotengounTLPopto,asíquesoloheusadoloqueves,adaptarmeatusnecesidades.Noestoyencasaahoramismo,peroaquíhayunintentodeejemplificar(V(n004)eslaseñalde300ms):

    
respondido por el a concerned citizen
4

Dependiendo de la intensidad con la que desee detectar la señal de llamada, es posible que necesite filtrar con paso de banda la señal recibida (a F = 800 Hz) y luego detectarla en la envolvente. Alternativamente (y esto puede ser preferible) usted podría usar un circuito monoestable que se pueda volver a encender y que produzca una salida alta y constante cuando se active la "señal interna". Dado su perfil de timbre, esta señal desaparecerá durante aproximadamente 100 ms cada 300 ms. Esto detecta la "envoltura" de su señal de llamada. Entonces necesitaría algo de lógica para determinar que la forma del sobre era aproximadamente correcta.

Hay otras cosas que buscar. Hay ICs decodificadores de tono que vienen a la mente: el LM567 se ha usado en aplicaciones como esta muchas veces. O puede cambiar su señal básica de 800 Hz incorporando dos tonos y usar un chip decodificador DTMF.

    
respondido por el Andy aka
3

Yo usaría un detector de sobres:

SiseleccionalaconstantedetiempoRCenalgúnlugarentrelafrecuenciadelaportadoraylafrecuenciadelaseñal,obtendrálasalidaconesteaspecto:

    
respondido por el Dmitry Grigoryev
2

Puede lograrlo directamente con el microcontrolador.

Hacerlo tiene algunas ventajas:

  • No hay necesidad de componentes externos.
  • No hay tiempo de respuesta / retraso causado por el filtrado.
  • Mayor precisión.

Básicamente, entiendo que quiere saber el ciclo de trabajo de la señal PWM.

Hacer eso con un microcontrolador es bastante simple, dado que su frecuencia es relativamente baja, no debería ser un problema para que la uC lo maneje.

Solo necesitas un temporizador y una interrupción.

  • Conecte la señal directamente a su entrada de uC.
  • Configure una interrupción accionada por un pin en el borde alto y bajo.
  • Configure un temporizador con un período de tiempo conocido.

Cuando se llama a la interrupción, primero lea el valor del temporizador, luego lea el estado del pin (bajo o alto).

En la siguiente interrupción, haga lo mismo, luego sabrá cuánto tiempo estuvo alto o bajo el pasador, haga lo mismo para el otro borde.

Después de que ocurrieron 4 cambios de borde, sabrás exactamente cuánto tiempo fue alto y bajo, entonces simplemente necesitas calcular la proporción.

Puedes repetir esto para toda la señal de 200 ms, registrar toda la sincronización y hacer un promedio para mejorar aún más la estabilidad.

Consideraciones:

La interrupción introducirá algún retraso, es por eso que es importante leer el temporizador primero, para que tenga un retraso mínimo. Puede usar la interrupción de alta prioridad para evitar que haya otro bloqueo de interrupción.

Consideramos que el retardo de interrupción (con prioridad alta) siempre será relativamente similar y se promediarán pequeñas diferencias en la señal de 200 ms.

    
respondido por el Damien

Lea otras preguntas en las etiquetas