Le circuit fonctionne sur la planche à pain mais pas sur le PCB

9

J'ai un circuit assez simple qui fonctionne parfaitement sur la planche à pain, mais j'ai beaucoup de mal à le transférer sur un PCB. Je vois un comportement très étrange qui se situe en dehors de mon expérience actuelle, j'espère donc obtenir des conseils.

Le circuit met en œuvre un capteur de mouvement wifi, bien que le problème que je rencontre se produise avant d'arriver à la partie RF, ou même à la partie uC du diagramme: entrez la description de l'image ici

J'ai encerclé la partie qui a des problèmes.

R3 est une résistance de rappel, qui est requise b / c AMN42121 entraîne la sortie HAUTE lorsqu'un mouvement est détecté, mais la laisse suspendue pour aucun mouvement, donc un retrait est nécessaire.

J'ai utilisé C1 pour lisser la transition entre le mouvement et l'absence de mouvement. C1 fait que le niveau de sortie passe à LOW lentement et en douceur, donc l'état "sans mouvement" est atteint après quelques secondes sans mouvement.

L'onduleur est là. Les interruptions externes de b / c attiny sont déclenchées par le niveau LOW, j'ai donc besoin d'inverser la logique. Il est regrettable que j'aie dû utiliser un si grand boîtier DIP pour un onduleur, mais je n'ai rien trouvé d'autre.

J'ai fait un PCB double face pour ce circuit, qui ressemble à ceci: entrez la description de l'image ici

Encore une fois, je n'ai assemblé la zone entourée jusqu'à présent.

Après avoir soudé S1, R3 et C1, j'obtiens le signal suivant de la sortie du capteur: entrez la description de l'image ici

C'est exactement ce que je veux voir, donc tout va bien jusqu'à ce point.

Ensuite, j'ai soudé une prise pour IC2 et branché l'onduleur. C'est là que les mystères commencent. Au début, tout allait bien, mais après un certain temps à jouer avec la carte, le circuit a soudainement cessé de fonctionner. Lorsque je place une sonde sur la sortie du capteur, au lieu du joli signal que nous avons vu ci-dessus, je vois des variations sur les deux exemples suivants:

Exemple 1: entrez la description de l'image ici

Exemple 2: entrez la description de l'image ici

Notez que contrairement au premier exemple, le signal dans le deuxième exemple n'est pas généré par le mouvement - cette forme de dent de scie émerge d'elle-même sans aucune action de ma part.

Après de nombreux tests, j'ai pu établir ce qui suit:

  1. Débrancher l'onduleur de la prise permet au capteur de fonctionner à nouveau correctement.
  2. Couper l'alimentation de l'onduleur tout en le laissant branché fait fonctionner le capteur.
  3. L'utilisation d'un onduleur différent n'a aucun effet.
  4. Le fait de tremper la planche avec un dissolvant de flux ou de l'acétone et de la frotter avec une brosse fait parfois fonctionner à nouveau le capteur, mais très brièvement. À un moment donné, j'ai pu faire ressembler le signal à ceci en frottant agressivement avec une brosse à dents: entrez la description de l'image ici

Notez que même dans cette dernière image, le signal ne revient pas complètement au niveau BAS. L'effet a disparu presque dès que j'ai arrêté de me brosser.

Jusqu'à présent, cela indique un défaut de soudure, sauf que je ne vois vraiment pas le problème. J'ai examiné attentivement la planche avec un grossissement puissant et testé tous les points auxquels je pouvais penser pour la continuité - tout est vérifié. Voici un gros plan du travail de soudure sur la prise IC et le capteur: entrez la description de l'image ici

Je suis maintenant à court d'idées, donc tout conseil serait grandement apprécié. Je vous remercie.

ÉDITER:

Je viens de découvrir quelque chose d'intéressant. Un examen plus approfondi de l'exemple # 2 (le signal de forme en dents de scie) révèle que la pente descendante est un segment de la courbe de décharge C1 attendue. Lorsque le niveau de tension se rapproche du seuil de l'onduleur et y passe trop de temps, l'onduleur semble devenir confus! Il génère ce petit éclat de bruit, puis fait quelque chose pour relancer l'entrée à HIGH, ou se bloque simplement indéfiniment dans cet état bruyant "indéterminé" jusqu'à ce que la sortie du capteur redevienne HIGH b / c de mouvement (Exemple # 1).

Pour tester cette théorie, j'ai remplacé C1 par un bouchon 10 fois plus petit, ce qui rend la courbe de décharge beaucoup plus raide et "le tour est joué!" - l'onduleur ne se confond plus et le circuit fonctionne!

Bien sûr, cela va à l'encontre du but de C1, car il ne fournit plus autant de retard que je le souhaite. Je ne sais pas pourquoi je n'ai pas eu ce problème avec l'onduleur sur la planche à pain, mais cela suggère qu'il pourrait y avoir une solution très simple qui pourrait résoudre ce problème. J'ai lu que les planches à pain ont une grande capacité "parasite", alors peut-être ai-je juste besoin d'ajouter stratégiquement des condensateurs supplémentaires quelque part? Des idées?

EDIT 2: Fournir une vue de dessus puisque certains commentateurs l'ont demandé: entrez la description de l'image ici

Val Blant
la source
Les bananes sacrées, ces joints de soudure ont l'air terribles . Vous avez désespérément besoin d'un peu de flux là-bas.
Connor Wolf
@ Connor Wolf: parlez-vous des broches IC qui ne sont connectées à rien? Ceux-ci sont à peine soudés du tout, b / c je n'ai vu aucune raison de les souder. Ou parlez-vous des autres joints de soudure?
Val Blant
Pourquoi utilisez-vous un onduleur? Connectez la sortie du capteur au PB2 avec une résistance série de 220-470 ohms, et vous êtes prêt à partir. Vous pouvez ajouter une résistance de rappel, mais 10Meg est beaucoup trop élevé. Changez-le avec un 10k. De plus, vous n'avez pas besoin de connecter C1. Vous pouvez effectuer le filtrage dans le logiciel avec une simple routine de retard. En plus de cela, C1 peut ajouter une charge au capteur de sorte que lorsque l'IC de l'onduleur est connecté, la charge est trop importante que le capteur ne peut pas conduire, peut-être?
abdullah kahraman
J'ai vérifié maintenant et le capteur peut donner une sortie maximale de 100uA! L'onduleur demande environ 1 mA de courant d'entrée! Donc, la résistance de rappel ci-dessus que j'ai suggérée, qui est de 10k, est trop. Changez-le avec un 330k ou 470k
abdullah kahraman
@abdullah kahraman: Je suis désolé - je ne comprends pas votre idée. INT0 sur attiny est déclenché lors de la transition vers LOW, donc "aucun mouvement" ne doit être représenté par une entrée HIGH. N'est-ce pas vrai? Pourriez-vous expliquer votre idée plus en détail?
Val Blant

Réponses:

7

EDIT - en raison de ma mauvaise interprétation du circuit, je modifie la réponse pour me concentrer sur la sortie du capteur - utilisez-vous la sortie analogique pour alimenter l'onduleur - si vous l'êtes peut-être, vous devriez essayer un déclencheur Schmitt comme un 74HC14

Andy aka
la source
1
@ValBlant Je ne suis pas un expert du type ATtiny - si vous avez établi que la polarité doit être la même que celle-ci - quels sont les niveaux du signal d'entrée dans l'onduleur - pourriez-vous mais sans appliquer les niveaux logiques appropriés - pourriez-vous également avoir besoin un inverseur de déclenchement schmidtt comme 74HC14?
Andy aka
1
Peut-être que si vous retirez le capuchon et voyez à quoi cela ressemble alors, si nécessaire, vous pouvez faire quelque chose dans le code ATtiny qui maintient le circuit en vie entre les transitoires? Avez-vous mis un découpleur 10n sur l'onduleur comme suggéré par quelqu'un plus tôt?
Andy aka
1
Je pense que vous aurez besoin d'un déclencheur Schmitt - ils peuvent gérer les temps de montée et de descente lents analogiques bâclés - c'est ce qu'ils sont censés faire. Peut-être que votre circuit d'origine a fonctionné à cause d'un coup de chance bien qu'il y ait toujours une bonne raison !!
Andy aka
1
@ValBlant Notez la spécification "temps de montée et de descente d'entrée" sur la fiche technique du TC74HC04 - qui spécifie les signaux d'entrée les plus lents qui sont recommandés (temps de montée / descente de 500 ns à Vcc = 4,5 V). Il s'agit d'une spécification facile à manquer, d'autant plus que la fiche technique Toshiba ne la spécifie pas explicitement comme un maximum.
Chris Johnson
1
L'utilisation d'un onduleur avec un déclencheur Schmitt a résolu mon problème.
Val Blant
11

Sans étudier votre circuit en détail, il est évident que vous n'avez pas de condensateurs de découplage.

Souder une sur les broches d'alimentation de chaque puce.

De plus, votre commentaire «Le lavage fait fonctionner» suggère que vous avez une articulation sèche ou une connexion intermittente quelque part. Inspectez soigneusement toutes vos soudures.

En ce qui concerne une puce DIL étant exagérée, vous auriez pu utiliser un transistor et mettre le retard dans le logiciel.

Buzby
la source
ok, je viens de lire ce que sont les condensateurs de découplage. Je suis surpris d'avoir besoin de quelque chose comme ça pour alimenter un onduleur, qui n'est pas un appareil à haute vitesse, mais je vais certainement l'essayer. La plupart des sources suggèrent un capuchon en céramique de 0,1 uF à travers les broches d'alimentation du CI. Je n'ai pas de bouchons en céramique dans cette gamme, mais j'ai des électrolytes. Est-ce que cela fonctionnera, ou ai-je absolument besoin d'une céramique pour cela?
Val Blant
En ce qui concerne l'onduleur, j'ai d'abord commencé avec un transistor, mais j'ai réalisé plus tard qu'un onduleur à transistor consomme beaucoup trop d'énergie lorsqu'il est ouvert. Mon circuit doit fonctionner à environ 60uA (lorsqu'il ne transmet pas), ce que je ne pouvais pas atteindre avec un transistor, mais l'IC de l'onduleur semblait faire le travail.
Val Blant
Je viens d'essayer les électrolytes 0,1 uF et 1 uF comme bouchons de découplage sans aucun changement. Cependant, j'ai découvert quelque chose d'intéressant qui, je pense, peut être un indice. Je mettrai à jour le message principal avec les nouvelles informations.
Val Blant
3

Votre principale préoccupation semble être la réduction de la consommation d'énergie.

L'AMN42121 consomme environ 50 µA en continu. Le 74HC04 consomme environ 20 µA en continu. L'ATTINY85 consomme environ 300 uA par intermittence, alors réveillé. La radio utilise des milliampères lorsqu'elle émet.

À quelle fréquence le capteur sera-t-il déclenché?. Avez-vous fait des calculs de puissance pour estimer la durée de vie de la batterie?.

Je vous suggère de jeter l'onduleur et le condensateur de `` ralentissement '', de câbler le capteur directement au MCU avec une conversion de 10K conformément à la fiche technique du capteur et d'écrire la logique de temporisation dans le MCU.

[EDIT] Même si vous vous trompez un peu, je suis heureux de voir que vous testez votre circuit étape par étape. C'est tellement plus facile que d'essayer de trouver un projet terminé.

Buzby
la source
1
Je ne vois pas non plus la nécessité d'un onduleur. L'AVR a des interruptions de changement de broches PCI en plus de INT0 / 1. PCI détecte un changement d'état des broches, qu'il soit HAUT ou BAS. Vous pouvez déclencher cela, puis ajouter du code anti-rebond.
lyndon
Je pense que 74HC04 consomme beaucoup plus que cela.
abdullah kahraman
Faire un calcul détaillé de la durée de vie de la batterie et une analyse algorithmique du code dans mon uC montre que vous avez raison - je ne gagne pas du tout en utilisant l'onduleur au lieu de l'interruption Pin Change. Si je devais recommencer, je ferais ce que vous proposez. Cependant, l'autonomie de ma batterie avec le circuit actuel sera de 270 jours dans le pire des cas, donc je pense que je vais laisser la conception telle quelle, utiliser un déclencheur Schmitt sur mon onduleur et passer au projet suivant. Merci à tous!
Val Blant