Sommario:

Realizza qualsiasi sensore da un FPGA: 4 passaggi
Realizza qualsiasi sensore da un FPGA: 4 passaggi

Video: Realizza qualsiasi sensore da un FPGA: 4 passaggi

Video: Realizza qualsiasi sensore da un FPGA: 4 passaggi
Video: Arduino: Sensore REED. Passaggio a livello con doppio sensore 2024, Luglio
Anonim
Image
Image
L'FPGA
L'FPGA

La maggior parte dei produttori ha provato a costruire almeno una volta nella vita un termometro, forse quello che hanno in casa non è abbastanza intelligente, o forse pensano di poter costruire il prossimo NEST. Tuttavia, a un certo punto hanno avuto un microcontrollore con il loro software all'avanguardia collegato a un sensore di temperatura (e forse altri sensori: pressione, luce). Fino ad ora tutto perfetto, il software è in esecuzione e il sensore sta rilevando. Mettiamolo alla prova!

Hmmmm… forse dovrebbe riscaldare il sensore usando un asciugacapelli e raffreddarlo usando il ghiaccio, funziona per un po'. Ma non sembra professionale, il sensore cambia valori troppo velocemente se lo riscaldi, non si scalda più di un paio di gradi. Il progetto è un fallimento! Ma l'algoritmo è nuovo, tiene conto di molti fattori, che peccato che si sia bloccato in questa cosa stupidamente insignificante.

La mia soluzione è questa: fare in modo che un FPGA agisca come un sensore con i valori trasmessi in streaming da un PC (o archiviati in memoria o creati ad-hoc all'interno dell'FPGA). Quindi per il tuo prezioso MCU l'FPGA sembra un sensore, ma non un sensore qualsiasi: qualunque sensore ti piaccia. Forse decidi che hai bisogno di più risoluzione o tempi di risposta più rapidi del previsto, devi cambiare il sensore. Ordinalo online, arriverà tra un paio di giorni, tra un paio di mesi, chissà. Riavvia il tuo PCB o ordina un modulo con il nuovo sensore. Oppure … un paio di clic e l'FPGA è configurato come il tuo nuovissimo sensore e può emulare l'esatta configurazione interna.

Nel momento in cui scriviamo, l'FPGA potrebbe agire come un LM75 con i dati di temperatura memorizzati nella BRAM (sull'FPGA).

Passaggio 1: l'MCU

Il mio MCU preferito è un LPC4337 su un LPCXpresso. Sopra ho uno scudo (LPC General Purpose Shield) con un display e un vero sensore LM75. LPC4337 è un ARM Cortex M4 che funziona a 200 MHz e un Cortex M0 più piccolo (non utilizzato qui). Il sensore reale è connesso alla periferica I2C1 e quello virtuale sarà connesso a I2C0. La fonte è disponibile sul mio GitHub.

Come costruirlo? Scarica LPCXpresso IDE insieme alla libreria LPCOpen. Importa quella libreria nell'IDE e apri anche il progetto da GitHub. Tutto dovrebbe essere configurato e puoi fare clic su "Debug" nell'angolo in basso a sinistra.

L'intero progetto si basa su uno degli esempi di NXP (per mostrare che il mio progetto simula un sensore reale e non necessita di codice speciale sul lato MCU). Nel file principale (chiamato iox_sensor.cpp) si trova questo codice:

#define SENSORS_ON_SHIELD

#if definito(SENSORS_ON_SHIELD) #define SHIELD_I2C I2C1 #elif definito(SENSORS_ON_FPGA) #define SHIELD_I2C I2C0 #endif

Modificando SENSOR_ON_SHIELD e SENSOR_OR_FPGA l'utente è in grado di commutare in fase di compilazione con quale sensore parlare, quello reale o quello virtuale, in quanto si trovano su pin I2C differenti.

Passaggio 2: l'FPGA

La mia scheda FPGA preferita è una Artix 7 prodotta da Digilent, con una Xilinx Arty 7. Vengono utilizzati due connettori PMod, uno per il debug e uno per il payload reale, la connessione con la scheda MCU.

Anche in questo caso, il codice sorgente per l'FPGA è disponibile sul mio GitHub (cartella fpgaSide).

Come costruirlo? Scarica, acquista o apri Xilinx Vivado IDE. Importa i file di progetto da GitHub. Uno dei file (content.coe) sono i dati di temperatura in formato raw che verranno trasmessi in streaming al sensore falso. Esiste anche un file Excel con lo stesso nome che aiuta a convertire i dati di temperatura leggibili dall'uomo in dati grezzi LM75. Sto pensando di cambiarlo in un processo automatizzato con un software scritto in Java, ma fino ad allora questa soluzione funziona. La sintesi e l'implementazione dovrebbero richiedere un po' di tempo, tenerne conto.

Passaggio 3: come funziona?

Come funziona?
Come funziona?
Come funziona?
Come funziona?

Come ho detto, per l'MCU, l'FPGA sembra un sensore, più esattamente un sensore I2C. L'uscita della periferica I2C è collegata all'ingresso dell'FPGA. All'interno dell'FPGA ci sono 3 componenti principali: - I2C Controller- I2C Device- Data Il controller I2C riceve i dati I2C dai pin dell'FPGA e li invia al resto dell'FPGA e fa lo stesso in ordine inverso. Mantiene una macchina a stati interna per il protocollo I2C (a proposito, ecco la documentazione per questo). Cosa invia questo componente al dispositivo I2C? Il byte attualmente ricevuto, la posizione di quel byte nella comunicazione corrente e se l'MCU sta scrivendo o leggendo dall'FPGA. Il Dispositivo I2C riceve i byte inviati e aggiorna la struttura interna simulata del sensore. Potrebbe semplicemente aggiornare il puntatore del registro o richiedere nuovi dati dall'origine dati. Il componente Dati esegue lo streaming di nuovi punti dati. Attualmente è solo una memoria ROM il cui indirizzo viene incrementato (circa) due volte al secondo.

Qual è il mio obiettivo finale? È mostrato nella seconda immagine. Ovvero: rendere possibile la simulazione simultanea di più dispositivi I2C (sensori e altro) all'interno dell'FPGA. I dati sul backend del sensore devono essere memorizzati nella cache nell'FPGA e trasmessi in streaming dal PC tramite USB o Ethernet. Supporta sensori più avanzati e altri dispositivi I2C (memoria, driver LED, ecc.).

Passaggio 4: mettere tutto insieme

Mettere tutto insieme
Mettere tutto insieme
Mettere tutto insieme
Mettere tutto insieme

Ora è il momento di collegare tutto insieme. In teoria, è semplice: la scheda mcu ha un connettore PMod (I2C0 e SSP0 (può funzionare come SPI)). La scheda Artix dispone di 4 connettori PMod che possono essere utilizzati come si desidera. Scelgo il connettore D per parlare con l'MCU e il connettore B per connettermi al mio Analizzatore Logico.

Avvertimento

Non puoi collegare le due schede insieme in questo modo. Come mai? PMod è stato costruito per facilitare il collegamento di una scheda Master/Host (che fornisce alimentazione) a una scheda Slave/Sensor (che riceve alimentazione). Ma in questo progetto entrambe le schede forniscono energia e se si collega l'uscita a 3,3 V da una scheda all'uscita a 3,3 V dell'altra scheda potrebbero accadere cose brutte. Ma potrebbero non esserlo e potresti semplicemente modificare i parametri dei binari di alimentazione dell'FPGA (sono progettati con molta attenzione). Quindi non correre questo rischio e sposta il connettore di un pin a sinistra (e capovolgi anche la scheda FPGA) come mostrato nelle immagini sopra. Ecco la specifica PMod, puoi studiarla, quello che ho fatto in breve è di non collegare i VCC delle due schede.

Consigliato: