Il circuito funziona su breadboard ma non su PCB


9

Ho un circuito abbastanza semplice che funziona perfettamente sulla breadboard, ma ho molti problemi a trasferirlo su un PCB. Vedo un comportamento molto strano che si trova al di fuori della mia esperienza attuale, quindi spero di ricevere qualche consiglio.

Il circuito implementa un sensore di movimento wifi, sebbene il problema che sto riscontrando si verifichi prima che arrivi alla parte RF, o anche alla parte uC del diagramma: inserisci qui la descrizione dell'immagine

Ho cerchiato la parte in difficoltà.

R3 è un resistore pull-down, necessario b / c AMN42121 guida l'uscita HIGH quando viene rilevato un movimento, ma lo lascia sospeso per nessun movimento, quindi è necessario il pull-down.

Ho usato C1 per appianare la transizione tra movimento e nessun movimento. C1 porta il livello di uscita su BASSO lentamente e senza intoppi, quindi lo stato "nessun movimento" viene raggiunto dopo pochi secondi di assenza di movimento.

Inverter c'è che gli interrupt esterni di attiny sono attivati ​​dal livello LOW, quindi ho bisogno di invertire la logica. È un peccato che ho dovuto usare un pacchetto DIP così grande per un inverter, ma non sono riuscito a trovare nient'altro.

Ho realizzato un circuito stampato a doppia faccia per questo circuito, che assomiglia a questo: inserisci qui la descrizione dell'immagine

Ancora una volta, ho solo assemblato l'area cerchiata finora.

Dopo aver saldato S1, R3 e C1, ricevo il seguente segnale dall'uscita del sensore: inserisci qui la descrizione dell'immagine

Questo è esattamente quello che voglio vedere, quindi tutto va bene fino a questo punto.

Successivamente ho saldato in una presa per IC2 e collegato l'inverter. Questo è dove iniziano i misteri. All'inizio tutto andava bene, ma dopo un po 'di confusione con la scheda il circuito improvvisamente ha smesso di funzionare. Quando posiziono una sonda sull'uscita del sensore, invece del bel segnale che abbiamo visto sopra, vedo delle variazioni nei seguenti due esempi:

Esempio 1: inserisci qui la descrizione dell'immagine

Esempio 2: inserisci qui la descrizione dell'immagine

Nota che, a differenza del primo esempio, il segnale nel secondo esempio non è generato dal movimento - che ha visto la forma del dente emergere da solo senza alcuna azione da parte mia.

Dopo molti test, sono stato in grado di stabilire quanto segue:

  1. Scollegando l'inverter dalla presa, il sensore funziona di nuovo correttamente.
  2. Se si interrompe l'alimentazione dell'inverter lasciandolo collegato, il sensore funziona.
  3. L'uso di un altro inverter non ha alcun effetto.
  4. Immergere la scheda con un dispositivo di rimozione del flusso o acetone e strofinare con una spazzola a volte fa funzionare di nuovo il sensore, ma molto brevemente. Ad un certo punto sono stato in grado di far apparire il segnale in questo modo strofinando aggressivamente con uno spazzolino da denti: inserisci qui la descrizione dell'immagine

Si noti che anche in quest'ultima immagine il segnale non sta tornando al livello LOW fino in fondo. L'effetto è scomparso non appena ho smesso di spazzolare.

Finora questo indica un difetto di saldatura, tranne per il fatto che non riesco davvero a vedere il problema. Ho esaminato attentamente la lavagna con un potente ingrandimento e testato tutti i punti a cui potevo pensare per la continuità: tutto è andato a buon fine. Ecco un primo piano del lavoro di saldatura sulla presa IC e sul sensore: inserisci qui la descrizione dell'immagine

Non ho più idee, quindi ogni consiglio sarebbe molto apprezzato. Grazie.

MODIFICARE:

Ho appena scoperto qualcosa di interessante. Un esame più attento dell'esempio n. 2 (il segnale della forma del dente di sega) rivela che la pendenza verso il basso è un segmento della curva di scarico C1 prevista. Quando il livello di tensione si avvicina alla soglia dell'inverter e trascorre troppo tempo lì, l'inverter sembra confondersi! Sta generando quel piccolo scoppio di rumore e quindi fa qualcosa per riportare l'ingresso su ALTO, o semplicemente riattacca in quello stato rumoroso "indeterminato" indefinitamente fino a quando l'uscita del sensore diventa di nuovo ALTA b / c di movimento (Esempio n. 1).

Per testare questa teoria ho sostituito C1 con un tappo 10 volte più piccolo, rendendo così la curva di scarico molto più ripida e "voilà!" - l'inverter non si confonde più e il circuito funziona!

Ovviamente, questo sconfigge lo scopo di C1, poiché ora non fornisce il ritardo che desidero. Non sono sicuro del motivo per cui non ho avuto questo problema con l'inverter sulla breadboard, ma suggerisce che potrebbe esserci una soluzione molto semplice che può risolvere questo problema. Ho letto che le breadboard hanno una grande capacità "vagante", quindi forse ho solo bisogno di aggiungere strategicamente altri condensatori da qualche parte? Qualche idea?

EDIT 2: Fornire una vista dall'alto poiché alcuni commentatori lo hanno chiesto: inserisci qui la descrizione dell'immagine


Sante banane, quei giunti saldati sembrano terribili . Hai un disperato bisogno di un po 'di flusso lì.
Connor Wolf,

@Connor Wolf: ti riferisci ai pin IC che non sono collegati a nulla? Quelli sono a malapena saldati, b / c non ho visto alcun motivo per saldarli. O stai parlando degli altri giunti di saldatura?
Val Blant,

Perché stai usando un inverter? Collega l'uscita del sensore a PB2 con un resistore serie da 220-470 ohm e sei a posto. Puoi aggiungere un resistore pull down, ma 10Meg è troppo alto. Cambialo con un 10k. Inoltre, non è necessario collegare C1. Puoi eseguire il filtro nel software con una semplice routine di ritardo. Inoltre, C1 potrebbe aggiungere un carico al sensore in modo tale che quando il circuito integrato dell'inverter è collegato, il carico è troppo che il sensore non può guidare, forse?
Abdullah Kahraman,

Ho verificato ora e il sensore può fornire una potenza massima di 100uA! L'inverter richiede circa 1 mA di corrente in ingresso! Quindi, la resistenza di pull-down che ho suggerito sopra, che è 10k, è troppo. Cambialo con 330k o 470k
abdullah kahraman,

@abdullah kahraman: mi dispiace, non capisco la tua idea. INT0 su attiny viene attivato durante la transizione a LOW, quindi "nessun movimento" deve essere rappresentato dall'ingresso HIGH. Non è vero? Potresti spiegare la tua idea in modo più dettagliato?
Val Blant,

Risposte:


7

EDIT - a causa della mia errata interpretazione del circuito sto modificando la risposta per concentrarmi sull'uscita del sensore - stai usando l'uscita analogica per alimentare l'inverter - se lo sei forse dovresti provare un trigger Schmitt come un 74HC14


1
@ValBlant Non sono un esperto del ragazzo ATtiny - se hai stabilito che deve essere quella polarità di così sia - quali sono i livelli del segnale di ingresso nell'inverter - potresti ma non applicare livelli logici adeguati - potresti anche aver bisogno un inverter trigger schmidtt come 74HC14?
Andy aka

1
Forse se rimuovi il tappo e vedi come appare allora, se necessario puoi fare qualcosa nel codice ATtiny che mantiene in vita il circuito tra i transitori? Hai messo un disaccoppiatore 10n sull'inverter come suggerito da qualcuno in precedenza?
Andy aka

1
Penso che avrai bisogno di un trigger di Schmitt - sono in grado di gestire i tempi di salita e discesa lenti analogici sciatti - questo è ciò che intendono fare. Forse il tuo circuito originale ha funzionato a causa di un colpo di fortuna, anche se c'è sempre una buona ragione !!
Andy aka

1
@ValBlant Annotare la specifica "tempo di salita e discesa dell'ingresso" sul foglio dati TC74HC04 - che specifica i segnali di ingresso più lenti consigliati (tempi di salita / discesa 500 ns a Vcc = 4,5 V). Questa è una specifica facile da perdere, soprattutto perché il foglio dati Toshiba non lo specifica esplicitamente come massimo.
Chris Johnson,

1
L'uso di un inverter con un trigger Schmitt ha risolto il mio problema.
Val Blant,

11

Senza studiare il tuo circuito in dettaglio, la cosa ovvia è che non hai condensatori di disaccoppiamento.

Saldare uno attraverso i pin di alimentazione di ciascun chip.

Inoltre, il tuo commento 'scrubbing lo fa funzionare' suggerisce che hai una connessione secca o intermittente da qualche parte. Ispeziona attentamente tutte le saldature.

Per quanto riguarda il fatto che un chip DIL sia eccessivo, avresti potuto semplicemente usare un transistor e inserire il ritardo nel software.


ok, ho appena letto qualche cosa sui condensatori di disaccoppiamento. Sono sorpreso che avrei bisogno di qualcosa del genere per alimentare un inverter, che non è un dispositivo ad alta velocità, ma ci proverò sicuramente. La maggior parte delle fonti suggerisce un tappo in ceramica 0,1uF attraverso i pin di alimentazione dell'IC. Non ho tappi in ceramica in quella gamma, ma ho alcuni elettrolitici. Funzionerà o ho assolutamente bisogno di una ceramica per questo?
Val Blant,

Per quanto riguarda l'inverter, inizialmente ho iniziato con un transistor, ma in seguito mi sono reso conto che un inverter a transistor consuma troppa potenza quando è aperto. Il mio circuito deve funzionare a circa 60uA (quando non si trasmette), cosa che non sono stato in grado di ottenere con un transistor, ma l'IC dell'inverter sembrava fare il suo lavoro.
Val Blant,

Ho appena provato elettrolitici 0,1uF e 1uF come tappi di disaccoppiamento senza alcun cambiamento. Tuttavia, ho scoperto qualcosa di interessante che penso possa essere un suggerimento. Aggiornerò il post principale con le nuove informazioni.
Val Blant,

3

La tua preoccupazione principale sembra ridurre il consumo di energia.

L'AMN42121 consuma continuamente circa 50uA. Il 74HC04 consuma continuamente circa 20uA. ATTINY85 consuma circa 300uA a intermittenza, poi si è svegliato. La radio utilizzerà milliampere quando trasmette.

Con quale frequenza verrà attivato il sensore? Hai effettuato calcoli sulla potenza per stimare la durata della batteria?

Ti suggerisco di scartare l'invertitore e il condensatore di "rallentamento", collegare il sensore direttamente all'MCU con un pulldown 10K come da scheda tecnica del sensore e scrivere la logica del ritardo nell'MCU.

[EDIT] Anche se hai sbagliato un po 'le cose, sono felice di vedere che stai testando il tuo circuito uno stadio alla volta. È molto più facile che cercare di trovare un progetto completato.


1
Non vedo nemmeno la necessità di un inverter. L'AVR ha PCI - Pin Change Interrupts oltre a INT0 / 1. PCI rileva un cambiamento nello stato dei pin se è ALTO o BASSO. Puoi attivarlo e quindi aggiungere il codice di debouncing.
lyndon,

Penso che 74HC04 consumi molto di più.
Abdullah Kahraman,

Fare un calcolo dettagliato della durata della batteria e alcune analisi dell'algoritmo del codice nel mio uC mostra che avete ragione ragazzi - non sto vincendo molto usando l'inverter invece dell'interrupt Pin Change. Se dovessi farlo di nuovo, farei come suggerisci tu. Tuttavia, la durata della batteria con il circuito corrente sarà di 270 giorni nel peggiore dei casi, quindi penso che lascerò il design così com'è, userò un grilletto Schmitt sul mio inverter e passerò al prossimo progetto. Grazie a tutti!
Val Blant,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.