Sommario:
- Fase 1: Conception Du Circuit En Entrée / Progettazione del circuito d'ingresso
- Fase 2: Concezione del circuito in sorte / Progettazione del circuito di uscita
- Passaggio 3: concezione del PCB / Progettazione del PCB
- Passaggio 4: Périphériques Pour La Carte DE0 Nano Soc / Periferiche per la scheda DE0 Nano Soc
- Fase 5: L'écran LT24
- Passo 6: Codici Utiles En C++ / Codici Utili in C++
- Fase 7: Le Finale / la Finale
Video: Cactus 2000: 7 passi
2024 Autore: John Day | [email protected]. Ultima modifica: 2024-01-30 10:04
PROJECT MIDI-CONTROLEUR EISE4
francese:
Lors de notre quatrième année d'école ingénieur, nous avons réalisé un midi-contrôleur. Pour ce faire, nous avions à notre disposition:
- Una carta DE0 Nano Soc
- Des oscilloscopi, des multimètres
- Des composants de diversi tipi (amplificateur, résistance, capacité…)
- Un micro e un haut-parleur
- Un petit ecran
Il nous a fallu passer par différentes étapes périlleuses afin de réussir le projet. Nous allons vous les présenter dans cet Instructable.
Pour beginr, le dessin du circuit de base était nécessaire afin de récupérer le son du micro et le rendre au haut-parleur. Uno per il design del circuito, il PCB è stato creato sulla logica dell'Altium. Pendant que due élèves s'occupaient de gérer les PCB de l'entrée et de la sortie, les deux autres s'occupaient de faire fonctionner la carte DE0 Nano Soc afin que la carte puisse récupérer les echantillons du micro et redonner un signal pour le haut-parleur. Finallement, il nous a fallu créer des effets sonores pour modifier le son.
Inglese:
Durante il nostro quarto anno di scuola, abbiamo realizzato un controller midi. Per fare questo, avevamo a nostra disposizione:
- Una mappa DE0 Nano Soc
- Oscilloscopi, multimetri
- Componenti di diverso tipo (amplificatore, resistenza, capacità…)
- Un microfono e un altoparlante
- Un piccolo schermo
Abbiamo dovuto affrontare vari passaggi pericolosi per rendere il progetto un successo. Ti presenteremo questo Instructable.
Innanzitutto la progettazione del circuito base necessario per recuperare il figlio del microfono e realizzare l'altoparlante. Una volta disegnato il circuito, il PCB doveva essere fatto sul software Altium. Mentre due studenti erano occupati a gestire i PCB di input e output, gli altri due stavano lavorando per eseguire la scheda DE0 Nano Soc in modo che la scheda potesse raccogliere i campioni del microfono e dare un segnale per l'altoparlante. Infine, abbiamo dovuto creare effetti sonori per cambiare il suono.
Fase 1: Conception Du Circuit En Entrée / Progettazione del circuito d'ingresso
francese:
La première étape consiste a mettre en place un circuit qui puisse prendre le signal envoyer sul micro pour le transmettre à la carte DE0 Nano Soc.
Ci-dessus le schéma de notre entrée.
(1) L'inverseur va permettre de récupérer le 5 Volt et le transform en - 5 V. Le - 5 V servira pour l'amplificateur que nous verrons ci-dessous.
(2) Ici, nous avons un amplificateur non-inverseur. D'après la formula suivante:
Vs = Ve(1 + Z1/Z2)
Su una scelta un guadagno de 101 en mettant R1 = 100 kOhm et R2 = 1 kOhm.
Cet amplificateur va servir a amplifier le son du micro.
(3) Les deux résistances vont créer un offset afin que la tension de sortie soit compris entre 0 et 4 V.
(4) Le micro qui va être amplificatore par l'amplificateur.
(5) CAG (Controllo Automatico di Guadagno)
(6) Pour finir, nous avons créé un filtre passe-bas du second ordre avec deux RC. L'ordine 2 était nécessaire pour avoir une atténuation de - 40db / decade. La frequenza di coupure è di 20 kHz.
Inglese:
Il primo passo è configurare un circuito che possa prendere il segnale inviato sul microfono per trasmetterlo alla scheda DE0 Nano Soc. Sopra lo schema del nostro ingresso.
(1) L'inverter recupererà i 5 Volt e li trasformerà in - 5 V. I - 5 V serviranno per l'amplificatore che vedremo di seguito.
(2) Qui abbiamo un amplificatore non invertente. Secondo la seguente formula:
Vs = Ve (1 + Z1 / Z2)
È stato scelto un guadagno di 101 impostando R1 = 100 kOhm e R2 = 1 kOhm.
Questo amplificatore verrà utilizzato per amplificare il suono del microfono.
(3) I due resistori creeranno un offset in modo che la tensione di uscita sia compresa tra 0 e 4 V.
(4) Il microfono che verrà amplificato dall'amplificatore.
(5) AGC (controllo automatico del guadagno)
(6) Infine, abbiamo creato un filtro passa-basso del secondo ordine con due RC. L'ordine 2 era necessario per avere un'attenuazione di -40db/decennio. La frequenza di taglio scelta è 20 kHz.
Fase 2: Concezione del circuito in sorte / Progettazione del circuito di uscita
francese:
Dans un second temps, nous avons penser à la création du circuit en sortie.
Ci-dessus le schéma de notre sortie.
(1) Le DAC (convertitore da digitale ad analogico) qui va permettre de récupérer le signal numérique envoyer par la carte DE0 Nano Soc et le convertir en signal analogique (nécessaire pour le haut parleur)
(2) La capacité va servir a virer la composante continue de notre signal.
(3) Montage qui va permettre d'amplifier la puissance de notre signal. Nous avons prit le schéma:
www.ti.com/lit/ds/symlink/lm386.pdf
pagina 10
Ce schema permet d'avoir un gain de 200 qui est nécessaire car notre signal est vraiment faible.
Inglese:
Sopra il diagramma della nostra produzione.
(1) Il DAC (Digital to Analog Converter) che consentirà di recuperare il segnale digitale inviato dalla scheda DE0 Nano Soc e convertirlo in un segnale analogico (necessario per l'altoparlante).
(2) La capacità sarà utilizzata per trasferire la componente continua del nostro segnale.
(3) Montaggio che amplificherà la potenza del nostro segnale. Abbiamo preso lo schema:
www.ti.com/lit/ds/symlink/lm386.pdf
pagina 10
Questo schema permette di avere un guadagno di 200 che è necessario perché il nostro segnale è molto debole.
Passaggio 3: concezione del PCB / Progettazione del PCB
francese:
Une fois que nos circuits ont été instanciés il nous a fallu les mettre sur des PCB.
Pour ce faire, nous avons utiliser le logiciel Altium. Il faut que tout soit correctement connecter puis cliquer sur:
Menu Design -> Aggiorna documento PCB.
Ensuite, clicca su «Convalida modifiche». Pour chaque changement validé, un crochet vert apparaît dans la colonne: «Check».
Après cela, vous aurez un nouvel onglet qui va s'ouvrir et il faudra placer les composants dans cette fenêtre.
Puis, il faut aller dans le menu "File" -> "Fabrication Output" -> "Gerber Files"
Une fenêtre s'ouvre, dans celle-ci vous trouverez;
- Il menu "Layers" qui permettra de choisir su quel layer va s'appuyer votre PCB.
- Il menu "Drill Drawing" dans lequel il faut que tout soit décocher.
- Le menu "Apertures" dans lequel il faut cocher "Embedded apertures".
Toute ses étapes sont complétées ?
Revenons maintenant à la fenêtre avec les composants sur celle-ci vous cliquez sur
File-> Output di fabbricazione -> File di foratura NC
C'est enfin finit, il ne reste plus qu'à donner à l'imprimante 3D les fichiers.
Vous trouverez ci-joint les photos de nos due PCB.
Inglese:
Una volta che i nostri circuiti sono stati istanziati, abbiamo dovuto metterli su PCB.
Per fare ciò, utilizziamo il software Altium. Tutto deve essere collegato correttamente quindi cliccare su:
Menu Design -> Aggiorna documento PCB.
Quindi fare clic su "Convalida modifiche". Per ogni modifica convalidata viene visualizzato un segno di spunta verde nella colonna "Verifica".
Successivamente, avrai una nuova scheda che si aprirà e dovrai posizionare i componenti in questa finestra.
Quindi devi andare nel menu "File" -> "Output Output" -> "File Gerber"
Si apre una finestra, in questa troverai;
Il menu "Layers" che ti permetterà di scegliere quali layer supporteranno il tuo PCB. Il menu "Drill Drawing" in cui tutto deve essere deselezionato. Il menu "Aperture" in cui devi selezionare "Aperture incorporate".
Tutti i suoi passi sono completati?
Torniamo ora alla finestra con i componenti su questa su cui fai clic
File-> Output di produzione -> File di foratura NC
È finalmente finita, tutto ciò che devi fare è dare i file alla stampante 3D.
In allegato troverete le foto dei nostri due PCB.
Passaggio 4: Périphériques Pour La Carte DE0 Nano Soc / Periferiche per la scheda DE0 Nano Soc
Francesco:
I cœurs IP sono ottimizzati per le periferiche Intel FPGA e sono state implementate per ridurre la concezione e le temperature di prova.
Grâce au logiciel Qsys nous avons pu créer des périphériques embarqués dans notre carte.
Voici une liste des périphériques que nous avons ajouter:
- Comunicazione SPI per DAC
- ADC per recuperare i valori analogici del segnale e convertire i dati digitali
- HPS (processore) pour gérer tout les codes
- GPIO pour les boutons qui vont servir à exécuter alcuni effetti
- Mémoire (memoria su chip)
Inglese:
I core IP sono ottimizzati per i dispositivi Intel FPGA e possono essere facilmente implementati per ridurre i tempi di progettazione e test.
Grazie al software Qsys siamo stati in grado di creare periferiche incorporate nella nostra mappa. Ecco un elenco del dispositivo che abbiamo aggiunto:
- Comunicazione SPI per il DAC
- ADC per recuperare i valori analogici dal nostro segnale e convertirli in dati digitali
- HPS (processore) per gestire tutti i codici
- GPIO per i pulsanti che verranno utilizzati per far fronte a determinati effetti
- Memoria (sulla memoria del chip)
Fase 5: L'écran LT24
francese:
Il nous a fallu comprende et gérer l'écran LT24 celui-ci sera guide par un processeur simulé NIOS.
Pour l'initaliser, nous avons lu beaucoup de documentazioni sur celui-ci.
Au final, notre écran sert à afficher la FFT, à sélectionner l'effet voulu.
Inglese:
Abbiamo dovuto capire e gestire lo schermo LT24 sarà guidato da un processore NIOS simulato. Per avviarlo, abbiamo letto molta documentazione su di esso.
Alla fine, il nostro schermo viene utilizzato per visualizzare la FFT, con l'effetto desiderato.
Passo 6: Codici Utiles En C++ / Codici Utili in C++
Je vais vous montrer les codes en C++ qui nous ont utilis afin de realser des effets sonores.
Voici d'abord toutes nos déclarations (oui un peu esaustiif…):
Ti mostrerò i codici in C++ che ci sono stati utili per creare effetti sonori.
Innanzitutto, tutte le nostre dichiarazioni (sì un po' esaustive…):
#includere
#include #include #include #include #include #include #include #include #include "WavUtils.cpp" #include "Biquad.cpp" #include #include #include #include "hps_0.h" #include "hps.h" #include "alt_gpio.h" #include "hwlib.h" #include "socal.h" #include #include "kiss_fft.h" #define nbpoint 1000 #define HW_REGS_BASE (ALT_STM_OFST) #define HW_REGS_SPAN (0x04000000) #define HW_REGS_MASK (HW_REGS_SPAN - 1) #define PI 3.1415926535 #define NFFT 80 #define FE 41000 #define F2 10000 #define F1 5925 #define PH 5000 #define PB 15000 #define MOD 2000 using namespace std; const long SAMPLE_RATE = 12500000; // Creazione della configurazione e dei buffer in entrata e in uscita per s(t) e S(f) const kiss_fft_cfg config = kiss_fft_alloc(NFFT, 0, NULL, NULL); const kiss_fft_cfg config_inv = kiss_fft_alloc(NFFT, 1, NULL, NULL); kiss_fft_cpx* in = (kiss_fft_cpx*)malloc(NFFT*sizeof(kiss_fft_cpx)); kiss_fft_cpx* out = (kiss_fft_cpx*)malloc(NFFT*sizeof(kiss_fft_cpx)); kiss_fft_cpx* inv = (kiss_fft_cpx*)malloc(NFFT*sizeof(kiss_fft_cpx));queueoutBuf; int globale = 0; int i = 0; dati brevi, dati2;
Ci-dessous une de nos fonctions permettant la modulation:
Di seguito una delle nostre funzioni che consentono la modulazione:
modulazione void (int freq)
{ if(i<NFFT) { data=data*cos(2*PI*freq*i/FE); in.r=dati; io++; } else i="0"; }
Voici notre funzione principale:
Queste la nostra funzione principale:
int main(int argc, char **argv)
{ volatile unsigned long *h2p_lw_spi_addr=NULL; volatile unsigned long *h2p_lw_led_addr=NULL; volatile unsigned long *h2p_lw_adc_addr=NULL; volatile unsigned long *h2p_lw_blue_addr=NULL; volatile unsigned long *h2p_lw_red_addr=NULL; volatile unsigned long *h2p_lw_black_addr=NULL; void *base_virtuale; int fd; printf("1\n"); // mappa lo spazio degli indirizzi per i registri spi nello spazio utente in modo che possiamo interagire con loro. // mapperemo effettivamente l'intero intervallo CSR dell'HPS poiché vogliamo accedere a vari registri all'interno di tale intervallo if((fd = open("/dev/mem", (O_RDWR | O_SYNC))) == -1) { printf("ERRORE: impossibile aprire \"/dev/mem\"…\n"); ritorno(1); } printf("2\n"); virtual_base = mmap(NULL, HW_REGS_SPAN, (PROT_READ | PROT_WRITE), MAP_SHARED, fd, HW_REGS_BASE); printf("3\n"); if(virtuale_base == MAP_FAILED) { printf("ERRORE: mmap() non riuscito…\n"); chiudi(fd); ritorno(1); } printf("4\n"); printf("5\n"); h2p_lw_spi_addr = virtual_base + ((unsigned long) (ALT_LWFPGASLVS_OFST + SPI_0_BASE) & (unsigned long) (HW_REGS_MASK)); h2p_lw_led_addr = virtual_base + ((unsigned long) (ALT_LWFPGASLVS_OFST + PIO_LED_BASE) & (unsigned long) (HW_REGS_MASK)); h2p_lw_adc_addr = virtual_base + ((unsigned long) (ALT_LWFPGASLVS_OFST + ADC_0_BASE) & (unsigned long) (HW_REGS_MASK)); h2p_lw_blue_addr= virtual_base + ((unsigned long) (ALT_LWFPGASLVS_OFST + PIO_BLUE_BASE) & (unsigned long) (HW_REGS_MASK)); h2p_lw_black_addr= virtual_base + ((unsigned long) (ALT_LWFPGASLVS_OFST + PIO_BLACK_BASE) & (unsigned long) (HW_REGS_MASK)); h2p_lw_red_addr= virtual_base + ((unsigned long) (ALT_LWFPGASLVS_OFST + PIO_RED_BASE) & (unsigned long) (HW_REGS_MASK)); //int i=0; dati int; int i= 0, j; // Creazione della configurazione e dei buffer in entrata e in uscita per s(t) e S(f) const kiss_fft_cfg config = kiss_fft_alloc(NFFT, 0, NULL, NULL); kiss_fft_cpx* in = (kiss_fft_cpx*)malloc(NFFT*sizeof(kiss_fft_cpx)); kiss_fft_cpx* out = (kiss_fft_cpx*)malloc(NFFT*sizeof(kiss_fft_cpx)); while(1){ dati = *(h2p_lw_adc_addr+2); if(*h2p_lw_blue_addr == 1) data = echo(data, 20); if(*h2p_lw_black_addr == 1) alt_write_word(h2p_lw_led_addr, 0x0F); if(*h2p_lw_red_addr == 0) alt_write_word(h2p_lw_led_addr, 0xF0); alt_write_word(h2p_lw_spi_addr+1, dati | 0b111000000000000); } libero(config); libero (in); libero (fuori); restituisce 0; }
Fase 7: Le Finale / la Finale
francese:
Eh voilà (enfin) le rendu final de notre Cactus 2000.
Nous avons mis les PCB entrée et sortie qui sont reliés à la carte DE0 Nano Soc.
Ensuite, ses composants sont placés à l'interieur d'une boite jaune.
Sur la boîte on trouve un potentiomètre glissière, qui permet de gérer le volume du son, des potenziomètres et des boutons qui permettrons de lancer certi effetti, ainsi que un ecran qui permettra d'afficher la FFT.
Le haut-parleur est positionné perpendiculairement par rapport aux boutons. Le micro est positionné de l'autre coté de la boîte par rapport au haut-parleur.
C'est tout pour aujourd'hui.
En esperant que cet Instructable vous soit utile.
Inglese:
Eccoci (finalmente) al rendering finale del nostro Cactus 2000.
Mettiamo i PCB di input e output che sono collegati alla scheda DE0 Nano Soc.
Quindi, i suoi componenti vengono posizionati all'interno di una scatola gialla.
Sulla scatola c'è un potenziometro a scorrimento, che può gestire il volume del suono, manopole e pulsanti che lanceranno alcuni effetti e uno schermo che visualizzerà la FFT.
L'altoparlante è posizionato perpendicolarmente ai pulsanti. Il microfono è posizionato sull'altro lato della scatola rispetto all'altoparlante.
È tutto per oggi.
Sperando che questo Instructable ti sia utile.
Consigliato:
Cactus di puntamento laser: 3 passaggi
Cactus puntatore laser: per un progetto a scuola, dovevo creare qualcosa con Arduino, volevo creare qualcosa per un gatto, che puoi attivare e giocare con il gatto da solo. All'inizio ho pensato a un topo, ma è stato un po' difficile realizzare qualcosa di così piccolo con quello
Display a luce di cactus: 8 passaggi
Cacti Light Display: questa è una versione unica e artistica di una lampada da scrivania di base. Con colori di transizione personalizzabili e un'elegante base in legno, questo sistema di illuminazione è un fantastico centrotavola per qualsiasi mobile. Con pochi semplici passaggi, qualche macchinario pesante e pazienza arguta
€ 12 Led Cactus (decorazione della stanza al neon): 4 passaggi
€ 12 Led Cactus (decorazione per la stanza al neon): Ciao, in questo tutorial, ti mostrerò come ho realizzato questa fantastica decorazione per la stanza di Led Cactus Cominciamo:)
Decision Maker 2000: 4 passi
Decision Maker 2000: Hai difficoltà a prendere decisioni? È meglio lasciare al caso le decisioni che cambiano la vita? Ora con Decision Maker 2000 è facile! Tu e i tuoi amici potete prendere decisioni importanti senza sforzo. Lascia che il Decision Maker 2000 risponda a una domanda importante
IL MODO PI SEMPLICE PER FARE UNA LUCE COMPATTA!! 3 SEMPLICI PASSI!!: 3 Passi
IL MODO PI SEMPLICE PER FARE UNA LUCE COMPATTA!! 3 SEMPLICI PASSI!!: Cosa ti servirà - foglio di stagnola 1 batteria AA (alcune batterie AAA funzioneranno) 1 mini lampadina (lampadine utilizzate per la maggior parte delle torce elettriche; fare riferimento all'immagine) Righello (se necessario)