« SE3Binome2023-6 » : différence entre les versions
Ligne 69 : | Ligne 69 : | ||
== Code C et AtMega == | |||
Vous vous rappelez peut-être du bloc « prescaler » de la partie précédente, je vous avais dit qu’elle servait à « configurer » l’ADC ; plus précisément, le prescaler va diviser la fréquence de fonctionnement de l’AtMega (16 MHz sur un Arduino), par un facteur de division donné, afin de laisser le temps à <code>analogRead</code> d’obtenir une mesure fiable, ainsi que pour avoir une bonne précision au niveau de la valeur lue. Ce prescaler est configuré au niveau du code d’Arduino afin d’obtenir un rapport de division de 128, ce qui est un rapport très important, la raison de ce choix est que les Arduino tournent aujourd’hui pour la plupart à 16MHz, mais le code d’Arduino doit être portable, et afin de tourner sur des fréquences aussi faibles de 1MHz en conservant la même fréquence pour l’ADC (afin d’en conserver la précision), il est impératif de mettre un rapport de division bien plus important pour les grandes fréquences ; voici un morceau du code de configuration d’<code>analogRead</code> sur Arduino : | |||
// Si la fréquence du processeur est de 16MHz | |||
#if F_CPU >= 16000000 // 16 MHz / 128 = 125 KHz | |||
sbi(ADCSRA, ADPS2); | |||
sbi(ADCSRA, ADPS1); | |||
sbi(ADCSRA, ADPS0); | |||
Comme vous pouvez le voir dans ce morceau de code, au niveau de l’AtMega, le rapport de division du prescaler est configuré par trois bits (ADPS[0-2]) du registre ADCSRA (nous l’avions mentionné sur notre schéma récapitulatif), ces trois bits fonctionnent de la façon suivante : | |||
{| class="wikitable" | |||
!ADPS2 | |||
!ADPS1 | |||
!ADPS0 | |||
!Facteur de division | |||
|- | |||
|1 | |||
|1 | |||
|1 | |||
|128 | |||
|- | |||
|1 | |||
|1 | |||
|0 | |||
|64 | |||
|- | |||
|1 | |||
|0 | |||
|1 | |||
|32 | |||
|- | |||
|1 | |||
|0 | |||
|0 | |||
|16 | |||
|- | |||
|0 | |||
|1 | |||
|1 | |||
|8 | |||
|- | |||
|0 | |||
|1 | |||
|0 | |||
|4 | |||
|- | |||
|0 | |||
|0 | |||
|1 | |||
|2 | |||
|- | |||
|0 | |||
|0 | |||
|0 | |||
|2 | |||
|} | |||
Version du 11 juin 2024 à 22:48
Projet : Audio Spectrum Analyzer (Analyseur de Spectre Audio)
Fonctionnement du système:
- Capture du son : Le microphone convertit le son en signal électrique
- Pré-amplification : On amplifie le signal pour le traiter
- Filtres passe-bande : On utilise des filtres pour diviser le signal en plusieurs bande de fréquences
- Échantillonnage : Les signaux sont numérisé pour être traités
- Traitement : Le microcontrôleur analyse les signaux
- Contrôle des LEDs : Utilisation d'une matrice LED pour afficher l'amplitude aux différentes bandes de fréquence
Comment fonctionne un microphone ?
Un microphone est composé d'un diaphragme, d'un aimant en forme de E allongé et d'une bobine de cuivre attaché autour du diaphragme. Lorsqu'un son est émis, le diaphragme se "compresse" et fait bouger la bobine de haut en bas créer ainsi un courant induit dans le circuit.
Créer un amplificateur audio :
Il faut d'abord créer un ampli audio (AOP ?) pour utiliser le signal électrique, créé par le diaphragme et la bobine, dan notre circuit. Le micro étant très petit, le signal électrique est très faible et peu exploitable. Il faut donc l'amplifier pour que l'interface audio puisse reconnaître plus efficacement les fluctuations des tensions
Choix des filtres :
Pour les filtres passe-bande on utilise des filtres actifs pour pouvoir les intégrés facilement dans un PCB. L'utilisation d'AOP sera obligatoire pour faciliter la création des filtres. Sans les AOP, nous serions obligés d'utiliser des self-inductances dans notre PCB, ce qui peut poser problèmes. Les AOP sont limités en hautes fréquences mais pas pour l'utilisation audio. Seulement les fréquences de 20Hz à 20kHz sont utilisées alors que la limite est de l'ordre du MHz.
Nous utilisons des AOP sous forme de cellules Sallen & key pour créer des filtres passe-bande d'ordre 2. Ils se comptent au nombre de 3 : un filtre Basse-Fréquence (20Hz-7kHz), un Mid-Fréquence(7kHz-14kHz) et un Haute-fréquence(14kHz-20kHz).
Évolution des brasures de la carte :
KiCAD :
Pour analyser le signal audio, on le sépare en trois signaux filtré sur des bandes de fréquences spécifiques, pour cela on utilise trois filtres.
Pour chacun des filtres, on met à la suite simplement un filtre passe-bas et un filtre passe-haut.
Pour le premier filtre on conserve les fréquences allant de 20Hz à 7kHz environ.
Le second : 7kHz-14kHz
Le troisième: 14kHz-20kHz.
Il est à noté que que l'on peut changer facilement nos bandes de fréquences en choisissant de nouvelle résistance / condensateur
Code C et AtMega
Vous vous rappelez peut-être du bloc « prescaler » de la partie précédente, je vous avais dit qu’elle servait à « configurer » l’ADC ; plus précisément, le prescaler va diviser la fréquence de fonctionnement de l’AtMega (16 MHz sur un Arduino), par un facteur de division donné, afin de laisser le temps à analogRead
d’obtenir une mesure fiable, ainsi que pour avoir une bonne précision au niveau de la valeur lue. Ce prescaler est configuré au niveau du code d’Arduino afin d’obtenir un rapport de division de 128, ce qui est un rapport très important, la raison de ce choix est que les Arduino tournent aujourd’hui pour la plupart à 16MHz, mais le code d’Arduino doit être portable, et afin de tourner sur des fréquences aussi faibles de 1MHz en conservant la même fréquence pour l’ADC (afin d’en conserver la précision), il est impératif de mettre un rapport de division bien plus important pour les grandes fréquences ; voici un morceau du code de configuration d’analogRead
sur Arduino :
// Si la fréquence du processeur est de 16MHz
#if F_CPU >= 16000000 // 16 MHz / 128 = 125 KHz sbi(ADCSRA, ADPS2); sbi(ADCSRA, ADPS1); sbi(ADCSRA, ADPS0);
Comme vous pouvez le voir dans ce morceau de code, au niveau de l’AtMega, le rapport de division du prescaler est configuré par trois bits (ADPS[0-2]) du registre ADCSRA (nous l’avions mentionné sur notre schéma récapitulatif), ces trois bits fonctionnent de la façon suivante :
ADPS2 | ADPS1 | ADPS0 | Facteur de division |
---|---|---|---|
1 | 1 | 1 | 128 |
1 | 1 | 0 | 64 |
1 | 0 | 1 | 32 |
1 | 0 | 0 | 16 |
0 | 1 | 1 | 8 |
0 | 1 | 0 | 4 |
0 | 0 | 1 | 2 |
0 | 0 | 0 | 2 |
GIT
https://archives.plil.fr/lgrevin/projet-se3-lilian-pierre
BIBLIOGRAPHIE et SOURCES
https://makezine.com/projects/audio-spectrum-analyzer/
https://zestedesavoir.com/articles/2106/arduino-les-secrets-de-lanalogique/