Spisu treści:

Automatyczne dostrajanie: 7 kroków
Automatyczne dostrajanie: 7 kroków

Wideo: Automatyczne dostrajanie: 7 kroków

Wideo: Automatyczne dostrajanie: 7 kroków
Wideo: 7 RZECZY których nie rób w samochodzie z automatyczną skrzynią!!! 2024, Listopad
Anonim
Automatyczne dostrajanie
Automatyczne dostrajanie

Bienvenue dans notre projet Autotune

Notre équipe va vous présenter la réalisation de ce projet. Notre équipe est composée trzech najlepszych inżynierów z Polytech Sorbonne en EISE4 (4 lata inżynierów cyklicznych w embarques électronique informatique systemów).

Notre projekt składa się z émettre un son capter dla mikro, emit par un haut parleur i afficher la FFT sur un écran PC. Il sera possible de modifier le son audio comme le volume et créer un écho.

C'est parti pour les explications !!

Krok 1: Utylizacja składników

  • Karta DEO-Nano-SoC
  • Baterie 2 wyjście à 5V2A
  • Mikro
  • Haut Parleur 8 Ohm
  • Regulator: MAX660
  • Rejestrator podczerwieni: GP2Y0E02A
  • Wzmacniacz audio: LM386N-1/NOPB
  • DAC: MCP4821-E/P
  • Dioda: 1N4148
  • Tranzyt: LND150N3-G / N-FET
  • 2 AOP: TL081C
  • Opór
  • Kondensatory
  • Wifi: ESP8266EX
  • 4 przełączniki
  • 3 diody couleurs

Krok 2: Architektura

Architektura
Architektura

Voici ci-dessus notre schéma bloc reprezentant l'architecture de notre projet Autotune.

Comme vous pouvez le voir, notre projet va pouvoir capter un son à l'aide du micro dont le signal analogique capté sera converti en un signal numérique nie l'ADC est intégré dans la carte FPGA. Puis le signal sera modifié selon nos effets choisis à l'aide d'un capteur de proximité et des switchs. Enfin, le signal modifié depuis la carte sera reconverti en un signal analogique et sera transmise à travers le haut parleur.

Krok 3: Partie Analogique

Partia Analogiczna
Partia Analogiczna
Partia Analogiczna
Partia Analogiczna
Partia Analogiczna
Partia Analogiczna

Notre partie analogie est composée de 2 circuits:

Najlepszy obwód, który reprezentuje partie mikro, qui sera branche w CAN karty FPGA, skomponowany wzmacniacz wzmocnienia i filtr, który przepuszcza sygnał.

Najlepszy obwód, który reprezentuje partie haut parleur, ten sera oddziału karty FPGA, skomponowany DAC, dzielnik napięcia i wzmacniacz dźwięku.

Le troisième schéma est celui du régulateur produisant du -5V wlać alimenter tous les composants.

Krok 4: Impresja Des PCB

Impression Des PCB
Impression Des PCB
Impression Des PCB
Impression Des PCB
Impression Des PCB
Impression Des PCB

Maintenant, wszystkie nowe płytki PCB afin de les imprimer et de les relier !

A l'aide du logiciel Alitum, nous avons pu creer deux PCBs, c'est à dire la partie micro et haut parleur. Voici le site korespondent au tutoriel Altium qui peut sureement vous aider !

Krok 5: Partia Numeryczna

Partia Numeryczna
Partia Numeryczna

Après avoir imprimer vos PCBs, vous pouvez enfin brancher le tout à la carte FPGA!

Pour la partie numérique, nous avons créer un code C qui est séparé en deux en utilisant un thread. D'un coté, on récupère le signal on le modifie et on l'envoie vers le DAC en spi. D'un deuxième côté, na obliczeniach la fft i na envoie le résultat par wifi. Cette séparation permet d'éviter les ralentissements sur la premiere partie.

W celu wykorzystania Qsys et quartus pour brancher le HPS avec les différents composants. W przypadku korzystania z notammentu IP SPI w celu przekazania komunikatu z karty sieciowej i w przypadku korzystania z protokołu IP UART.

Krok 6: Le Code

Voici le lien om nous avons récuperé le code pour faire la fft.

Po użyciu se kod wlać kalkulator la fft:

// Tworzenie konfiguracji i buforów in i out 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*sizeof(kiss_fft_cpx));kiss_fft_cpx* out = (kiss_fft_cpx*)malloc(NFFT*sizeof(kiss_fft_cpx));

for(j = 0; j < NFFT; j++){Wartość = *h2p_lw_adc_addr; //recupère la valeur progressive du pcb du microin[j].r = wartość-2000,0; //na emeryturze l'offset de cette valeurfor(i = 0; i < 2100; i++) {} //attend un temps bien precis pour avoir une fréquence d’échantillonnage connue}

// Oblicz depuis FFT in vers outkiss_fft(config, in, out);bzero(C_val, 110); //remet à zero le tableau qui nous sert de buffer que l'on va envoyer par wififor(t=0;t< (NFFT/4);t++) { //pour limiter la taille du buffer on limite la sortie de la fft à des valeurs entre 0 i 9 tmp_log=20*(log(abs(out[t].r/1000.0)))*9;

tmp_log=tmp_log/50; if(tmp_log<0){ tmp_log=0; } if(tmp_log>9){ tmp_log=9; } sprintf(tmp_val, "%d", tmp_log); strcat(C_val, tmp_val); //ajoute au buffer la nouvelle valeur

}send_wifir(C_val); //na envoi le buffer par wifi

Funkcja wysyłania wifi:

void send_wifir(char* com_AT){ int num, z; for(z=0;z<22000000;z++) {} for(num = 0; num < (int)strlen(com_AT); num++) { *(h2p_lw_rs232_addr) = com_AT[num]; } }

Wlać inicjator la carte wifi na wykorzystanie odpowiedniego kodu:

send_wifi("AT+RST\r\n"); //żądanie resetu à la cartesleep(3); //attend qu'elle resetsend_wifi("AT+CWMODE=3\n\r"); //wybierz tryb cartesend_wifi("AT+CWJAP=\"wifiNom\", \"MotDePasse\"\r\n"); //on lui demande de se connecter au wifisleep(15); //na uczestnictwo w qu'elle se connectesend_wifi("AT+CIPSTART=\"UDP\", \"192.168.43.110\", 32003\r\n"); //On lui demande de se connecter en udp avec le server ouvert sur un autre ordinateursleep(3); //uczestniczyć w la connexionsend_wifi("AT+CIPMODE=1\r\n"); //po spotkaniu w trybie envoie en Continueleep(3);send_wifi("AT+CIPSEND\r\n"); //na rozpoczęcie transmisji

Funkcja wysyłania wifi:

void send_wifi(char* com_AT){ int num, z;for(num = 0; num < (int)strlen(com_AT); num++) { *(h2p_lw_rs232_addr) = com_AT[num]; dla(z=0;z<2500000;z++) {} } }

Kod serwera:

affichage de la fft:

int i, j, Wartość=0; system("wyczyść");

for(i =0; i < 41; i++) { if(i < 40) { for(j = 0; j < BUFSIZE; j++) { if(table[j]*4 > (40 - i)) { if (tabela[j]*4 > 35) printf(RED "|" RESET); else if(tabela[j]*4 > 28) printf(L_RED "|" RESET); else if(table[j]*4 > 21) printf(YEL "|" RESET); else if(table[j]*4 > 14) printf(L_YEL "|" RESET); else if(tabela[j]*4 > 7) printf(L_GRN "|" RESET); w przeciwnym razie printf(GRN "|" RESET); } else printf(" "); } printf("\n"); } else { printf("0Hz 2,5Hz 5Hz 7,5kHz 10kHz\n"); /*for(j = 0; j < (ROZMIAR ROZMIARU/2); j++)

Zalecana: