Input onda quadra su PIN digitale tramite generatore di funzione

Progetti Arduino
apollokid
Messaggi: 74
Iscritto il: lun 27 lug 2020, 14:36

Input onda quadra su PIN digitale tramite generatore di funzione

Messaggio da apollokid »

Buongiorno a tutti, provo a sottoporre questo problema e su come pensavo di risolverlo sperando di ricevere qualche suggerimento utile.
Voglio leggere una onda quadra variabile tramite arduino per calcolare la durata dei Ton degli impulsi e sapere in un arco temporale predefinito (es. un minuto) quanto è stato il tempo totale di ON.
Volevo creare quindi una situazione simulata così da poter scrivere il software a casa e testarlo utilizzando il generatore di funzione incorporato nel mio oscilloscopio USB (un Picoscope 2204A) solo che la tensione massima di uscita varia tra -2V e + 2V. Se anche generassi l'onda solo tra 0V e 2V non raggiungerei comunque una tensione sufficiente per essere compatibile con i livelli TTL e poter perciò usare un PIN di input digitale su cui attaccare una interrupt.

Pensavo quindi di pilotare con il generatore di funzione la base di un transistor BJT così da poter elevare la tensione alla +VCC di alimentazione di arduino. Probabilmente potrei avere una lieve alterazione della forma d'onda che non sarebbe più una quadrata perfetta, specie se salgo con la frequenza, però visto che il tutto dovrà funzionare a massimo 200Hz andrebbe più che bene per la simulazione.

Il mio unico dubbio è che il generatore non sia in grado di pilotare la base del transistor in modo da mandarlo in saturazione. Nelle caratteristiche di uscita non è riportata una corrente massima ma solo l'impedenza di uscita che è di 600Ω.
Secondo voi è fattibile? Cosa dovrei controllare per non rischiare di danneggiare il generatore di segnale?
Avatar utente
Maxvarese
Messaggi: 1954
Iscritto il: mar 9 apr 2019, 23:53

Re: Input onda quadra su PIN digitale tramite generatore di funzione

Messaggio da Maxvarese »

Ciò che ti serve sapere,è proprio l'impedenza d'uscita..
Io collegherei in serie all' uscita del generatore di funzione una resistenza da 4k7 e attraverso questa alla base di un bjt Darlington con un resistore di pull up sul collettore.
apollokid
Messaggi: 74
Iscritto il: lun 27 lug 2020, 14:36

Re: Input onda quadra su PIN digitale tramite generatore di funzione

Messaggio da apollokid »

Perdona la mia ignoranza ma io sono informatico e non eletronico quindi sbilanciato come competenze sul lato software.
L'impedenza di uscita la devo considerare come quando studiavo all'ITIS i generatori di tensione e corrente ideali VS generatori reali?
Mi spiego, i 600Ω dichiarati vanno letti come l'impedenza interna di un generatore di tensione e quindi se lo cortocircuito la corrente prodotta è di
2/SQRT(2) / 600 = 2,4mA circa?
E si può quindi chiderglieli tutti questi 2,4mA al generatore di segnale senza problemi o si potrebbe danneggiarlo?

Perdona la banalità forse della domanda, ma non ho mai avuto generatori di funzione in vita mia e questo è il primo e ce l'ho da una settimana soltanto, non vorrei bruciarlo per mia incompetenza.

Per il resto un BJT darlington non ce l'ho ma penso che non dovrei avere difficltà a farne uno usando 2 BJT se uno solo non dovesse bastare.
apollokid
Messaggi: 74
Iscritto il: lun 27 lug 2020, 14:36

Re: Input onda quadra su PIN digitale tramite generatore di funzione

Messaggio da apollokid »

Penso di essere riuscito a rispondermi da solo: https://www.keysight.com/main/editorial ... =IT&lc=ita

Sinceramente non avevo idea di questa cosa ma ne prendo atto.
In pratica con una resistenza da 600Ω ottengo ai capi della resistenza metà della tensione a vuoto, per avere tensioni maggiori l'unica e salire con la resistenza ed in effetti già sui 10KΩ sto vedendo che torno quasi vicino ai 2V.
Avatar utente
Maxvarese
Messaggi: 1954
Iscritto il: mar 9 apr 2019, 23:53

