El circuito funciona en protoboard pero no en PCB

Tengo un circuito bastante simple que funciona perfectamente en la placa de pruebas, pero tengo muchos problemas para transferirlo a una placa de circuito impreso. Veo un comportamiento muy extraño que se encuentra fuera de mi experiencia actual, por lo que espero recibir algún consejo.

El circuito implementa un sensor de movimiento wifi, aunque el problema que tengo ocurre mucho antes de llegar a la parte de RF, o incluso a la parte de uC del diagrama:ingrese la descripción de la imagen aquí

He marcado con un círculo la parte que está teniendo problemas.

R3 es una resistencia pull-down, que se requiere porque AMN42121 impulsa la salida ALTA cuando se detecta movimiento, pero la deja colgando sin movimiento, por lo que se necesita pull-down.

Usé C1 para suavizar la transición entre movimiento y sin movimiento. C1 hace que el nivel de salida vaya a BAJO lenta y suavemente, por lo que se logra el estado "sin movimiento" después de unos segundos sin movimiento.

El inversor está ahí porque las interrupciones externas de attiny se activan por el nivel BAJO, por lo que necesito invertir la lógica. Es lamentable que haya tenido que usar un paquete DIP tan grande para un inversor, pero no pude encontrar nada más.

Hice una PCB de doble cara para este circuito, que se ve así:ingrese la descripción de la imagen aquí

Nuevamente, hasta ahora solo he ensamblado el área rodeada por un círculo.

Después de soldar S1, R3 y C1, obtengo la siguiente señal de la salida del sensor:ingrese la descripción de la imagen aquí

Esto es exactamente lo que quiero ver, así que todo está bien hasta este punto.

A continuación, soldé un zócalo para IC2 y conecté el inversor. Aquí es donde comienzan los misterios. Al principio todo estaba bien, pero después de un tiempo de jugar con la placa, el circuito de repente dejó de funcionar. Cuando coloco una sonda en la salida del sensor, en lugar de la buena señal que vimos arriba, veo variaciones en los siguientes dos ejemplos:

Ejemplo 1:ingrese la descripción de la imagen aquí

Ejemplo 2:ingrese la descripción de la imagen aquí

Tenga en cuenta que, a diferencia del primer ejemplo, la señal en el segundo ejemplo no se genera por el movimiento: esa forma de diente de sierra emerge por sí sola sin ninguna acción por mi parte.

Después de muchas pruebas, pude establecer lo siguiente:

  1. Al desenchufar el inversor de la toma de corriente, el sensor vuelve a funcionar correctamente.
  2. Cortar la energía al inversor mientras se deja enchufado hace que el sensor funcione.
  3. El uso de un inversor diferente no tiene ningún efecto.
  4. Rociar la placa con removedor de fundente o acetona y frotar con un cepillo a veces hace que el sensor vuelva a funcionar, pero por muy poco tiempo. En un momento pude hacer que la señal se viera así frotando agresivamente con un cepillo de dientes:ingrese la descripción de la imagen aquí

Tenga en cuenta que incluso en esta última imagen, la señal no regresa al nivel BAJO en todo el camino. El efecto desapareció casi tan pronto como dejé de cepillarme.

Hasta ahora, esto apunta a algún defecto de soldadura, excepto que realmente no puedo ver el problema. Revisé el tablero cuidadosamente con un gran aumento y probé todos los puntos que se me ocurrieron para verificar la continuidad: todo se verifica. Aquí hay un primer plano del trabajo de soldadura en el zócalo IC y el sensor:ingrese la descripción de la imagen aquí

Ahora estoy fuera de las ideas, por lo que cualquier consejo sería muy apreciado. Gracias.

EDITAR:

Acabo de descubrir algo interesante. Un examen más detallado del ejemplo n.° 2 (la señal en forma de diente de sierra) revela que la pendiente descendente es un segmento de la curva de descarga C1 esperada. Cuando el nivel de voltaje se acerca al umbral del inversor y pasa demasiado tiempo allí, ¡parece que el inversor se está confundiendo! Está generando ese pequeño estallido de ruido y luego hace algo para devolver la entrada a ALTO, o simplemente permanece en ese estado ruidoso "indeterminado" indefinidamente hasta que la salida del sensor vuelve a ALTO debido al movimiento (Ejemplo n.º 1).

Para probar esta teoría, reemplacé C1 con una tapa que es 10 veces más pequeña, lo que hace que la curva de descarga sea mucho más pronunciada y "¡listo!" - ¡el inversor ya no se confunde y el circuito funciona!

Por supuesto, esto anula el propósito de C1, ya que ahora no proporciona tanto retraso como quiero. No estoy seguro de por qué no tuve este problema con el inversor en la placa de prueba, pero sugiere que podría haber una solución muy fácil que pueda abordar este problema. Leí que las placas de prueba tienen una gran capacitancia "parásita", así que tal vez solo necesito agregar estratégicamente algunos condensadores más en alguna parte. ¿Algunas ideas?

EDIT 2: Proporcionar una vista superior ya que algunos comentaristas lo pidieron:ingrese la descripción de la imagen aquí

Santos plátanos, esas uniones de soldadura se ven terribles . Necesitas desesperadamente un poco de flujo allí.
@Connor Wolf: ¿Te refieres a los pines IC que no están conectados a nada? Esos apenas están soldados, porque no vi ninguna razón para soldarlos. ¿O estás hablando de las otras juntas de soldadura?
¿Por qué estás usando un inversor en absoluto? Conecte la salida del sensor a PB2 con una resistencia en serie de 220-470 ohmios y estará listo para continuar. Puede agregar una resistencia desplegable, pero 10Meg es demasiado alto. Cámbialo con un 10k. Además, no necesita conectar C1. Puede realizar el filtrado en el software con una simple rutina de retraso. Además de eso, C1 puede estar agregando carga al sensor de modo que cuando el inversor IC está conectado, la carga es demasiado para que el sensor no pueda controlar, ¿quizás?
¡Lo he comprobado ahora y el sensor puede dar una salida máxima de 100uA! ¡El inversor exige alrededor de 1 mA de corriente de entrada! Entonces, la resistencia desplegable anterior que he sugerido, que es de 10k, es demasiado. Cambialo por un 330k o 470k
@abdullah kahraman: Lo siento, no entiendo tu idea. INT0 en attiny se activa en la transición a BAJO, por lo que "sin movimiento" debe representarse mediante una entrada ALTA. ¿No es así? ¿Podría explicar su idea con más detalle?
No, puede establecer el tipo de activación para la interrupción externa. Por favor verifique MCUCRel registro en la página 50 de la hoja de datos .
Una imagen dice más, aquí . Además, agregue un condensador de al menos 10uF en paralelo con Vcc y GND.
@ValBlant - Me refiero a todos ellos. La calidad de soldadura en esa placa es horrible en todas partes. El ATtiny parece que todas las juntas, excepto una, son juntas frías.
@Connor Wolf: Dado que ATtiny no se muestra en ninguna parte de la imagen (y aún no está en la placa), supondré que te refieres al inversor. ¿Cómo distinguir un porro frío de uno bueno? Todos verifican las pruebas de conductividad, pero tengo curiosidad por saber cuáles son las señales visuales de una mala articulación. Usé fundente en todas esas uniones y me aseguré de que la soldadura cubriera completamente los pines. ¿Qué puedo hacer mejor?
@abdullah kahraman: Acabo de revisar el manual nuevamente y encontré lo siguiente en la página 51: "Tenga en cuenta que el reconocimiento de interrupciones de flanco descendente o ascendente en INT0 requiere la presencia de un reloj de E/S... Una interrupción de bajo nivel en INT0 es detectado de forma asíncrona. Esto implica que esta interrupción se puede utilizar para activar la pieza también desde los modos de suspensión distintos del modo inactivo. El reloj de E/S se detiene en todos los modos de suspensión excepto en el modo inactivo". Mi ATtiny pasa la mayor parte del tiempo en modo de apagado, por lo que pensé que la interrupción de bajo nivel era mi única opción. ¿Todavía me falta algo?
Esta interrupción activará su uC desde el modo de apagado. Consulte la sección 7.1.3.Power-down Modeen la página 34.
@abdullahkahraman: sí, pero esta sección también dice: This sleep mode halts all generated clocks, allowing operation of asynchronous modules only.Y la sección 9.2.1 dice: A low level interrupt on INT0 is detected asynchronously.... The I/O clock is halted in all sleep modes except Idle mode.. Estoy bastante seguro de que esto significa que solo las condiciones de bajo nivel pueden despertar al uC del modo de apagado. El disparador Rising Edge requeriría un reloj en funcionamiento, que no funciona en ese modo de suspensión. ¿Alguna vez has probado a hacer lo que te propones? ¿Funciona?
@abdullahkahraman: Hmm, creo que entiendo lo que quieres decir ahora. La restricción de "solo nivel bajo" se aplica solo a INTO, por lo que es probable que el uso de PCINT0 en PB0 funcione. Ahora recuerdo por qué no fui en esa dirección. El uso de Cambio de pin en lugar de la interrupción de nivel haría que el uC se despertara con el doble de frecuencia: una vez para el flanco ascendente y otra para la descendente. He estado tratando de hacer todo lo posible para conservar energía, así que elegí ir con una interrupción de nivel, que está limitada a BAJO solamente.
@Val Blant En caso de que no lo supiera, ese alcance puede exportar imágenes .bmp a unidades flash o computadoras a través de USB o Ethernet. La legibilidad debería ser un poco mejor que con las fotos de la pantalla.
@ValBlant Mire la corriente de suministro del inversor y verá que no es una buena idea usarlo, en términos de potencia. Además, verifique la corriente de suministro de la uC a toda velocidad. Entonces compare.

Respuestas (3)

EDITAR: debido a mi mala interpretación del circuito, estoy editando la respuesta para centrarme en la salida del sensor. ¿Está utilizando la salida analógica para alimentar el inversor? Si es así, tal vez debería probar un disparador Schmitt como un 74HC14

No, creo que mi E/S es correcta: está viendo el diagrama incorrecto. Corrija uno aquí: semicon.toshiba.co.jp/info/…
El pin 8 es una salida y tu enlace dice lo mismo que el mío.
Muéstranos una foto de la parte superior del tablero.
Sí, el pin 8 es una salida. Incluso lo tengo etiquetado como "FUERA" en mi foto en la publicación original. La señal del sensor entra en el pin 9 y se enruta al ATtiny desde el pin 8. Pensé que estaba viendo el diagrama incorrecto porque la imagen que publicó se veía muy diferente de la imagen en la hoja de datos.
Oh, ya veo... pero ¿por qué estás invirtiendo la entrada a tu ATtiny cuando el dispositivo en sí puede invertir en software? Esto parece inútil y confuso? ¿De hecho necesita un inversor disparador schmidtt?
@Buzby: Claro. Actualizando mi publicación original con la imagen de la vista superior.
@Andyaka: La razón por la que pensé que necesitaba un inversor es porque esta señal está destinada a despertar a ATtiny del modo de apagado, donde no hay relojes funcionando. El nivel BAJO INT0 es la única interrupción asíncrona que podría usar, b/c las interrupciones de borde ascendente requerirían un reloj en marcha. Recibo esta información de las secciones 9.2.1 y 7.1.3 del manual. Dígame si estoy equivocado acerca de esto y si hay una manera de usar un nivel ALTO para activar el chip.
@ValBlant No soy un experto en el tipo ATtiny. Si ha establecido que tiene que ser esa polaridad, que así sea. ¿Cuáles son los niveles de señal de entrada en el inversor? ¿Podría, pero no aplicar los niveles lógicos adecuados? ¿Podría también necesitar? un inversor disparador schmidtt como 74HC14?
Además, ¿está utilizando la salida analógica o digital del dispositivo? Hubiera pensado que estarías usando la salida digital.
@Andyaka: ¡Ajá! ¡Ahora un inversor disparador Schmidtt suena como una gran idea! Especialmente teniendo en cuenta que ahora estoy bastante seguro de que el problema ocurre porque mi tapa se descarga demasiado lentamente, por lo que paso demasiado tiempo en la zona de umbral del inversor, lo que parece confundir a este inversor en particular y atascarlo en ese estado de transición ( ver mi EDITAR al original). Un gatillo Schmidt sería inmune a eso, ¿no?
@Andyaka: en lo que respecta a la salida analógica frente a la digital, la salida es digital, pero estoy usando la tapa para que no lo sea tanto. Deliberadamente retrasé la transición de ALTO a BAJO, porque no sabía que confundiría al inversor (supongo que estaba pensando en el inversor como si tuviera un disparador schmidt, pero no sabía qué era eso) hasta que lo mencionaste :)). Me pregunto por qué mi diseño funciona de manera tan confiable en la placa de prueba. Parece sugerir que un ajuste muy pequeño en la PCB podría lograr el mismo resultado, pero ¿cuál sería ese ajuste? ¿Agregar más gorras en alguna parte?
Tal vez si quita la tapa y ve cómo se ve, si es necesario, ¿puede hacer algo en el código ATtiny que mantiene vivo el circuito entre transitorios? ¿Puso un desacoplador 10n en el inversor como sugirió alguien antes?
@Andyaka: sí, probé el desacoplador de 10nF, pero solo tenía uno electrolítico, que no marcó la diferencia. Quitar la tapa ciertamente soluciona el problema. Sin embargo, mi objetivo es minimizar el tiempo de activación del ATtiny, ya que es el sumidero de corriente más grande de mi circuito. Hacer el retraso en el software es fácil, pero costoso en términos de energía, por lo que realmente me gustaría asegurarme de no activarlo a menos que esté seguro de que hay un movimiento al que debo prestar atención.
Creo que necesitarás un disparador Schmitt: pueden manejar tiempos de subida y bajada analógicos lentos y descuidados, eso es lo que están destinados a hacer. ¡Tal vez su circuito original funcionó debido a una casualidad, aunque siempre hay una buena razón!
@Andyaka: Esta es la mejor sugerencia que escuché hasta ahora, así que definitivamente la probaré. Desafortunadamente, tendré que esperar un par de días hasta que lleguen los 74HC14, pero luego publicaré mis resultados. ¡Muchos gracias!
@ValBlant Tenga en cuenta la especificación de "tiempo de subida y bajada de entrada" en la hoja de datos TC74HC04, que especifica las señales de entrada más lentas que se recomiendan (tiempos de subida/bajada de 500 ns a Vcc = 4,5 V). Esta es una especificación fácil de pasar por alto, especialmente porque la hoja de datos de Toshiba no la especifica explícitamente como un máximo.
Usar un inversor con un disparador Schmitt resolvió mi problema.

Sin estudiar su circuito con gran detalle, lo obvio es que no tiene condensadores de desacoplamiento.

Suelde uno a través de los pines de alimentación de cada chip.

Además, su comentario de 'fregar lo hace funcionar' sugiere que tiene una junta seca o una conexión intermitente en alguna parte. Inspeccione todas sus soldaduras cuidadosamente.

Con respecto a que un chip DIL es excesivo, podría haber usado un transistor y poner las cosas de retardo de tiempo en el software.

ok, acabo de leer un poco sobre qué son los condensadores de desacoplamiento. Me sorprende que necesite algo así para alimentar un inversor, que no es un dispositivo de alta velocidad, pero definitivamente lo intentaré. La mayoría de las fuentes sugieren una tapa de cerámica de 0,1 uF en los pines de alimentación del IC. No tengo tapas de cerámica en ese rango, pero sí tengo algunos electrolíticos. ¿Funcionará eso, o necesito absolutamente una cerámica para esto?
Con respecto al inversor, en realidad comencé con un transistor al principio, pero luego me di cuenta de que un inversor de transistor consume demasiada energía cuando está abierto. Mi circuito debe funcionar alrededor de 60uA (cuando no está transmitiendo), lo que no pude lograr con un transistor, pero el inversor IC pareció hacer el trabajo.
Acabo de probar electrolíticos de 0.1uF y 1uF como tapas de desacoplamiento sin ningún cambio. Sin embargo, descubrí algo interesante que creo que puede ser una pista. Actualizaré la publicación principal con la nueva información.

Su principal preocupación parece ser reducir el consumo de energía.

El AMN42121 consume alrededor de 50uA de forma continua. El 74HC04 consume alrededor de 20uA de forma continua. El ATTINY85 consume alrededor de 300uA de forma intermitente, es decir, cuando se despierta. La radio utilizará miliamperios cuando transmita.

¿Con qué frecuencia se activará el sensor?. ¿Has hecho algún cálculo de potencia para estimar la duración de la batería?.

Le sugiero que deseche el inversor y el capacitor de "reducción de velocidad", conecte el sensor directamente a la MCU con un pulldown de 10K según la hoja de datos del sensor y escriba la lógica de retardo de tiempo en la MCU.

[EDITAR] Aunque tiene las cosas un poco mal, me alegra ver que está probando su circuito etapa por etapa. Es mucho más fácil que tratar de encontrar fallas en un proyecto terminado.

Tampoco veo la necesidad de un inversor. El AVR tiene interrupciones de cambio de pin PCI además de INT0/1. PCI detecta un cambio en el estado del pin, ya sea ALTO o BAJO. Puede activar eso y luego agregar un código antirrebote.
Creo que 74HC04 consume mucho más que eso.
Hacer un cálculo detallado de la vida útil de la batería y un análisis algorítmico del código en mi uC muestra que ustedes tienen razón: no estoy ganando mucho al usar el inversor en lugar de la interrupción de cambio de pin. Si tuviera que hacerlo de nuevo, haría lo que sugieres. Sin embargo, la duración de mi batería con el circuito actual será de 270 días en el peor de los casos, así que creo que dejaré el diseño como está, usaré un disparador Schmitt en mi inversor y pasaré al siguiente proyecto. ¡Gracias a todos!