Sommario:

Misuratore di condensatori ATTiny85: 4 passaggi
Misuratore di condensatori ATTiny85: 4 passaggi

Video: Misuratore di condensatori ATTiny85: 4 passaggi

Video: Misuratore di condensatori ATTiny85: 4 passaggi
Video: Come utilizzare un Arduino per programmare una MCU ATtiny85 - risolviamo i problemi comuni 2024, Luglio
Anonim
ATTiny85 Misuratore di condensatori
ATTiny85 Misuratore di condensatori
Misuratore di condensatori ATTiny85
Misuratore di condensatori ATTiny85

Questa istruzione è per un misuratore di condensatori basato sull'ATTiny85 con le seguenti caratteristiche.

  • Basato su ATTiny85 (DigiStamp)
  • SSD1306 Display OLED da 0,96"
  • Misura di frequenza per condensatori di basso valore 1pF - 1uF utilizzando l'oscillatore 555
  • Misura del tempo di carica per condensatori di alto valore 1uF - 50000uF
  • 2 porte separate utilizzate per i metodi per ridurre al minimo la capacità fissa
  • Due valori di corrente utilizzati per Charge Time per ridurre al minimo il tempo per grandi condensatori
  • Il metodo 555 azzera automaticamente all'avvio, può essere azzerato con il pulsante
  • Un test rapido utilizzato per selezionare quale metodo utilizzare per ogni ciclo di misurazione.
  • La precisione del metodo del tempo di carica può essere migliorata dal supporto per la regolazione della frequenza di clock OSCVAL

Passaggio 1: schema e teoria

Schema e teoria
Schema e teoria

Lo schema mostra l'ATTiny che guida il display OLED SSD1306 tramite un'interfaccia I2C. È alimentato direttamente da una batteria LiOn da 300 mAh ed è incluso un punto di ricarica che può essere utilizzato con un caricabatterie esterno compatibile con LiOn.

Il primo metodo di misurazione si basa sulla misurazione della frequenza di un oscillatore a corsa libera 555. Questo ha una frequenza di base determinata dai resistori e da un condensatore che dovrebbe essere di alta precisione in quanto determina l'accuratezza delle misurazioni. Ho usato un condensatore di polistirene all'1% da 820 pF che avevo, ma possono essere usati altri valori intorno a 1 nF. Il valore deve essere inserito nel software insieme a una stima dell'eventuale capacità parassita (~20pF). Ciò ha fornito una frequenza di base di circa 16 KHz. L'uscita del 555 viene immessa nel PB2 dell'ATTiny che è programmato come contatore hardware. Misurando il conteggio su un periodo di circa 1 secondo è possibile determinare la frequenza. Questo viene fatto all'avvio per determinare la frequenza di base. Quando un condensatore in prova viene aggiunto in parallelo al condensatore di base allora la frequenza viene abbassata e quando questa viene misurata e confrontata con la frequenza di base allora si può calcolare il valore della capacità aggiunta.

La caratteristica interessante di questo metodo è che il valore calcolato dipende solo dalla precisione del condensatore di base. Il periodo della misurazione non ha importanza. La risoluzione dipende dalla risoluzione delle misurazioni di frequenza che è piuttosto elevata, quindi è possibile misurare anche capacità aggiuntive molto piccole. Il fattore limitante sembra essere il "rumore di frequenza" dell'oscillatore 555 che per me equivale a circa 0,3 pF.

Il metodo può essere utilizzato su un intervallo decente. Per migliorare la portata sincronizzo il periodo di misurazione al rilevamento dei fronti degli impulsi in ingresso. Ciò significa che anche le oscillazioni a bassa frequenza come 12Hz (con un condensatore da 1uF) vengono misurate con precisione.

Per condensatori più grandi il circuito è predisposto per utilizzare un metodo di temporizzazione della carica. In questo il condensatore in prova viene scaricato per assicurarsi che inizi a 0, quindi caricato attraverso una resistenza nota dalla tensione di alimentazione. Un ADC nell'ATTiny85 viene utilizzato per monitorare la tensione del condensatore e viene misurato il tempo per passare dallo 0% al 50% di carica. Questo può essere usato per calcolare la capacità. Poiché il riferimento per l'ADC è anche la tensione di alimentazione, ciò non influisce sulla misurazione. Tuttavia, la misura assoluta del tempo impiegato dipende dalla frequenza di clock dell'ATTiny85 e le variazioni in questo influiscono sul risultato. È possibile utilizzare una procedura per migliorare la precisione di questo clock utilizzando un registro di sintonizzazione nell'ATTiny85 e ciò verrà descritto più avanti.

Per scaricare il condensatore a 0V viene utilizzato un MOSFET a canale n insieme a un resistore di basso valore per limitare la corrente di scarica. Ciò significa che anche i condensatori di grande valore possono essere scaricati rapidamente.

Per caricare il condensatore vengono utilizzati 2 valori di resistenza di carica. Un valore base fornisce tempi di ricarica ragionevoli per condensatori da 1uF fino a circa 50uF. Un MOSFET a canale p viene utilizzato per mettere in parallelo un resistore inferiore per consentire la misurazione di condensatori di valore più elevato in un intervallo ragionevole. I valori scelti danno un tempo di misura di circa 1 secondo per condensatori fino a 2200uF e proporzionalmente più lungo per valori maggiori. Al limite inferiore del valore il periodo di misurazione deve essere mantenuto ragionevolmente lungo per consentire di determinare con sufficiente precisione il passaggio attraverso la soglia del 50%. La frequenza di campionamento dell'ADC è di circa 25 μSec, quindi un periodo minimo di 22 mSec fornisce una precisione ragionevole.

Poiché ATTiny ha un IO limitato (6 pin), l'allocazione di questa risorsa deve essere eseguita con attenzione. Sono necessari 2 pin per il display, 1 per l'ingresso del timer, 1 per l'ADC, 1 per il controllo della scarica e 1 per il controllo della velocità di carica. Volevo un controllo a pulsante per consentire il ri-azzeramento in qualsiasi momento. Questo viene fatto dirottando la linea I2C SCL. Poiché i segnali I2C sono open drain, non vi è alcun conflitto elettrico consentendo al pulsante di abbassare questa linea. Il display smetterà di funzionare con il pulsante premuto ma ciò non ha alcuna conseguenza in quanto riprenderà al rilascio del pulsante.

Fase 2: Costruzione

Costruzione
Costruzione
Costruzione
Costruzione
Costruzione
Costruzione

L'ho creato in una piccola scatola stampata in 3D da 55 mm x 55 mm progettata per contenere i 4 componenti principali; la scheda ATTiny85 DigiStamp, il display SSD1306, la batteria LiOn e un piccolo pezzo di scheda prototipo che contiene il timer 55 e l'elettronica di controllo della carica.

Allegato su

Parti necessarie

  • Tabellone ATTiny85 DigiStamp. Ho usato una versione con un connettore microUSB che viene utilizzato per caricare il firmware.
  • Display OLED SSD1306 I2C
  • Batteria agli ioni di litio da 300 mAh
  • Piccola striscia di scheda di prototipazione
  • Chip timer CMOS 555 (TLC555)
  • MOSFET a n canali AO3400
  • MOSFET a canale p AO3401
  • Resistori 4R7, 470R, 22K, 2x33K
  • Condensatori 4u7, 220u
  • Condensatore di precisione 820pF 1%
  • Interruttore a scorrimento in miniatura
  • Intestazioni 2 x 3 pin per porta di ricarica e porte di misurazione
  • Premi il bottone
  • Allegato
  • Collegare il cavo

Strumenti necessari

  • Saldatore a punta fine
  • pinzette

Per prima cosa, creare il circuito del timer 555 e caricare i componenti sulla scheda del prototipo. Aggiungere cavi volanti per i collegamenti esterni. Fissare l'interruttore a scorrimento, il punto di ricarica e la porta di misurazione nella custodia. Fissare la batteria ed eseguire il cablaggio di alimentazione principale al punto di ricarica, far scorrere l'interruttore. Collegare la massa al pulsante. Fissare l'ATTiny85 in posizione e completare il collegamento.

È possibile apportare alcune modifiche al risparmio energetico alla scheda ATTiny prima del montaggio, il che ridurrà leggermente la corrente e prolungherà la durata della batteria.

www.instructables.com/Reducing-Sleep-Curre…

Questo non è fondamentale in quanto è presente un interruttore di alimentazione per spegnere lo strumento quando non è in uso.

Passaggio 3: software

Il software per questo misuratore di condensatori può essere trovato su

github.com/roberttidey/CapacitorMeter

Questo è uno schizzo basato su Arduino. Ha bisogno di librerie per il display e I2C che possono essere trovate su

github.com/roberttidey/ssd1306BB

github.com/roberttidey/I2CTinyBB

Questi sono ottimizzati per l'ATTiny per occupare una memoria minima. La libreria I2C è un metodo bit bang ad alta velocità che consente di utilizzare 2 pin qualsiasi. Questo è importante poiché i metodi I2C che utilizzano la porta seriale utilizzano PB2 che è in conflitto con l'utilizzo dell'ingresso timer/contatore necessario per misurare la frequenza 555.

Il software è strutturato attorno a una macchina a stati che effettua la misurazione attraverso un ciclo di stati. Un ISR supporta l'overflow dal contatore del timer per estendere l'hardware a 8 bit. Un secondo ISR supporta l'ADC che opera in modalità continua. Ciò fornisce la risposta più rapida al circuito di carica che attraversa la soglia.

All'inizio di ogni ciclo di misurazione una funzione getMeasureMode determina quale è il metodo più appropriato da utilizzare per ogni misurazione.

Quando viene utilizzato il metodo 555, il tempo del conteggio inizia solo quando il contatore è cambiato. Allo stesso modo, la temporizzazione viene interrotta solo dopo l'intervallo di misurazione nominale e quando viene rilevato un fronte. Questa sincronizzazione permette un calcolo accurato della frequenza anche per le basse frequenze.

All'avvio del software, le prime 7 misurazioni sono "cicli di calibrazione" utilizzati per determinare la frequenza di base del 555 senza condensatore aggiunto. Gli ultimi 4 cicli vengono mediati.

È disponibile il supporto per la regolazione del registro OSCAL per la sintonizzazione dell'orologio. Suggerisco di impostare OSCCAL_VAL su 0 inizialmente nella parte superiore dello schizzo. Ciò significa che verrà utilizzata la calibrazione di fabbrica fino all'esecuzione della regolazione.

È necessario regolare il valore del condensatore di base 555. Aggiungo anche un importo stimato per la capacità parassita.

Se vengono utilizzati resistori diversi per i metodi di carica, sarà necessario modificare anche i valori CHARGE_RCLOW e CHARGE_RCHIGH nel software.

Per installare il software, utilizzare il normale metodo digistamp per caricare il software e collegare la porta USB quando richiesto. Lasciare l'interruttore di alimentazione in posizione off poiché l'alimentazione sarà fornita dall'USB per questa operazione.

Passaggio 4: funzionamento e calibrazione avanzata

Il funzionamento è molto semplice.

Dopo aver acceso l'unità e aver atteso il termine della calibrazione zero, collegare il condensatore in prova a una delle due porte di misurazione. Utilizzare le porte 555 per condensatori di basso valore < 1uF e la porta di carica per condensatori di valore superiore. Per i condensatori elettrolitici collegare il terminale negativo al punto di massa comune. Durante il test il condensatore verrà caricato fino a circa 2V.

La porta 555 può essere azzerata tenendo premuto il pulsante per circa 1 secondo e rilasciando. Assicurati che nulla sia collegato alla porta 555 per questo.

Calibrazione avanzata

Il metodo di carica si basa sulla frequenza di clock assoluta dell'ATTiny85 per misurare il tempo. Il clock utilizza l'oscillatore RC interno predisposto per fornire un clock nominale di 8MHz. Sebbene la stabilità dell'oscillatore sia abbastanza buona per le variazioni di tensione e temperatura, la sua frequenza può essere inferiore di qualche punto percentuale anche se è calibrato in fabbrica. Questa calibrazione imposta il registro OSCCAL all'avvio. La calibrazione di fabbrica può essere migliorata controllando la frequenza e facendo un'impostazione più ottimale del valore OSCCAL per adattarsi a una particolare scheda ATTiny85.

Non sono ancora riuscito ad inserire un metodo più automatico nel firmware, quindi utilizzo la seguente procedura manuale. Sono possibili due varianti a seconda delle misure esterne disponibili; o un frequenzimetro in grado di misurare la frequenza della forma d'onda triangolare sulla porta 555, o una sorgente d'onda quadra di frequenza nota, ad es. 10KHz con livelli 0V/3,3V che possono essere collegati alla porta 555 e sovrascrivere la forma d'onda per forzare quella frequenza nel contatore. Ho usato il secondo metodo.

  1. Avviare il misuratore alla sua normale potenza senza condensatori collegati.
  2. Collegare il frequenzimetro o il generatore di onde quadre alla porta 555.
  3. Riavviare il ciclo di calibrazione premendo il pulsante.
  4. Al termine del ciclo di calibrazione il display visualizzerà la frequenza determinata dal contatore e il valore OSCCAL corrente. Si noti che l'uso ripetuto del ciclo di calibrazione alterna tra la visualizzazione della frequenza misurata e la normale assenza di visualizzazione.
  5. Se la frequenza visualizzata è inferiore a quella nota significa che la frequenza di clock è troppo alta e viceversa. Trovo che un incremento OSCCAL regoli l'orologio di circa lo 0,05%
  6. Calcola un nuovo valore OSCCAL per migliorare l'orologio.
  7. Immettere il nuovo valore OSCCAL in OSCCAL_VAL nella parte superiore del firmware.
  8. Ricostruisci e carica il nuovo firmware. Ripetere i passaggi 1 -5 che dovrebbero mostrare il nuovo valore OSCCAL e la nuova misurazione della frequenza.
  9. Se necessario, ripetere nuovamente i passaggi fino a ottenere il miglior risultato.

Nota è importante eseguire la parte di misurazione di questa sintonizzazione quando si utilizza l'alimentazione normale e non USB per ridurre al minimo qualsiasi spostamento di frequenza dovuto alla tensione di alimentazione.

Consigliato: