Tabla de contenido:

Cactus 2000: 7 pasos
Cactus 2000: 7 pasos

Video: Cactus 2000: 7 pasos

Video: Cactus 2000: 7 pasos
Video: Управление ВФМ Cactus (Панель Управления + Блок Реостатов) 2024, Mes de julio
Anonim
Cactus 2000
Cactus 2000

PROYECTO MIDI-CONTROLADOR EISE4

Français:

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:

  • Une carte DE0 Nano Soc
  • Des osciloscopios, des multimetros
  • Des composants de différents types (amplificateur, résistance, capacité…)
  • Un micro et 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 commencer, le dessin du circuit de base était nécessaire afin de récupérer le son du micro et le rendre au haut-parleur. Une fois le circuit design, le PCB était à faire sur le logiciel Altium. Colgante que deux é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.

Inglés:

Durante nuestro cuarto año de escuela, realizamos un controlador midi. Para ello, teníamos a nuestra disposición:

  • Un mapa DE0 Nano Soc
  • Osciloscopios, multímetros
  • Componentes de diferentes tipos (amplificador, resistencia, capacidad…)
  • Un micrófono y un altavoz.
  • Una pequeña pantalla

Tuvimos que pasar por varios pasos peligrosos para que el proyecto fuera un éxito. Le presentaremos este Instructable.

En primer lugar, el diseño del circuito básico necesario para recuperar el hijo del micrófono y hacer el altavoz. Una vez que se dibujó el circuito, la PCB se debía realizar en el software Altium. Mientras dos estudiantes estaban ocupados administrando los PCB de entrada y salida, los otros dos estaban trabajando para ejecutar la tarjeta DE0 Nano Soc para que la tarjeta pudiera captar las muestras de micrófono y dar una señal para el altavoz. Finalmente, tuvimos que crear efectos de sonido para cambiar el sonido.

Paso 1: Conception Du Circuit En Entrée / Diseño del circuito de entrada

Conception Du Circuit En Entrée / Diseño del circuito de entrada
Conception Du Circuit En Entrée / Diseño del circuito de entrada

Français:

La première étape consiste en mettre en place un circuit qui puisse prendre le signal envoyer sur le 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 transformer 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 formule suivante:

Vs = Ve (1 + Z1 / Z2)

En una elección una ganancia de 101 en mettante R1 = 100 kOhm y R2 = 1 kOhm.

Cet amplificateur va a servir un amplificador le son du micro.

(3) Les deux résistances vont créer un offset afin que la tension de sortie soit comp entre 0 et 4 V.

(4) Le micro qui va être amplifier par l'amplificateur.

(5) CAG (Control Automatique de Gain)

(6) Pour finir, nous avons créé un filtre passe-bas du second ordre avec deux RC. L'ordre 2 était nécessaire pour avoir une atténuation de - 40db / década. La fréquence de coupure choisit est 20 kHz.

Inglés:

El primer paso es configurar un circuito que pueda tomar la señal enviada en el micrófono para transmitirla a la tarjeta DE0 Nano Soc. Sobre el diagrama de nuestra entrada.

(1) El inversor recuperará los 5 Voltios y los transformará en - 5 V. Los - 5 V servirán para el amplificador que veremos a continuación.

(2) Aquí tenemos un amplificador no inversor. Según la siguiente fórmula:

Vs = Ve (1 + Z1 / Z2)

Se eligió una ganancia de 101 estableciendo R1 = 100 kOhm y R2 = 1 kOhm.

Este amplificador se utilizará para amplificar el sonido del micrófono.

(3) Las dos resistencias crearán un desplazamiento de modo que el voltaje de salida esté entre 0 y 4 V.

(4) El micrófono que será amplificado por el amplificador.

(5) AGC (control automático de ganancia)

(6) Finalmente, creamos un filtro de paso bajo de segundo orden con dos RC. Se necesitaba el orden 2 para tener una atenuación de -40db / década. La frecuencia de corte elegida es 20 kHz.

Paso 2: Concepción del circuito en salida / Diseño del circuito de salida

Conception Du Circuit En Sortie / Diseño del circuito de salida
Conception Du Circuit En Sortie / Diseño del circuito de salida

Français:

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 (convertidor digital a analógico) 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

página 10

Ce schéma permet d'avoir una ganancia de 200 qui est nécessaire car notre signal est vraiment faible.

Inglés:

Sobre el diagrama de nuestra salida.

(1) El DAC (Convertidor Digital a Analógico) que permitirá recuperar la señal digital enviada por la tarjeta DE0 Nano Soc y convertirla en señal analógica (necesaria para el altavoz).

(2) La capacidad se utilizará para transferir el componente continuo de nuestra señal.

(3) Montaje que amplificará la potencia de nuestra señal. Tomamos el esquema:

www.ti.com/lit/ds/symlink/lm386.pdf

página 10

Este esquema permite tener una ganancia de 200 que es necesaria porque nuestra señal es realmente débil.

Paso 3: Concepción del PCB / Diseño del PCB

Conception Des PCB / Diseño de la PCB
Conception Des PCB / Diseño de la PCB

Français:

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:

Diseño de menú -> Actualizar documento de PCB.

Ensuite, cliquez sur «Validar cambios». 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 place les composants dans cette fenêtre.

Puis, il faut aller dans le menu "Archivo" -> "Salida de fabricación" -> "Archivos Gerber"

Une fenêtre s'ouvre, dans celle-ci vous trouverez;

  • Le menú "Capas" qui vous permettra de choisir sur quel layer va s'appuyer votre PCB.
  • El menú "Drill Drawing" dans lequel il faut que tout soit décocher.
  • El menú "Aperturas" dans lequel il faut cocher "Aperturas incrustadas".

Toute ses étapes sont complétées?

Revenons maintenant à la fenêtre avec les composants sur celle-ci vous cliquez sur

Archivo-> Salida de fabricación -> Archivos de perforación NC

C'est enfin finit, il ne reste plus qu'à donner à l'imprimante 3D les fichiers.

Vous trouverez ci-joint les photos de nos deux PCB.

Inglés:

Una vez que se crearon instancias de nuestros circuitos, tuvimos que ponerlos en PCB.

Para hacer esto, usamos el software Altium. Todo debe estar conectado correctamente y luego haga clic en:

Diseño de menú -> Actualizar documento de PCB.

Luego haga clic en "Validar cambios". Para cada cambio validado, aparece una marca de verificación verde en la columna "Verificar".

Después de eso, tendrá una nueva pestaña que se abrirá y tendrá que colocar los componentes en esta ventana.

Luego tienes que ir al menú "Archivo" -> "Salida de salida" -> "Archivos Gerber"

Se abre una ventana, en esta encontrarás;

El menú "Capas" que le permitirá elegir qué capas admitirán su PCB. El menú "Drill Drawing" donde todo debe estar desmarcado. El menú "Aberturas" en el que tienes que marcar "Aberturas empotradas".

¿Se completan todos sus pasos?

Regresemos ahora a la ventana con los componentes en este en el que hace clic

Archivo-> Salida de fabricación -> Archivos de perforación NC

Finalmente se acabó, todo lo que tienes que hacer es darle los archivos a la impresora 3D.

Adjunto encontrará las fotos de nuestros dos PCB.

Paso 4: Périphériques Pour La Carte DE0 Nano Soc / Peripherals para la tarjeta DE0 Nano Soc

Périphériques Pour La Carte DE0 Nano Soc / Periféricos para la tarjeta DE0 Nano Soc
Périphériques Pour La Carte DE0 Nano Soc / Periféricos para la tarjeta DE0 Nano Soc

Francais:

Los coeficientes de propiedad intelectual son optimizados para los periféricos Intel FPGA y los mejores resultados implícitos para la réplica de la concepción y las temperaturas de prueba.

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:

  • Comunicación SPI pour le DAC
  • ADC pour recupérer les valeurs analogique de notre signal et les convertir en donnée digitales
  • HPS (processeur) pour gerer tout les codes
  • GPIO pour les boutons qui vont servir à exécuter ciertos efectos
  • Mémoire (en memoria de chip)

Inglés:

Los núcleos IP están optimizados para dispositivos Intel FPGA y se pueden implementar fácilmente para reducir el diseño y el tiempo de prueba.

Gracias al software Qsys pudimos crear periféricos integrados en nuestro mapa. Aquí hay una lista del dispositivo que agregamos:

  • Comunicación SPI para el DAC
  • ADC para recuperar los valores analógicos de nuestra señal y convertirlos en datos digitales
  • HPS (procesador) para gestionar todos los códigos
  • GPIO para los botones que se utilizarán para hacer frente a ciertos efectos
  • Memoria (en la memoria del chip)

Paso 5: L'écran LT24

L'écran LT24
L'écran LT24

Français:

Il nous a fallu comprendre et gérer l'écran LT24 celui-ci sera guidé par un processeur simulé NIOS.

Pour l'initaliser, nous avons lu beaucoup de documentations sur celui-ci.

Au final, notre écran sert à afficher la FFT, à sélectionner l'effet voulu.

Inglés:

Tuvimos que entender y administrar la pantalla LT24, será guiada por un procesador NIOS simulado. Para iniciarlo, leímos mucha documentación al respecto.

Al final, nuestra pantalla se utiliza para mostrar la FFT, con el efecto deseado.

Paso 6: Códigos Utiles En C ++ / Códigos útiles en C ++

Códigos Utiles En C ++ / Códigos útiles en C ++
Códigos Utiles En C ++ / Códigos útiles en C ++

Je vais vous montrer les codes en C ++ qui nous ont utiles afin de réaliser des effets sonores.

Voici d'abord toutes nos déclarations (oui un peu exhaustif…):

Les voy a mostrar los códigos en C ++ que nos resultaron útiles para crear efectos de sonido.

Primero, todas nuestras declaraciones (sí, un poco exhaustivas…):

#incluir

#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_REGS400_SPWAN (0) 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; // Creación de la configuración y los búferes en et out pour s (t) et 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 * tamaño de (kiss_fft_cpx)); kiss_fft_cpx * out = (kiss_fft_cpx *) malloc (NFFT * tamaño de (kiss_fft_cpx)); kiss_fft_cpx * inv = (kiss_fft_cpx *) malloc (NFFT * tamaño de (kiss_fft_cpx)); queueoutBuf; int global = 0; int i = 0; datos cortos, datos2;

Ci-dessous une de nos fonctions permettant la modulation:

A continuación una de nuestras funciones que permite la modulación:

modulación de vacío (int freq)

{si (i <NFFT) {datos = datos * cos (2 * PI * freq * i / FE); en .r = datos; i ++; } más i = "0"; }

Voici notre fonction principal:

Éstas nuestra función principal:

int main (int argc, char ** argv)

{volátil sin firmar largo * h2p_lw_spi_addr = NULL; volátil sin firmar largo * h2p_lw_led_addr = NULL; volátil sin firmar largo * h2p_lw_adc_addr = NULL; volátil sin firmar largo * h2p_lw_blue_addr = NULL; volátil sin firmar largo * h2p_lw_red_addr = NULL; volátil sin firmar largo * h2p_lw_black_addr = NULL; void * base_virtual; int fd; printf ("1 / n"); // mapea el espacio de direcciones de los registros spi en el espacio de usuario para que podamos interactuar con ellos. // En realidad, mapearemos todo el intervalo CSR del HPS ya que queremos acceder a varios registros dentro de ese intervalo if ((fd = open ("/ dev / mem", (O_RDWR | O_SYNC))) == -1) {printf ("ERROR: no se pudo abrir \" / dev / mem / "… / n"); volver (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 (virtual_base == MAP_FAILED) {printf ("ERROR: mmap () falló… / n"); cerrar (fd); volver (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 + ((sin firmar largo) (ALT_LWFPGASLVS_OFST + ADC_0_BASE) & (sin firmar largo) (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 + ((sin firmar largo) (ALT_LWFPGASLVS_OFST + PIO_BLACK_BASE) & (sin firmar largo) (HW_REGS_MASK)); h2p_lw_red_addr = virtual_base + ((sin firmar largo) (ALT_LWFPGASLVS_OFST + PIO_RED_BASE) & (sin firmar largo) (HW_REGS_MASK)); // int i = 0; int datos; int i = 0, j; // Creación de la configuración y los búferes de entrada y salida pour s (t) et S (f) const kiss_fft_cfg config = kiss_fft_alloc (NFFT, 0, NULL, NULL); kiss_fft_cpx * in = (kiss_fft_cpx *) malloc (NFFT * tamaño de (kiss_fft_cpx)); kiss_fft_cpx * out = (kiss_fft_cpx *) malloc (NFFT * tamaño de (kiss_fft_cpx)); while (1) {datos = * (h2p_lw_adc_addr + 2); if (* h2p_lw_blue_addr == 1) datos = echo (datos, 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, datos | 0b111000000000000); } gratis (config); libre (en); libre (fuera); return 0; }

Paso 7: Le Final / The Final

Le Final / The Final
Le Final / The Final

Français:

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 boite on trouve un potentiomètre glissière, qui permet de gérer le volume du son, des potentiomètres et des boutons qui permettrons de lancer ciertos efectos, 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.

Inglés:

Aquí tenemos (finalmente) la versión final de nuestro Cactus 2000.

Colocamos los PCB de entrada y salida que están conectados a la placa DE0 Nano Soc.

Luego, sus componentes se colocan dentro de una caja amarilla.

En la caja hay un potenciómetro deslizante, que puede administrar el volumen del sonido, perillas y botones que lanzarán algunos efectos, y una pantalla que mostrará la FFT.

El altavoz se coloca perpendicular a los botones. El micrófono se coloca en el otro lado de la caja en relación con el altavoz.

Eso es todo por hoy.

Esperando que este Instructable sea útil para usted.

Recomendado: