Sommario:

Cactus 2000: 7 passi
Cactus 2000: 7 passi

Video: Cactus 2000: 7 passi

Video: Cactus 2000: 7 passi
Video: ЗАКРИЧАЛ – ПОТЕРЯЛ ₽200.000 / ТРЭШКЭШ: Тишина 2024, Novembre
Anonim
Cactus 2000
Cactus 2000

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

Conception Du Circuit En Entrée / Progettazione del circuito d'ingresso
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

Conception Du Circuit En Sortie / Progettazione del circuito di uscita
Conception Du Circuit En Sortie / 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

Concezione del PCB / Progettazione del PCB
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

Périphériques Pour La Carte DE0 Nano Soc / Periferiche per la scheda DE0 Nano Soc
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

L'écran LT24
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++

Codici Utiles En C++ / Codici Utili in C++
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

Le Finale / la Finale
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: