Nous nous plaçons, dans la cas d'un accordage classique (cf Présentation du projet).
Nous allons identifier les montages utiles et indispensable pour notre montage, ainsi que la détermination des caractéristiques des composants que nous allons avoir besoin.
Sur une guitare , les harmoniques fondamentales vont de $Mi_1 (E_1)$ à $Mi_ 2 (E_3)$, nous décidons de n’utiliser que les fréquences incluses dans cet intervalle.
Corde | Note | Fréquence ($H_z$) |
---|---|---|
6 | Mi (E1) | 82.41 |
5 | La (A1) | 110 |
4 | Ré (D2) | 146.83 |
3 | Sol (G2) | 196 |
2 | Si (B2) | 246.94 |
1 | Mi (E3) | 329.63 |
Nous avons besoin d'un filtre qui permettra d'éliminer les fréquences indésirables (tel le bruit) et ainsi “isoler” les fréquences qui nous intéresse, soit les fréquences correspondantes aux notes de nos cordes. Le filtre pourra donc nous aider à respecter cette plage de fréquence.
Ainsi le filtre passe bas du début de la chaine sera de type passif d'ordre 1 avec une fréquence de coupure $f_c = 400 H_z$.On le réalise grâce à une résistance et un condensateur.
Schéma pour la filtrage du bruit :
Pour la détermination des valeurs de la résistance et du condensateur, on peut le faire à notre guise. En effet, la fréquence de coupure étant définie par :
$ \qquad \qquad \qquad \qquad \qquad \qquad \qquad \qquad f_c = \dfrac{1}{2 \pi\ RC}$
On peut choisir de fixer soit $R$ soit $C$ et de résoudre l'équation.On décide de fixer $C=0.47µF$.
Les composants utilisés seront donc:
$ \qquad \qquad \qquad \qquad \qquad \qquad \qquad \qquad \qquad \qquad \quad R=850Ω$
$ \qquad \qquad \qquad \qquad \qquad \qquad \qquad \qquad \qquad \qquad \quad C=0.47µF$
Grâce à matlab, on peut vérifier les caractéristiques de notre montage :
%Composer d'un filtre passe bas d'ordre 2 %Gain & facteur de qualité du filtre: K =1;Q=0.707; %Plage de fréquence : w= [0:0.1:2500]; %fréquence coupure passe-bas (Hz) wb =2*pi*400; %Fonction de transfert passe-bas H(p) = K*w0^2/(p^2+w0*p/Q+w0^2) numb = [0 K*wb^2]; denb = [1 wb/Q wb^2]; sysb = tf(numb,denb); %Trace les diagrammes de Bode bode(sysb); legend('Filtre passe-bas du second ordre');
Diagramme d'un filtre passe-bas second ordre :
On se place au point où nous avons $-3dB$, et l'on voit que l'on est notre fréquence de coupure. Il est très important de vérifier si notre fréquence de coupure est à ce point, car après nous avons une atténuation de notre signal de $-20 dB$ par décade (Une décade est un facteur de 10 entre deux nombres).
Nous avons donc dimensionner notre filtre passe-bas.
Nous souhaitons maintenant réaliser un filtre laissant passer que la fréquence propre de la corde. Pour cela, nous utiliserons des cellules de filtres passe-bande de Salen-Key et plus précisément les structures de Rauch. Ce qui nous permet de réaliser des filtres dimensionnés de telle sorte que la fréquence de coupure soit la fréquence fondamentale de vibration de chaque cordes.
La structure de Rauch nous permet de réaliser des filtres nécessitant un fort gain et un coefficient de qualité élevé. La structure de Rauch permet de régler, de façon indépendante le facteur de qualité $Q$, le gain à la résonance $K_m$ et l'impulsion de résonance $ω_m$ tandis que la structure de Sallen & Key ne permet pas de modifier simultanément $Q$ et $K_m$.
Lorsque l'on fixe $C=C_1=C_2=1μF$, on a :
Fonction de transfert associé à la structure de Rauch : $\quad$ $H(s)=-\dfrac{C\dfrac{R_2R_3}{R_1+R_3}s}{\dfrac{R_1R_2R_3}{R_1+R_3}C^{2}s^{2}+2C\dfrac{R_1R_3}{R_1+R_3}s+1}$
Fréquence centrale du filtre: $\quad\qquad\qquad\qquad\qquad\qquad ω_m = \dfrac{1}{C} \sqrt{\dfrac{R_2(R_1+R_3)}{R_1 R_2 R_3}}$
Gain à cette fréquence: $\quad\qquad\qquad\qquad\qquad\qquad\qquad K_m = - \dfrac{R_2}{2R_1} $
Coefficient de qualité: $\quad\quad\qquad\qquad\qquad\qquad\qquad\qquad Q = \dfrac{1}{2} \sqrt{\dfrac{R_2(R_1+R_3}{R_1R_3}}$
Largeur bande passante du filtre: $\quad\qquad\qquad\qquad\qquad BW = \dfrac{2}{R_2C}$
Nous décidons de fixer $K_m$, $ω_m$ et $Q$, on obtient donc les formules suivantes pour déterminer la valeur de nos résistances :
$\qquad\qquad\qquad\qquad R_2 = \dfrac{2Q}{ω_m C} \qquad\qquad\qquad\qquad R_1 = - \dfrac{R_2}{2K_m} \qquad\qquad\qquad\qquad R_3 = \dfrac{K_m R_1}{2Q^2 + K_m}$
Nous allons avoir 6 Structures de Rauch à faire car nous avons 6 cordes qui ont chacune une fréquence différente. Nous déterminons aisément la valeur de nos composants (pour nos filtres) via Matlab.
%Programme Permettant dimensionnement des filtres %Structure de Rauch - Passe bande %1er Partie : Calcule des composants %definition des fréquences de chacune des cordes (E1 A1 D2 G2 S2 E3): fm = [82.41;110;146.83;196;246.94;329.63]; %fréquence centrale du filtre wn = 2*pi.*fm; %on pose le facteur de qualité: Q=[150;200;300;400;500;600]; %Gain à la fréquence de coupure K = -2; %on fixe les condensateurs (on impose C=C1=C) C=10^(-6); %résistances : R2 = (2.*Q)./(wn*C) R1 = -R2/(2*K) R3 = -(K*R1)./(2.*Q.^2+K) %Bande passante du filtre BW = 2./(R2*C) %--------------------------------------------------- %2ème partie : Calcule de la fonction de transfert & diagramme de Bode %Fonction de transfert sous la forme H(p) = (z*p)/(ap²+bp+c) %On va créer une boucle qui permettra de calculer la fonction de transfert %associés à chacune des résistances que nous avons obtenue dans la 1er partie for i=1:6 z = C*R2(i)*R3(i)/(R1(i)+R3(i)); a = (C^2)*(R1(i)*R2(i)*R3(i))/(R1(i)+R3(i)); b = 2*C*R1(i)*R3(i)/(R1(i)+R3(i)); c = 1; num = [-z 0]; den= [a b c]; sys(i) = tf(num,den); % /!\ tf = transfert function (et non transformé de fourier) end %Trace les 6 diagrammes de Bode bode(sys(1),sys(2),sys(3),sys(4),sys(5),sys(6)); %Les légendes sinon on ne comprend rien, surtout qu'il y en 6 legend('Filtre Mi','Filtre La','Filtre Re','Filtre Sol','Filtre Si','Filtre Mi');
Grâce à ce code, on détermine :
On a volontairement mis un facteur de qualité différent pour chacun nos filtres. Plus le facteur qualité est important plus la bande passante sera sélective, or il nous faut une petite marge pour nos réglages. Globalement, on a $3H_z$ de bande passante pour chacun de nos filtres.
Pour les résistances:
$R_1 (kΩ)$ | $R_2 (kΩ)$ | $R_3 (Ω)$ | $BW$ | |
---|---|---|---|---|
$E_1$ | 144.8 | 579.4 | 6.4 | 3.452 |
$A_1$ | 144.7 | 578.8 | 3.6 | 3.4558 |
$D_2$ | 162.6 | 650.4 | 1.8 | 3.0752 |
$G_2$ | 162.4 | 649.6 | 1.0 | 3.0788 |
$B_2$ | 161.1 | 644.5 | 0.6 | 3.1031 |
$E_3$ | 144.9 | 579.4 | 0.4 | 3.4519 |
Fonctions de transfert associé à chacun des filtres:
Corde E1 :
$ \qquad \qquad \qquad \qquad \qquad H_{E1}(s) =\dfrac{-2.575.10^{-5}s}{3.73.10^{-6}s^{2}+1.288.10^{-5}s+1}$
Corde Aa :
$ \qquad \qquad \qquad \qquad \qquad H_{A1}(s) =\dfrac{-1.447.10^{-5}s}{2.093.10^{-6}s^{2}+7.234.10^{-6}s+1}$
Corde D2 :
$ \qquad \qquad \qquad \qquad \qquad H_{D2}(s) =\dfrac{-7.226.10^{-6}s}{1.175.10^{-6}s^{2}+3.613.10^{-6}s+1}$
Corde B2 :
$ \qquad \qquad \qquad \qquad \qquad H_{B2}(s) =\dfrac{-4.06.10^{-6}s}{6.594.10^{-6}s^{2}+2.03.10^{-6}s+1}$
Corde E3 :
$ \qquad \qquad \qquad \qquad \qquad H_{E3}(s) =\dfrac{-2.578.10^{-6}s}{4.154.10^{-6}s^{2}+1.289.10^{-6}s+1}$
Diagrammes de Bode:
On peut voir que nous avons un seul et unique pic pour chacun des filtres, correspondant à la fréquence de fondamentale de notre corde. Lorsque que nous arrivons vers la fréquence de coupure, le gain augmente et plus on s'éloigne et plus celle-ci s'atténue. C'est exactement ce qu'il nous fallait, il ne nous reste plus qu'à faire les test pour s'assurer que notre filtre est aux normes !
On peut aussi mettre en avant l'influence du facteur de qualité sur notre système, et ainsi voir que la bande-passante (le “pic”) est plus étroite quand le facteur de qualité est plus important.
-
Comme le signal en sortie de guitare est assez faible ($\approx 100mV$ par corde), nous avons besoin d'amplifier le signal pour la suite. On veut amplifier le signal de tel sorte à avoir environ 1 volt en sortie.
On veut avoir 1 Volt en sortie avec $100mV$ en entrée. Il nous faut alors une amplification de 10. On utilisera le montage d'un amplificateur non inverseur.
$ \qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad Gain = 1 + \dfrac{R_2}{R_1}$
Pour avoir un gain de 10, il faut donc que: $\qquad\qquad \dfrac{R_2}{R_1} = 9 \qquad d'où \qquad R_2 = 9R_1$
On prendra $R_1 = 1kΩ$ et $R_2 = 10kΩ$.
Une amplification de 10 ou de 11 ne fera aucune différence car nous voulons au moins 1 Volt à la sortie de notre amplificateur.
Si l'on veut augmenter d'avantage l'amplification, il faudra alors faire attention à ne pas avoir de saturation en sortie d'amplification. Il faut regarder la datasheet du composant pour connaitre alors la limite d'amplification.
Le redresseur, en double alternance, nous permettra de transformer le signal sinusoïdale en un signal constant. Il est constituer d'un pont de diode ainsi qu'une charge Résistance-Condensateur en parallèle.
Il y a deux broches (correspondant aux deux côtés du pont), sur l'une d'elle, on aura la composante positive de notre signal et sur l'autre la composante négative.
Dans un premier temps, on avait essayer notre redressement en branchant notre signal sur une broche seulement. Pour d'obscure raison cela marchait mais ce n'était pas très . Pour pallier à ça, nous allons rajouter un amplificateur inverseur, il nous permettra d'avoir un déphasage de $\pi$ et ainsi avoir un redressement double alternance fonctionnant parfaitement.
Nous avons besoin que le signal reste inchangé, nous avons donc besoin d'un gain de $-1$ pour que notre signal soit inversé. Le gain se calcule de la façon suivant :
$ \qquad \qquad \qquad \qquad \qquad \qquad \qquad \qquad \qquad \qquad \qquad \qquad Gain = -\dfrac{R_1}{R_2}$
On prend naturellement $R=R_1=R_2=1kΩ$
Voici le montage:
Pour redresser le signal, on va utiliser un pont de diode qui nous permettra d'obtenir un redressement en double alternance.
Comment ça fonctionne ?
Explications:
L'entrée de cette partie correspond à la sortie de l'AOP précédent. N'oublions pas que cette dernière est un signal sinusoïdal avec un offset de $4,5V$, puisque nous travaillons toujours en double alternance.
Pour que le redressement double alternance fonctionne correctement, il faut amener au pont de diode (à droite du schéma) deux signaux:
Dans notre cas, l'amplitude de la tension en sortie $V_{out}$ sera moduler en fonction de la fréquence à laquelle on est. On a donc un $V_{out}$ maximum à la fréquence de coupure.
Pour résumé :
On a donc un montage qui nous permet de :
Lorsque nous avons testé nos montages, nous partions sur une alimentation symétrique, c'est-à-dire $[-9V;+9V]$ (avec un générateur) car c'est très simple et rapide à réalisé, et ça permet dans un premier temps de pouvoir expérimenter nos montages pour s'assurer de leurs bons fonctionnement. Néanmoins, faire une alimentation symétrique dans un système qui est embarqué est un peu plus compliqué car cela demande d'avoir plusieurs batteries (donc coût de fabrication plus cher) et d'espace dans notre boitier. L'alternative serait de partir sur une alimentions asymétrique en $[0V;9V]$, il y aura en conséquences quelques modifications sur nos montages.
Comme on veut alimenter nos AOP en $[0V;9V]$, il faut créer une tension de référence $V_{ref}$. $V_{ref}$ est toujours définit de la façon suivant :
$\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad \qquad V_{ref} = \dfrac{V_{dd}}{2}$
En faisant un pont diviseur de tension, on obtient aisément notre $V_{ref}$. La formule d'un pont diviseur de tension est :
$ \qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad V_{ref}=V_{pile}\dfrac{R_2}{R_1 + R_2}$
On fixe :
On détermine les valeurs de nos résistance et on a : $R_1 = R_2 = 1kΩ$
Nous avons ajouté un interrupteur et une led , ce qui nous permet avoir une indication quand notre système est sous tension. On reste dans un montage classique et sans surprise. Nous rajoutons à notre $V_{ref}$ un suiveur.
Suiveur:
Le suiveur permet de faire en sorte que l'impédance de sortie de notre AOP soit plus petite que l'impédance d'entrée de l'autre AOP.
À partir de ce point, nous avons créer notre point $V_{ref}$.
Remarque:
On aurait pu, avec une seule batterie, faire une branche $+V_{cc}$, et une autre $-V_{cc}$ en faisant rentrer notre tension dans un amplificateur inverseur. Mais cela peut impliquer une consommation beaucoup plus importante dans notre montage final.
Les broches d'alimentation de l'AOP vont maintenant être mis à $[0V;9V]$.Il y aura quelques changements sur nos montages :
Montage pour Rauch:
Pas de grand changement sur ce montage, si ce n'est les masses qui sont remplacés par $V_{ref}$.
Montage Amplificateur non inverseur:
Ici encore, la masse est remplacé par notre $V_{ref}$ et on a notre petit filtre passe haut à notre sortie d'AOP ! Comme on a un signal décalé de $+V_{ref}$, le rôle de notre filtre passe haut sera de remettre notre signal centré en 0 et en conséquence de supprimer la composante continue que nous avons ajouté.
Comme pour le filtre passe bas, la fréquence de coupure est déterminer par : $f_c = \dfrac{1}{2 \pi RC}$
On choisit nos composant tel que la fréquence de coupure laisse passer notre signal (ce serait bête d'avoir un signal complètement atténué à ce stade du montage).
En prenant $R=1kΩ$ et $C=22μF$, on a un $f_c \approx 7.2 H_z$. On gardera ses valeurs de résistance et condensateur si on a besoin d'utiliser d'autre filtre passe-haut.
Montage amplificateur inverseur:
Nous mettons un filtre passe haut en entrée pour enlever l'offset de notre signal. En effet, si nous ne faisons pas ça, nous allons rajouter un offset sur le signal et par conséquence avoir un signal offset, non plus à $4.5V$ mais à $9V$ et nous risquons de faire saturer notre AOP.
Mise à part ça, le montage est soumis aux mêmes changements que pour l'amplificateur non inverseur.
Il n'y a pas de changement quant au redressement du signal.
Pour choisir nos moteurs, il faut déterminer la force à appliquer sur les clés de la guitare ainsi que le couple du moteur et sa puissance.
Pour cela nous avons réalisé à l'aide de la découpeuse laser une pièce aux dimensions connues permettant de faire tourner une clé de la guitare avec un dynamomètre.
Nous accrochons un dynamomètre numérique à l'anneau et faisons tourner la cheville en tirant dessus. Cette méthode est marche très bien malheureusement le dynamomètre n'est pas adapté pour la mesure car il a une précision de $0.1N$. Nous avons un ordre de grandeur et notons une force de:
$\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad F=0.1N$
Nous cherchons le couple nécessaire pour faire tourner une cheville tel que : $C= F.r$
On a : $r = 79,79mm \qquad$ & $\qquad C=7mN.m$
Il nous faut ensuite la puissance, on veut un moteur qui ne tourne pas très vite donc $ω = 0,2 tours/s$
On utilise donc la formule: $\qquad\qquad\qquad\qquad\qquad P = C.ω = 1mW$
Il nous faut donc un moteur d'un couple de $7mN.m$ et de puissance $1mW$.
Grâce à nos filtres, nous arrivons à faire varier l'amplitude de notre signal en fonction de la fréquence. Plus la fréquence est proche de la fréquence de coupure et plus l'amplitude sera grande. L'avantage est que pour une faible variation de la fréquence, nous avons une grande variation de l'amplitude. Pour mieux comprendre, regardons le schéma suivant :
Du fait de la précision qu'il faut à nos fitlres (aux $Ohms$ près), il nous sera difficile de fabriquer un filtre parfait (à cause de la précision des composants). Il y a de donc forte chance que la fréquence qui nous intéresse se situe sur une des pentes de notre courbes, donc il nous faudra déterminer manuellement la tension que l'on a à la fréquence de la corde. Dans le cadre d'un filtre parfait, la tension maximale correspondrait à la fréquence de coupure.
Lorsque l'on mesure une tension $V_{mes}$ nous avons deux valeurs de fréquences possibles, de part et d'autre de la cloche. Plaçons nous dans la partie gauche du schéma. La fréquence de notre corde étant sur la pente de la cloche, on pourra comparer la valeur de nos mesures $V_{mes}$ avec la valeur de la tension théorique $V_{théorique}$ que l'on aura déterminer au préalable. Nous avons trois cas possible :
Pour ajuster la fréquence, nous aurons besoin d'activer le moteur sur la clé de la guitare. Pour cela, on va utiliser un arduino, le signal de sortie $V_{out}$ sera lu sur une de ses entrées analogiques. Il ne faut pas avoir de tensions négatives car l'arduino ne les lit pas (il faut que le signal soit compris en $0V$ et $5V$) d'où l'intérêt de redresser notre signal. On aurait pu aussi mettre un offset pour décaler le signal (on utilisera cette méthode pour la partie numérique).
On utilise un moteur à courant continue, il ne recevra de l'arduino que du $5V$ ou $0V$. Pour pouvoir faire tourner le moteur dans un sens puis dans l'autre, il faut utiliser un pont en H, ce qui nous permet d'avoir une tension positive et négative simplement.
Le pont en H se fait avec des BJET : 2 PNP et 2 NPN.
Fonctionnement du pont en h
Les diodes servent à protéger le moteur.
Dans l'ensemble voici à quoi ressemble notre montage
On a rajouté :
Nous avons fais le test avec un gbf pour simuler le signal de la guitare. Ayant mesuré la tension que l'on obtient à la fréquence de coupure, nous mesurons aussi la tension que l'on obtient lorsque l'on est à $ \pm5H_z$. Cette précaution nous permettra d'arrêter l'arduino pour éviter que la corde ne se brise ou se détende complètement.
/* * * frequence de coupure du filtre à ~105Hz => U = 4.32V * */ // On se laisse une plage de plus ou moins 10Hz long ampliWrongMax = 5360; //ampli maximum atteinte +5Hz long ampliCorrect = 4320; //ampli pour la bonne fréquence long ampliWrongMin = 3600; //ampli pour une fréquence de -5hz const int entreSignal = 0; // entrée sur le pin analogique A0 const int sensHoraire = 13; const int sensAnti = 12; void setup() { pinMode (sensHoraire, OUTPUT); pinMode (sensAnti, OUTPUT); } void loop() { int val = analogRead(entreSignal); int mv = map(val, 0, 1023, 0, 5000); if ((mv > ampliCorrect-400)||(mv < ampliCorrect+400)) //Si on est dans un intervalle { digitalWrite(sensHoraire, 0); digitalWrite(sensAnti, 0); } if (mv < ampliCorrect - 500) //Si la tension est plus faible que celle attendu, il faut tendre la corde { digitalWrite(sensHoraire, 1); digitalWrite(sensAnti, 0); } if (mv > ampliCorrect + 500) // Si la tension est plus grande que celle attendu, il faut détendre la corde { digitalWrite(sensAnti, 1); digitalWrite(sensHoraire, 0); } if ((mv < ampliWrongMin)|| (mv>ampliWrongMax)) //précaution pour ne pas exploser/détendre la corde ;) { digitalWrite(sensAnti, 0); digitalWrite(sensHoraire, 0); } delay(1); }
ajouter la partie code pour la led de la batterie
Pour augmenter notre précision, on peut
On vous donne rendez-vous sur la partie expérimental pour en savoir plus pour la suite ;)