LABORATORIO DI ARCHITETTURE E PROGRAMMAZIONE DEI SISTEMI ELETTRONICI INDUSTRIALI Laboratory Lesson 11: Final Project Prof. Luca Benini <[email protected]> Filippo Casamassima <filippo.casamassima @unibo.it> Domenico Balsamo <[email protected]> Projects available: • 3 different projects, to each group one project will be assigned. • All the projects have the same structure: • • • • Data Acquisition Data filtering/conditioning Data Processing Result output • Use of different sensors: ADC, Magnetometer, Accelerometer Project 1: ADC • La scheda viene avviata e il led verde lampeggia a 2 Hz. • quando viene premuto il bottone viene rilevato un interrupt e parte l'acquisizione ADC, il led verde lampeggia ora a 20Hz • L’ADC campiona dati ad una frequenza di 10 kHz. • Il risultato dell’ADC viene trasferito in un buffer (array) con 1000 elementi. (conviene usare un buffer circolare) • Una funzione calcola il valore medio del segnale e calcolare poi il «mean crossing rate" (quante volte il segnale ha superato il valore medio). • Calcolare la frequenza del segnale utilizzando il tasso di attraversamento del valore medio (il calcolo non va fatto necessariamente ad ogni nuovo campione) • La frequenza del segnale viene inviato al PC tramite l'interfaccia USART, insieme con l'ampiezza del segnale Project 2: Accelerometer • Quando la scheda parte, viene fatto lampeggiare il led Arancione (Giallo) ad una frequenza di 2Hz. • Quando il bottone viene premuto, viene generato un interrupt che fa partire l’acquisizione dei dati dell’accelerometro con frequenza di 200Hz. (usare il systick) • I dati del magnetometro vengono trasferiti usando il DMA in una variabile o in un buffer. • ai dati del magnetometro viene applicato un filtro passa basso del 3 ordine con frequenza di taglio 40 Hz. • Viene calcolata la inclinazione della board rispetto all’accelerazione di garvità • Ogni 20 campioni vengono inviati via USART gli angoli di rollio e beccheggio • Se la board è inclinata verso uno dei lati, si accende il led che sta verso il basso con intensità variabile rispetto all’inclinazione (a 90° il led è completamente acceso) Project 3: Magnetometer • Quando la scheda parte, viene fatto lampeggiare il led Blu ad una frequenza di 2Hz. • Quando il bottone viene premuto, viene generato un interrupt che fa partire l’acquisizione dei dati del magnetometro con frequenza di 100Hz. (conviene usare il Systick) • I dati del magnetometro vengono trasferiti usando il DMA in una variabile o in un buffer. • ai dati del magnetometro viene applicato un filtro passa basso del 2 ordine con frequenza di taglio 20 Hz. • i dati del magnetometro vengono analizzati sull’asse x e y per trovare la direzione del campo magnetico terrestre. • ogni 100 campioni acquisiti viene inviato via USART l’angolo rispetto al campo magnetico terrestre • Viene fatta variare la luminosità dei LED in base alla direzione del campo magnetico terrestre Useful Info: • Sito per la generazione del codice dei filtri: • http://www-users.cs.york.ac.uk/~fisher/mkfilter/trad.html • Application note per il calcolo degli angoli dell’accelerometro: • http://www.st.com/web/en/resource/technical/document/application_note/CD00268887 .pdf • http://theccontinuum.com/2012/09/24/arduino-imu-pitch-roll-from-accelerometer/ • Esempio per ottenere la direzione del nord magnetico con magnetometro: • http://www51.honeywell.com/aero/common/documents/myaerospacecatalogdocuments/Defense_Brochures-documents/Magnetic__Literature_Application_notesdocuments/AN203_Compass_Heading_Using_Magnetometers.pdf • http://diydrones.com/forum/topics/heading-from-3d-magnetometer • Compensazione magnetometro con accelerometro (opzionale) • http://www.timzaman.com/2011/04/heading-calculating-heading-with-tilted-compass/ Useful Info: Nelle impostazioni di progetto, abilitare la Floating Point Unit. Necessario per usare funzioni come atan2 (nella libreira math.h)