Sommario:

Oscilloscopio a doppia traccia: 11 passaggi (con immagini)
Oscilloscopio a doppia traccia: 11 passaggi (con immagini)

Video: Oscilloscopio a doppia traccia: 11 passaggi (con immagini)

Video: Oscilloscopio a doppia traccia: 11 passaggi (con immagini)
Video: 0619: Traccia Curve Componenti LEADER TC 905 2024, Luglio
Anonim
Oscilloscopio a doppia traccia
Oscilloscopio a doppia traccia

Quando ho costruito il mio precedente mini oscilloscopio volevo vedere come potevo far funzionare il mio microcontrollore ARM più piccolo, un STM32F030 (F030), e ha fatto un buon lavoro.

In uno dei commenti è stato suggerito che una "Pillola blu" con un STM32F103 (F103) potrebbe essere migliore, più piccola della scheda di sviluppo con l'F030 e forse anche più economica. Ma per il mini oscilloscopio non ho usato la scheda di sviluppo ma la F030 su una scheda SMD-DIP ancora più piccola, quindi una Blue Pill non sarebbe certamente più piccola e dubito che sarebbe anche più economica.

Il codice è ora disponibile su Gitlab:

gitlab.com/WilkoL/dual-trace-oscilloscope

Forniture

Elenco delle parti: - scatola di plastica - perfboard (scheda prototipo a doppia faccia 8x12cm) - Blue Pill - display TFT ST7735s - batteria agli ioni di litio - regolatore a bassa caduta di tensione HT7333 3,3 V - doppio operazionale MCP6L92 - scheda da TSSOP8 a DIP8 - cristallo 12 MHz (non necessario) - encoder rotativo più manopola (2x) - interruttore di alimentazione - terminali a banana (4x) - scheda caricabatterie agli ioni di litio - diverse resistenze e condensatori - distanziali, dadi e viti in nylon

Utensili:

- stazione di saldatura - saldatura 0,7 mm - alcuni fili - taglierina laterale - occhiali e lente - trapano - multimetro - oscilloscopio - STLink-V2

Software:

- STM32IDE - STM32CubeMX - Utility STLink - Libreria LowLayer - Libreria adattata per ST7735s - Notepad++ - Kicad

Passaggio 1: modalità interlacciata o simultanea

Modalità interlacciata o simultanea
Modalità interlacciata o simultanea
Modalità interlacciata o simultanea
Modalità interlacciata o simultanea

Pillola Blu

Ma l'idea c'era, e sapevo che l'F103 ha due ADC! Cosa succede se ho usato quei due ADC insieme in modalità "interleave", qualcosa che ho fatto prima con l'STM32F407 (F407). La velocità di campionamento raddoppierebbe. Questo, combinato con un microcontrollore più veloce e sarebbe un ottimo successore del mini oscilloscopio.

Modalità Interleave Stranamente gli ADC dell'F103 sono meno avanzati di quelli dell'F030 (e dell'F407), non è possibile scegliere la risoluzione. Ancora più importante è che non è possibile modificare i tempi tra i due ADC. Ora, quando si utilizza la modalità interleave di solito si desidera che il campionamento sia il più veloce possibile con il tempo più breve tra i campioni, ma con un oscilloscopio è necessario modificare il tempo. Forse è ancora possibile farlo, non sono un progettista professionista di oscilloscopi, ma ho abbandonato il piano per utilizzare la modalità interleave.

Modalità simultanea

Ma, avendo due ADC offre molte più opzioni, anche i due ADC possono essere impostati sulla modalità "normale-simultanea". Che ne dici di un doppio oscilloscopio a traccia?

Avendo deciso di provare a realizzare un oscilloscopio a doppia traccia volevo anche avere una sensibilità di ingresso variabile, opzione che non avevo sul mini oscilloscopio. Ciò significa un attenuatore (e amplificatore) sugli ingressi. E forse volevo ancora di più? Così ho fatto una piccola lista di "belle da avere".

LISTA DEI DESIDERI

due canali

sensibilità variabile su entrambi i canali

attivazione su entrambi i canali

livello di trigger variabile su entrambi i canali

offset variabile

alimentazione a batteria singola

si inserisce nella stessa scatola del mini-oscilloscopio

Passaggio 2: prototipazione

prototipazione
prototipazione
prototipazione
prototipazione

Come al solito ho iniziato questo progetto su una breadboard. (Vedi foto) E prima di saldare tutto sulla perfboard cerco di scoprire se e come si adatterà alla scatola del progetto scelta. Si adatta, ma solo. Alcune parti sono nascoste sotto lo schermo, altre sotto la Pillola Blu. E ancora, proprio come per la maggior parte dei miei progetti, questo è un progetto unico e non progetterò un PCB per questo.

Passaggio 3: attenuatori

Attenuatori
Attenuatori

Negli oscilloscopi normali, gli attenuatori di ingresso sono circuiti che modificano l'attenuazione e l'amplificazione attivando e disattivando resistori con piccoli relè di segnale. Anche se ho alcuni di quei relè, so che non passeranno a meno di 4 Volt, il che significa che funzioneranno solo con una batteria agli ioni di litio completamente carica (4,2 V). Quindi avevo bisogno di un altro modo per cambiare quei resistori. Ovviamente potrei semplicemente installare interruttori meccanici, ma sicuramente non si adatterebbero più alla scatola del progetto che avevo in mente, forse potrei provare di nuovo un potenziometro digitale migliore (quello che ho è troppo rumoroso).

Poi ho pensato agli "interruttori analogici", con quelli posso realizzare da solo un potenziometro digitale. Nella mia collezione di parti ho trovato il CD4066 con quattro interruttori analogici. L'idea è di rendere variabile il resistore di feedback di un opamp inserendo e disattivando i resistori paralleli al resistore di feedback.

Funziona molto bene, ma avendo solo 4 interruttori nel 4066 e avendo 2 canali non è stato possibile fare più di tre livelli di sensibilità. Ho scelto 500 mV, 1 V e 2 V per divisione poiché questi sono i livelli di tensione che utilizzo di più. Lo schermo è diviso in 6 divisioni, in modo da avere le gamme da -1.5V a +1.5V, da -3V a +3V e da -6V a 6V.

Con la "terra virtuale" puoi spostare questi intervalli su e giù in modo che sia possibile anche da 0 V a +12 V.

Passaggio 4: terreno virtuale

Terreno virtuale
Terreno virtuale
Terreno virtuale
Terreno virtuale

Poiché l'oscilloscopio utilizza una singola linea di alimentazione (3,3 V), gli operazionali necessitano di un livello di terra virtuale o non funzioneranno. Questo livello di terra virtuale è realizzato con PWM su un canale di uscita di TIM4, il suo ciclo di lavoro cambia da poche percento a quasi il cento percento. Un filtro passa basso con un resistore da 1k e un condensatore da 10uF lo trasforma in una tensione da (quasi) 0V a (quasi) 3,3V. La frequenza dell'onda quadra è appena sotto i 100kHz, quindi il semplice filtro passa basso è abbastanza buono.

Piuttosto tardi nella costruzione di questo oscilloscopio mi sono reso conto che non è possibile avere due offset separati per i canali. Ciò è dovuto al fatto che con un singolo alimentatore il livello di massa in ingresso deve essere separato dal livello di massa reale degli operazionali. Quindi entrambi i canali si muovono nello stesso modo in cui si modifica l'impostazione GND.

Passaggio 5: encoder rotativi e debug

Encoder rotativi e debug
Encoder rotativi e debug
Encoder rotativi e debug
Encoder rotativi e debug

Sul mini oscilloscopio ho utilizzato un solo encoder rotativo per tutte le funzioni. Ciò renderebbe molto difficile l'uso di un doppio oscilloscopio, quindi qui ne ho bisogno di due. Un encoder per gli attenuatori e il livello del suolo virtuale e l'altro encoder per la base dei tempi e l'attivazione. Purtroppo, proprio come nell'altro mio progetto, questi encoder rotativi sono molto "rumorosi". Sono così brutti che semplicemente non funzionerebbero con i timer in "modalità encoder", il modo standard di leggerli. Ho dovuto realizzare un meccanismo antirimbalzo con timer TIM2, controllando gli encoder ogni 100us. Questo timer a sua volta viene avviato (solo) quando c'è qualche attività sugli encoder, questo viene verificato con la funzionalità EXTI sulle porte di ingresso. Ora gli encoder funzionano bene.

E come puoi vedere, avere un display può anche essere molto utile per visualizzare le informazioni di debug.

Passaggio 6: visualizzazione e base dei tempi

Visualizzazione e base dei tempi
Visualizzazione e base dei tempi

Il display ha una risoluzione di 160 x 128 pixel quindi ci sono 160 campioni necessari per uno schermo pieno, sono riuscito ad accelerare gli ADC per fare 1,6 milioni di campioni al secondo e questo, con il microcontrollore molto overcloccato (ne parleremo più avanti), dà una base temporale minima di 20 us per divisione (100 us per schermo). Quindi una forma d'onda di 10kHz riempirà l'intero schermo.

È solo due volte più veloce del mini oscilloscopio che ho realizzato prima. Vabbè, ora è con due canali:-).

Come detto, il display è largo 160 pixel, quindi sono necessari solo 160 valori per schermo. Ma tutti i buffer contengono effettivamente 320 campioni. Quindi il DMA memorizza 320 valori prima di attivare un interrupt completo di trasmissione (TC). Questo perché l'attivazione viene eseguita nel software. Il campionamento inizia in un momento casuale, quindi è molto improbabile che il primo valore nel buffer sia il punto in cui dovrebbe essere il punto di trigger.

Pertanto il punto di trigger viene trovato leggendo il trace_x_buffer, se il valore è al valore di trigger desiderato e se il valore precedente è appena al di sotto di esso, viene trovato il punto di trigger. Funziona abbastanza bene, ma è necessario un buffer più grande della dimensione effettiva del display.

Anche questo è il motivo per cui la frequenza di aggiornamento sulle impostazioni della base dei tempi inferiori è più lenta di quanto ci si potrebbe aspettare. Quando si utilizza l'impostazione di 200 ms/div, uno schermo pieno di dati è di 1 secondo, ma poiché viene eseguita una quantità doppia di conversioni, ci vogliono 2 secondi. Nelle impostazioni della base dei tempi più veloci non lo noterai più di tanto.

TIM3 viene utilizzato per generare la base dei tempi. Attiva gli ADC con la velocità richiesta dall'impostazione della base dei tempi selezionata. Il suo clock di TIM3 è 120MHz (vedi OVERCLOCKING), il numero massimo a cui conta (ARR) determina quanto altro va in overflow o, in linguaggio ST si aggiorna. Tramite TRGO questi impulsi di aggiornamento attivano gli ADC. La frequenza più bassa che genera è 160 Hz, la più alta è 1,6 MHz.

Passaggio 7: ADC e DMA

ADC e DMA
ADC e DMA

I due ADC convertono contemporaneamente la tensione sui loro ingressi, memorizzano quei due valori a 12 bit in un'unica variabile a 32 bit. Quindi il DMA ha solo una variabile per (doppia) conversione da trasferire.

Per utilizzare questi valori è quindi necessario suddividerli nei due valori in modo che possano essere utilizzati per visualizzare le due tracce. Come detto, gli ADC nell'F103 non possono essere impostati su risoluzioni diverse da 12 bit. Sono sempre in modalità a 12 bit e quindi le conversioni richiedono sempre lo stesso numero di impulsi di clock. Tuttavia, con l'overclocking degli ADC, è possibile eseguire 1,6 MSamples al secondo (vedi Extra: Overclocking).

Il riferimento degli ADC è Vdd, il rail da 3,3V. Per convertirlo in valori più convenienti (per divisione) ho calcolato i valori degli attenuatori, perché non ho i valori esatti dei resistori che escono da quei calcoli alcune correzioni sono fatte nel software.

In questo progetto utilizzo DMA in "modalità regolare". In questa modalità il DMA interrompe il trasferimento dei dati (dagli ADC alla memoria) quando viene trasferito il numero di parole (o mezze parole o byte). Nell'altra modalità possibile, "modalità circolare", il DMA si ripristina e continua a trasferire i dati senza interruzioni. Questo non ha funzionato con l'F103, è così veloce che sovrascrive i dati in adc_buffer prima che il resto del programma possa leggerli. Quindi ora il processo è il seguente:

- impostare DMA sul numero di dati da trasferire e abilitare DMA

- avviare l'attivazione degli ADC, questi richiederanno i trasferimenti DMA dopo ogni (doppia) conversione

- dopo il trasferimento del numero di conversioni impostato, DMA si ferma

- interrompere immediatamente anche l'attivazione degli ADC

- eseguire tutte le manipolazioni necessarie sui dati in memoria

- mostra le tracce sullo schermo

- ricominciare il processo

Passaggio 8: interfaccia utente

Interfaccia utente
Interfaccia utente

Uno schermo da 160 per 128 pixel non è molto grande e voglio usarlo il più possibile. Quindi non c'è una parte riservata alle impostazioni correnti. Nelle ultime righe vengono visualizzati la sensibilità verticale, la base dei tempi, il livello di trigger e il canale di trigger, ma quando i segnali sono sufficientemente grandi appariranno nella stessa area. L'opzione attiva è mostrata in giallo, il resto è mostrato in bianco.

Passaggio 9: costruzione e possibili miglioramenti

Costruzione e possibili miglioramenti
Costruzione e possibili miglioramenti
Costruzione e possibili miglioramenti
Costruzione e possibili miglioramenti
Costruzione e possibili miglioramenti
Costruzione e possibili miglioramenti
Costruzione e possibili miglioramenti
Costruzione e possibili miglioramenti

Sono abbastanza contento di questo progetto. Funziona bene e fa il suo lavoro, ma potrebbe essere migliore.

La scatola del progetto è troppo piccola per contenere tutto comodamente, questo si traduce nel dover mettere i componenti sotto la pillola blu. Per renderlo possibile, la Blue Pill non può essere saldata direttamente alla "scheda madre". E poiché questo ha reso tutto troppo alto ho dovuto rimuovere molte parti dalla pillola blu, come i ponticelli per selezionare BOOT0 e BOOT1 (cose che comunque non uso mai) e ho persino dovuto spostare il cristallo dall'alto verso il basso il pcb.

Ho reso la vita più difficile usando connettori a banana invece di connettori BNC o SMA, significava che gran parte della perfboard era una "zona vietata", per chiarire a me stesso ho messo sopra del nastro kapton per impedirmi dal mettere parti su di esso.

Un altro problema nel mettere tutto in una scatola di progetto così piccola è che i circuiti analogico e digitale sono molto vicini tra loro. Puoi vedere che c'è molto rumore visibile su entrambe le tracce. Questo non l'avevo nemmeno sulla breadboard! Spostando il più possibile le linee di alimentazione per i circuiti analogici e digitali è stato fatto un piccolo miglioramento, ma non abbastanza per i miei gusti. Ridurre tutti i valori dei resistori nei circuiti analogici anche più di quanto non abbia fatto io (la resistenza di ingresso è 100kOhm invece di 1MOhm) non ha aiutato. Sospetto che l'attivazione sull'impostazione della base dei tempi più veloce (20us/div), che non è eccezionale, migliorerà anche con meno rumore sui segnali.

Se realizzi questo progetto su un pcb "reale", con tutte le parti smd e livelli separati per analogico, digitale e alimentazione (sono 4 livelli!) probabilmente funzionerà molto bene. Sarà molto più piccolo, non utilizzerà una Blue Pill completa ma solo l'F103 e ciò consentirà di dotarlo di un Vdda analogico separato (pulito) per gli ADC.

Come tocco finale ho deciso di spruzzare la scatola nera, cambia rispetto a tutte le scatole beige che ha.

Passaggio 10: il codice e un breve video

Passaggio 11: EXTRA: Overclocking

EXTRA: Overclock
EXTRA: Overclock

Proprio come ho fatto con l'F03, volevo vedere quanto bene un F103 può essere overcloccato. Le specifiche di questo microcontrollore affermano che la velocità di clock massima non dovrebbe superare i 72MHz (che ovviamente è già più veloce dell'F030) ma avevo letto in diversi blog che l'overclocking era facile, quindi perché no?

Il Blue Pill è dotato di un cristallo da 8 MHz, il PLL lo moltiplica con un fattore da 9 a 72 MHz. Il PLL può essere aumentato fino a 16 dando un clock di 128MHz. Non è stato affatto un problema per la mia Blue Pill, infatti, tutte le mie Blue Pills funzionano senza problemi a 128MHz.

Ma ora volevo scoprire qual è il vero limite. Quindi ho rimosso il cristallo da 8 MHz e l'ho sostituito con uno da 12 MHz. Ancora una volta ho aumentato il moltiplicatore PLL fino a quando il microcontrollore non si è arreso. Era a 168 MHz! Su 156MHz ha funzionato ancora bene. L'ho lasciato funzionare a quella velocità per ore e non l'ho mai visto schiantarsi. In questo oscilloscopio ho optato per 120MHz, velocità selezionabile con un cristallo da 12MHz e PLL su 10, oltre che con un cristallo da 8 MHz e PLL su 15. (vedi SystemClock_Config in main.c)

Gli ADC ora funzionano anche più velocemente, li ho eseguiti a 30 MHz (invece di 14), stavano ancora funzionando bene a 60 MHz, STMicroelectronics fa un buon hardware!

STMicroelectronics inserisce questi limiti nella scheda tecnica per una buona ragione, garantiscono che il microcontrollore funzioni ai 72MHz specificati in tutte le condizioni.

Ma poiché non uso il microcontrollore a -40 Celsius, +85 Celsius, a soli 2.0 Volt o 3.6 Volt, penso che sia sicuro overcloccarlo. NON farlo quando hai intenzione di vendere un dispositivo con i relativi microcontrollori, non sai mai dove verranno utilizzati.

Consigliato: