Soluzioni a basso costo per l'automazione dei test Hardware in the Loop

Ari Mahpour
|  Creato: luglio 29, 2021
Soluzioni a basso costo per il testing automatizzato Hardware in the Loop

Nel mondo frenetico di oggi, dove le iterazioni di elettronica vengono realizzate a velocità fulminee, spesso dimentichiamo uno degli aspetti più critici dello sviluppo: il testing. È sempre facile trascurare i test semplicemente perché rappresentano l'ultima fase che ci impedisce di rilasciare il nostro prodotto. Nello sviluppo di prodotti, ci troviamo costantemente nel dilemma tra "abbastanza buono" e "testato esaustivamente". Questa situazione si verifica solitamente perché non abbiamo tempo per testare, ritestare e poi testare ancora. 

Nella migliore delle ipotesi, avremmo assunto un team di testing a pieno regime che è attrezzato per eseguire test esaustivi. Anche se disponiamo di quel sofisticato team di test, siamo davvero in grado di utilizzarli per ogni modifica, ogni piccolo e insignificante cambiamento che apportiamo ai nostri prototipi? Nella maggior parte dei casi, la risposta è no, e in questo articolo, vorrei affrontare il problema con una soluzione che ti permetta di avere la botte piena e la moglie ubriaca. In questo articolo, esamineremo un sistema di test molto economico, ma estremamente efficace e piuttosto esaustivo, che ti darà quel rapporto qualità-prezzo che stavi cercando.

Test Manuale vs. Test Automatico

È abbastanza comune nell'industria avere una configurazione di test automatizzata (principalmente per i test a livello di produzione). Tuttavia, per lo sviluppo di prodotti, non è una pratica comune. Come accennato sopra, il costo e il tempo di sviluppo per impostare sofisticate apparecchiature di test automatizzate richiedono un elevato livello di sforzo. Questo tipo di costo e sforzo è giustificato solo per la produzione in grandi volumi o volumi bassi con configurazioni di test molto sofisticate (ad esempio, sistemi spaziali a basso volume da testare ambientalmente molte volte). Per il resto del mondo, ci affidiamo a test manuali di base e noiosi. Questo tipo di test può variare dalla validazione ADC/DAC, controlli dei protocolli, test sui consumi energetici, ecc. Indipendentemente dal tipo di test, la speranza è che debba essere fatto solo una o due volte, e poi possa essere passato al gruppo di test.

Conseguenze Impreviste e Automazione

La realtà è che durante il nostro sviluppo, sia nelle fasi di progettazione/revisione dell'hardware che nello sviluppo del software embedded, causiamo involontariamente qualche malfunzionamento. Alcuni esempi potrebbero essere un ponte di saldatura tra i pad o codice driver che invade altri codici driver potrebbero causare dei problemi. Indipendentemente dal risultato, è chiaro che i test non avvengono solo una o due volte. I problemi emergono e eseguire test esaustivi diventa troppo estenuante dopo la decima volta che si rielabora una scheda. La risposta ovvia al problema è avere sistemi automatizzati che eseguano test di regressione esaustivi. Ma qual è la soluzione per l'ingegnere embedded che ha pochi soldi e tempo per sviluppare un sistema di test automatizzato esaustivo?

La Soluzione Economica

Per i sistemi embedded, esiste una soluzione di test automatico a basso costo, ma molto scalabile e pratica. Anche se non è perfetta, fornirà all'ingegnere progettista il massimo ritorno sull'investimento. Il concetto è quello di utilizzare un dispositivo semplice che può generare segnali analogici, leggere segnali analogici, generare vari flussi seriali di protocollo e analizzare forme d'onda. Un esempio di dispositivo a basso costo che possiede tali specifiche è l'Analog Discovery 2. Sebbene si tratti di un dispositivo a 5V, offre comunque prestazioni notevoli. Lo considero il mio coltellino svizzero per lo sviluppo di sistemi embedded. Ci sono altri prodotti comparabili sul mercato, ma ho trovato che questo dispositivo funziona particolarmente bene per le mie applicazioni. Questo dispositivo può essere alimentato dal tuo computer desktop o anche da un Raspberry Pi. Dispone anche di una libreria Python che consente all'utente di assemblare rapidamente esecutivi di test. Per comodità, ho dockerizzato la configurazione completa e l'ho costruita per tutte le architetture.

Esempio pratico

Consideriamo un esempio reale che può essere trovato in questo repository. Per semplicità, il nostro target embedded sarà un Arduino Duo. Di seguito è riportato l'aspetto della nostra configurazione di test completa:

Test Hardware Configuration
Figura 1: Configurazione del Hardware di Test

 

Analog Discovery 2
Figura 2: Analog Discovery 2 e Arduino Duo Insieme

L'idea qui è dimostrare:

  • Il computer host comanda l'Analog Discovery 2 per inviare segnali analogici all'Arduino
  • L'Arduino legge e memorizza i valori dell'ADC
  • Il computer host riceve i valori dell'ADC tramite UART (USB)
  • Il computer host verifica che ciò che è stato inviato tramite l'Analog Discovery 2 corrisponda alla telemetria inviata dall'Arduino

Perché vorremmo automatizzare qualcosa del genere? Supponiamo di dover rilavorare una scheda vicino all'ADC, o che qualcuno cambi i driver che interfacciano con l'ADC. Siamo sicuri al 100% che una semplice lettura manuale dell'ADC con qualche manopola girata su un alimentatore sia sufficiente per testare il nostro hardware/software? Se no, perché non lasciare che l'automazione copra ogni permutazione e ogni caso limite, così non dobbiamo farlo noi? E, giusto per essere sicuri, perché non eseguire la stessa operazione 100 volte... solo perché possiamo! Questo può diventare molto più sofisticato e complicato (ad esempio, test sui protocolli, test sui filtri dell'ADC, ecc.), ma questo articolo si limiterà solo alle basi.

Lo script di test è piuttosto basilare. Supponendo che il tuo Arduino (ovvero, il dispositivo embedded in prova) sia stato caricato con i file di programmazione appropriati e che tutto sia stato collegato correttamente, eseguirai lo script di test sul tuo computer in questo modo:

python -m pytest test_arduino_hil.py

Questo attiverà l'Analog Discovery 2 per scandire l'intervallo di tensione dell'ADC dell'Arduino e convalidare che la tensione di ingresso corrisponda alla tensione di uscita letta dall'ADC. Piuttosto che effettuare manualmente la scansione con un alimentatore da banco, lo script lo ha fatto per te con un singolo comando. Per un esempio banale come questo, può sembrare superfluo, ma questo processo dà i suoi frutti quando si combinano i test in modo simile a una regressione.
Accoppiando ciò con il nostro sistema CI/CD, possiamo vedere le seguenti fasi in esecuzione e superate:

stages in Gitlab
Figura 3: Fasi di CI/CD in Gitlab

 

Le fasi sopra illustrate sono:

  1. docker_build: Costruire l'ambiente. In questo caso, stiamo utilizzando immagini docker su PC Linux e dispositivi basati su ARM come i Raspberry Pi
  2. arduino_load_test: Compilare e caricare il codice Arduino e convalidare che tutto abbia funzionato.
  3. arduino_hil_test: Esegui il test hardware in the loop su un Arduino fisico.

Se osserviamo più da vicino la sezione dei Test, possiamo vedere che questi test sono stati catturati ed elaborati da Gitlab:

CI/CD Tests in Gitlab
Figura 4: Test di CI/CD in Gitlab

 

Hardware in the Loop Test Results in Gitlab
Figura 5: Risultati dei Test Hardware in the Loop in Gitlab

 

Ora disponiamo di una configurazione software che ci permette di testare il nostro progetto sia localmente che a distanza (utilizzando il nostro sistema CI/CD). Questo consente all'ingegnere progettista di continuare a concentrarsi sulla progettazione invece che sui test e sul debugging più avanti.

Conclusione

In questo articolo, abbiamo esaminato il concetto di utilizzare test automatizzati per convalidare un progetto contemporaneamente e post-fatto. Che si tratti di una piccola modifica o di un cambiamento di design monumentale, avere test di regressione automatizzati paga dividendi quando si tratta di escludere conseguenze non intenzionali (cioè, correggere una cosa, romperne un'altra). Il processo incoraggiato è quello di scrivere questi script di test parallelamente al processo di sviluppo del design (similmente allo Sviluppo Guidato dai Test). Accoppiare questi test automatizzati con un sistema CI/CD aggiunge un ulteriore vantaggio per dimostrare che le nostre schede funzionano su un target remoto e possono essere testate da chiunque, ovunque, in qualsiasi momento.

Vorresti scoprire come Altium può aiutarti con il tuo prossimo progetto di PCB? Parla con un esperto di Altium o scopri di più sui principali problemi di DFM e le loro soluzioni. Puoi scaricare una prova gratuita di Altium Designer qui.

Sull'Autore

Sull'Autore

Ari è un ingegnere con una solida esperienza nei campi di progettazione, produzione, collaudo e integrazione di sistemi elettrici, meccanici e software. Ama riunire gli ingegneri addetti alla progettazione, alla verifica e al collaudo e farli lavorare insieme come un'unità affiatata.

Risorse correlate

Tornare alla Pagina Iniziale
Thank you, you are now subscribed to updates.