Re: Input onda quadra su PIN digitale tramite generatore di funzione

Messaggio da Maxvarese »

Se assorbi dal generatore tutta la corrente che può erogare la tensione cadrà a quasi zero.
La resistenza serie da 4700 Ohm serve a limitare l'assorbimento massimo. Anche in caso di cortocircuito.
Questa andrebbe dimensionata tenendo conto del hfe dei bjt, è della corrente di collettore.
Non avendo questi dati ti ho consigliato il valore minimo che metta al sicuro il tuo generatore.
apollokid
Messaggi: 74
Iscritto il: lun 27 lug 2020, 14:36

Re: Input onda quadra su PIN digitale tramite generatore di funzione

Messaggio da apollokid »

Hai perfettamente ragione, è che io però non ho ancora capito come si fa dalle specifiche capire quanta corrente riesce ad erogare in funzione della resistenza che metti.
Ad ogni sono riuscito usando un unico BJT, un vecchio BC237 NPN con hFE=120...800, ho messo una resistenza da 250Ω sul collettore in modo da avere massimo 20mA che era la più bassa riportata nel datasheet e poi per farlo lavorare bene in zona di interdizione ho calcolato che avrei dovuto far passare nella base almeno 0,3mA.
Non riuscendo però a calcolare che valore di resistenza usare per la base ho fatto delle prove empiriche con una resistenza variabile da finchè ho trovato che con circa 8kΩ avevo la migliore amplificazione con una caduta di tensione in uscita dal generatore di segnale trascurabile.
Non penso sia stato un metodo elegante, ma mi pare che abbia funzionato visto che 4,4V di tensione massima sono più che abbondanti per un livello logico TTL alto e considerando che il calo di tensione misurato sull'uscita del generatore di segnale è quasi impercettibile (1.93V quando il massimo a vuoto è 2V).
Allegati
generatore onda quadra 5V.png
generatore onda quadra 5V.png (88.61 KiB) Visto 3885 volte
Avatar utente
Maxvarese
Messaggi: 1954
Iscritto il: mar 9 apr 2019, 23:53

Re: Input onda quadra su PIN digitale tramite generatore di funzione

Messaggio da Maxvarese »

Io alzerei il valore della resistenza di pull up almeno a 4k7 se il transistor si trova sulla scheda con Arduino, oppure potresti usare il pull up interno di Arduino.

Una resistenza di collettore così bassa, sarebbe giustificata in caso di una lunga linea con parecchia capacità parassita, inoltre considera che, causa un innalzamento della tensione del livello logico 0.

La corrente di base è uguale a :

iB=(Vout - Vbe) ÷ R

Se l'emettitore è collegato a massa Vbe è circa 0,65 V.
apollokid
Messaggi: 74
Iscritto il: lun 27 lug 2020, 14:36

Re: Input onda quadra su PIN digitale tramite generatore di funzione

Messaggio da apollokid »

Per la resistenza di pull-up pensavo si di usare quella interna di arduino, almeno per incominciare e ti confermo che emettiore è collegato a massa e che è tutto sulla stessa breadboard (ho allegato lo schema del circuito giusto per completezza).
Ho seguito poi il tuo consiglio di aumentare la resistenza di collettore RC ed ho messo una resistenza variabile anche al posto di quella fissa da 250Ω.
Ho quindi trovato sempre sperimentalmente che con una RB=6,9KΩ e RC=2,6KΩ la tensione minima è prossima a zero mentre prima effettivamente era di ben 137mV. Anche a livello di consumo energetico è sicuramente stato un ottimo suggerimento, onestamente non avevo idea che si potesse pilotare un BJT anche con correnti così basse.
Anche la tensione massima è leggermente aumentata.

Io però ancora non ho capito come avrei dovuto calcolare in modo teorico la resistenza RB una volta decisa a priori RC.
Perdona la mia ignoranza se puoi, ma se puoi mi scrivi la formula dovevo usare sapendo solo che l'onda quadra a vuoto è 0..+2V e che come impedenza di uscita ha 600Ω una volta fissato RC e quindi la corrente IC?
Te lo chiedo perchè sono alle prime armi e vorrei capire bene le cose e non accontentarmi visto che funzionano.
Allegati
00000001.jpg
00000001.jpg (34.47 KiB) Visto 3875 volte
generatore onda quadra 5V dopo consiglio.png
generatore onda quadra 5V dopo consiglio.png (102.81 KiB) Visto 3875 volte
Avatar utente
Maxvarese
Messaggi: 1954
Iscritto il: mar 9 apr 2019, 23:53

Re: Input onda quadra su PIN digitale tramite generatore di funzione

Messaggio da Maxvarese »

Scusa, è un periodaccio per me, devo svolgere del lavoro privato e posso farlo solo durante la notte quando mia figlia dorme..
Ora Facciamo ordine.

Come calcolare il valore delle resistenze...

Per prima cosa considerando i livelli di tensione dello standard in uso dell'impedenza d'ingresso della logica e dell' isteresi, si determina un adeguata resistenza di
pull up..
Nella tabella in basso i livelli di tensione validi come valori logici...
Nella pratica, visto che le caratteristiche delle porte logiche di una determinata famiglia, sono standardizzate, lo sono anche i valori delle resistenze di pull up e pull down.
Tipicamente per logiche TTL si usano valori da 10 a 100 Kohm salvo casi particolari.
Ora si calcola la corrente di collettore considerando la tensione Vce del transistor in saturazione di 0,4 V..
Come : ic=(5 - 0,4)÷R.
(Approssimazione valida per hfe elevato)
Ora si ricava ib minima come : ib= ic÷hfe.
E la Resistenza di base massima come :
RB MAX = (Vin-0,65)÷ib ,poi dimezzare il valore..
Se l'impedenza d'uscita del generatore che pilota la base è superiore a 1/20 della RB e la tensione fosse bassa é necessario considerarla nel conto, o misurare la Vin reale.
( Nei generatori cinesini l'impedenza d'uscita dichiarata non è sempre vera)
Allegati
ttl-cmos-atmega328.jpg
ttl-cmos-atmega328.jpg (27.64 KiB) Visto 3860 volte
apollokid
Messaggi: 74
Iscritto il: lun 27 lug 2020, 14:36

Re: Input onda quadra su PIN digitale tramite generatore di funzione

Messaggio da apollokid »

Maxvarese, permettimi davvero di ringraziarti per la tua pazienza ed i tuoi contributi.
In particolare con quest'ultima tua risposta ho finalmente capito perchè mi chiedevi della pullup. Non ragiono ancora come un vero elettronico, tu in sostanza dicevi: la resistenza di collettore la metti che è già di pullup e non devi più usare quella interna di arduino.
Ho quindi rivisto mettendo una 10K al collettore e per quella di base alla fine ho capito che te la devi un po' guardare sul campo. La formula Ic = Ib*hfe alla fine la conoscevo bene, così come che Ib andava poi almeno raddoppiata per farlo lavorare bene in zona di saturazione. Se però non sai quanta corrente può erogare il generatore di segnale e sai che appena aumenti di un pelo il carico la tensione crolla non resta forse che fare la prova e misurare.

Comuque ho collegato tutto ed ho iniziato a lavorare sulla parte software, per il momento tutto sembra funzionare abbastanza bene. Ho usato le interrupt e penso bastino ed avanzino ma non mi dispiacerebbe provare ad usare pure il timer hardware.
Lo scopo di tutto ciò alla fine è quello di contare gli impulsi di un'onda quadra, nulla di speciale, è il software che rappresenta il vero cuore di quello che sto facendo, ossia pubblicare questi conteggi come misura degli RPM di un motore a scoppio tramite messaggi PIDs OBD2 ad un cellulare su cui è installato Torque.
Devo ancora fare degli aggiustamenti e poi passare dalla simulazione alla realtà collegando realmente arduino alla centralina della mia auto (e li non mi servirà più questo innalzatore di tensione a BJT).

Poi ci saranno altre letture da fare, alcune semplici come leggere degli switch o dei termistori, altre più complicate come contare la frequenza di un segnale sinusoidale variabile, non so ancora come fare ma ho già qualche idea in mente. Per ora però una cosa alla volta...
Rispondi