Le principe est que lorsque mon ami appuiera sur un bouton, la boite jouera un morceau de musique ou un son qui a une signification particulière pour lui.
J'ai reçu, assemblé et testé le montage aujourd'hui et ça marche parfaitement à l'exception d'un "hum" audible même lorsque le shield n'envoie plus de musique à l'amplificateur. J'ai analysé le spectre du "hum" en question et voila ces caractéristiques :
On a donc des raies à :
- 172.5 Hz (3x57.5 Hz)
- 345 Hz (6x57.5 Hz)
- 517.5 Hz (9x57.5 Hz)
- 690 Hz (12x57.5 Hz)
je pense que vous voyez la logique.
Je suppose que le 57.5 Hz provient du réseau électrique : ais-je raison ou tord ?
Si oui comment puis-je protéger mon circuit (mes premiers essais avec de l'alu semblent améliorer la situation mais c'est pas Byzance) ?
Je vous remercie par avance pour vos réponses, conseils...
Si tu en doutes, fais le test en tournant complètement sur batterie ...
Par contre note que tu peux aussi avoir un convertisseur qui te pourri le truc ... Donc essaye en changeant de convertisseurs pour voir si ça te change la donne...
Si tu en doutes, fais le test en tournant complètement sur batterie ...
Par contre note que tu peux aussi avoir un convertisseur qui te pourri le truc ... Donc essaye en changeant de convertisseurs pour voir si ça te change la donne...
Sauf si je capte avec l'ampli le champ électromagnétique que provoque le réseau, non ?
Si tu es dans la campagne tout seul : "Sort dans ton jardin au plus loin dans la forêt" avec ton montage sous le bras (tout seul, règle de distanciation oblige x) ) et refait des essais ...
Sinon si tu es en appartement refais l'essais après avoir coupé le disjoncteur ( bon juste le tien pour commencer ... Si tu fais sauter les plombs de tout l'immeuble pour tes essais je suis pas sûr que les voisins verront tes essais d'un très bon oeil ^^ )
Bien que cela m'étonnerait un peu ne connaissant pas ton environnement je ne peux pas te dire si c'est lui qui te perturbe ou pas... Je peux juste de proposer des tests ...
Alors après essai couper le courant électrique n'a rien donné.
En revanche j'ai découvert que si je sépare l'alimentation de l'amplificateur et celle de l'Arduino alors le bruit disparait !
ça ça ne m'étonne pas plus que ça =)
Chercher du côté des convertisseurs était ma première hypothèse =) Mes tests proposés étaient uniquement pour te convaincre de chercher ailleurs que l'environnement externe =) Tu peux essayer avec un convertisseur 5V externe à ton arduino =) en passant par les broche GND et 5V de ta carte.
Chercher du côté des convertisseurs était ma première hypothèse =) Mes tests proposés étaient uniquement pour te convaincre de chercher ailleurs que l'environnement externe =) Tu peux essayer avec un convertisseur 5V externe à ton arduino =) en passant par les broche GND et 5V de ta carte.
Ah, et bien tu as eu raison !
Et j'ai vérifié : lorsque j'observe la tension d'alimentation à l'oscilloscope j'ai de très jolies raies à 172.5 Hz et à 86 Hz
Je vais essayer ça et je vais aussi essayer avec un filtre passe très bas pour filtrer la tension d'alimentation.
J'ai essayé avec un LM317 et ce montage ci (mais sans les diodes de protection, je n'en ai pas en stock, ni les mêmes résistances j'ai mis R1=1.8K et R2=4.7K. La tension mesuré sur l'entrée +5V est de 4.7V) :
Et j'ai toujours le "hum" bien présent. Il n'apparait que en charge : lorsque j'observe à l'oscilloscope la tension d'alimentation de l'amplificateur elle est impec, l'oscillation n'apparait que lorsque l'Arduino est connecté via l'entrée 5V.
Je me dis que le plus simple c'est sans doute de recourir à 2 batteries 9V mais ça ne me plaît pas plus que cela comme solution. (j'aimais bien l'idée d'une seul source de courant, ça permettait de le brancher sur secteur).
EDIT : j'ai essayé de filtrer, avec des filtres RC, l'entrée de l'amplificateur mais la tension chutait trop dans les résistances et n'était pas suffisante pour alimenter l'ampli après. J'ai donc filtré l'entrée Vin de l'Arduino et la ça marche plutôt bien :
Si vous voyez une meilleur solution n'hésitez pas.
Quand tu dis que ça marches plutôt bien, tu veux dire que tu as toujours un peu de "HUM"?
Sinon, pour filtrer "mieux" :
- quand tu veux faire passer du courant, un filtre LC est parfois mieux (en continue, l'inductance à une résistance casi nulle, mais elle ne laisse pas passer les hautes fréquences)
- parfois, tu n'es même pas obligé de faire un vrai filtre RC, parfois juste mettre le condensateur suffit pour stabiliser l'alimentation (en profitant des résistances et inductances parasites). A noter que c'est "moins bien" qu'un vrai filtre RC en terme de filtrage (mais plus simple). A noter que dans ce cas le condensateur doit être au plus près de l'endroit où tu veux stabiliser la tension.
- rajouter un condensateur en parallèle de l'ampli pourrait aider si tu as encore un peu de HUM
- je vois que tu mets des gros condensateurs (100µF) : il peut être utile d'en mettre un petit (genre un céramique 0.1µF) en parallèle pour les hautes fréquences. Mais comme le bruit que tu entends est basse fréquence, je pense pas que ça changera quelque chose
Aidez-nous à vous aider : partagez toutes les informations pertinentes : description précise du problème, contexte, schéma de câblage, liens vers la documentation des composants, votre code (ou encore mieux un code minimal reproduisant le bug), ...
Vous recevrez ainsi plus de réponses, et elles seront plus pertinentes.
Quand tu dis que ça marches plutôt bien, tu veux dire que tu as toujours un peu de "HUM"?
Sinon, pour filtrer "mieux" :
- quand tu veux faire passer du courant, un filtre LC est parfois mieux (en continue, l'inductance à une résistance casi nulle, mais elle ne laisse pas passer les hautes fréquences)
- parfois, tu n'es même pas obligé de faire un vrai filtre RC, parfois juste mettre le condensateur suffit pour stabiliser l'alimentation (en profitant des résistances et inductances parasites). A noter que c'est "moins bien" qu'un vrai filtre RC en terme de filtrage (mais plus simple). A noter que dans ce cas le condensateur doit être au plus près de l'endroit où tu veux stabiliser la tension.
- rajouter un condensateur en parallèle de l'ampli pourrait aider si tu as encore un peu de HUM
- je vois que tu mets des gros condensateurs (100µF) : il peut être utile d'en mettre un petit (genre un céramique 0.1µF) en parallèle pour les hautes fréquences. Mais comme le bruit que tu entends est basse fréquence, je pense pas que ça changera quelque chose
C'est quasiment inaudible mais j'ai maintenant un signal de 41 Hz qui se balade. Ce n'est pas très gênant, je pense que je vais m'en accommoder, après tout je ne cherche pas à faire de la haute fidélité.
Bon c'est la tuile : en passant le circuit de filtrage de la breadboard à une carte pastillée le bruit est revenue, moins fort que sans le filtrage mais relativement fort quand même. C'est la déprime :/
Je constate maintenant en sortie de l'amplificateur un signal à 86 Hz et ces harmoniques. L'amplitude de ce signal parasite est de 14.5 mV.
La réjection de l'amplificateur est de, au pire, 30 dB d'après la datasheet. Donc logiquement si le signal parasite venait de l'alimentation il devrait avoir une amplitude de 14.5*10^(30/20)~=458.5 mV hors je ne constate rien de tel sur l'alimentation (le Ripple est de ~138 mV d'amplitude sur l'alimentation de l'Arduino.
Je vous mets les captures d'écran de l'oscilloscope avec le filtre sur Breadboard et sur carte pastillée :
Sur breadboard (en bleu le Ripple du 5V de l'Arduino et en rouge la sortie de l'amplificateur) :
Idem mais sur la carte pastillée :
J'en déduis donc que le signal ne provient pas seulement de l'alimentation mais aussi du montage DAC/AOP (qui se trouve avant l'amplificateur) et que l'efficacité du montage sur la Breadboard tenait à autre chose que le montage en lui même sans que je sache quoi. (la distance entre les circuits peut être ?)
Autre élément de réflexion : lorsque l'Arduino est alimentée mais ne joue pas de musique alors le bruit n'est pas la. C'est dés que je joue un morceau que le bruit apparaît. Et ce bruit est indépendant du controleur de volume qui se trouve entre le DAC et l'AOP de la carte WAVE (avant l'amplificateur).
Est-ce que tu aurais un schéma complet de ton montage, ainsi que les références des composants?
Vu les fréquences, il est bien possible que l'erreur se cumule entre l'arduino, l'AOP et l'ampli audio (chaque sortant une tension plus faible s'il est moins alimenté, du coup on a une multiplication).
Une autre possibilité serait que le bruit sur l'alim vienne seulement d'une variation du courant demandé du à du bruit 86Hz sur le signal. Dans ce cas, le problème vient peut-être de l'ampli-op (je ne sais pas quel gain tu y utilise, mais un apli-op a un produit gain*bande_passante limité : si tu ne la respecte pas, tu peux avoir des oscillations)
Sinon, au final tu utilise quoi comme filtrage et comme condensateurs? A quels endroits (pour les condensateurs seuls, la distance jusqu'au circuit pour lequel tu veux stabiliser la tension compte).
Aidez-nous à vous aider : partagez toutes les informations pertinentes : description précise du problème, contexte, schéma de câblage, liens vers la documentation des composants, votre code (ou encore mieux un code minimal reproduisant le bug), ...
Vous recevrez ainsi plus de réponses, et elles seront plus pertinentes.
L'AOP est monté sur la carte Wave dont voici le schéma :
C'est un ampli double (TS922A), ils sont tout les deux en suiveur et servent juste de buffer avant la sortie jack ou speaker. Je pense donc que ce n'est pas un problème de produit gain/bande.
Je résume le circuit :
Une alimentation de labo (ou une batterie 9V) alimente l'Arduino/le Shield et l'amplificateur en passant par le circuit suivant :
Le signal est généré par un DAC(MSP4921), puis passe par un potentiomètre monté en diviseur de courant, puis par les AOP en suiveur (tous ces composants sont sur le shield dont le schéma est ci-dessus).
Ensuite le signal est envoyé sur un amplificateur TDA2003 monté ainsi :
Les fils entre le shield et l'ampli et entre l'ampli et le haut-parleur font ~7cm chacun.
EDIT : le signal est bien présent, potentiomètre au volume le plus bas, en sortie de la carte Wave (amplificateur débranché). Jusqu'à présent je ne l'avais jamais remarqué à cet endroit... Uniquement au niveau des alims.
Avant de commencer, voici les calculs du gain de l'ampli de sortie (tu peux sauter cette partie si tu veux):
Spoiler
Rétroaction négative sur l'ampli => V+=V-
On vas appeler Vs le potentiel à la sortie de l'ampli, et V2 le potentiel entre R1 et R2
Nb : je ne m'intéresse qu'à la fréquence de f=86Hz, je vais donc travailler avec la fréquence w=2*pi*f=2*3.14*86=540 rad/s. Le fait de travailler à une fréquence donnée me permettra de faire quelques simplifications.
On vas regrouper R3 et C1 comme une seule impédance notée Z3 : Z3=R3+1/(j*C1*w) (avec j=racine(-1) et w la pulsation).
On a R3=100 ohms, et 1/(C1*w)=1/(8.2*10^-9*540)= 2.3*10^5 ohms : R3 est donc négligeable à 86Hz (elle ne commencera à jouer un rôle que pour des fréquences bien plus hautes, de l'ordre de 10kHz). On a donc Z3=1/(j*C1*w)
Le condensateur C5 a une impédance notée Z5=1/(j*C5*w)
1/R1=1/470=2*10^-3 et 1/R2=1/4.7=0.2 : on peut donc dire que 1/R1 << 1/R2, donc 1/R1 + 1/R2 = 1/R2
Par conséquent, on obtient Vr=(V-/Z5 + Vs/R1) / (1/Z5 + 1/R2) = V- /(1+Z5/R2) + Vs / (R1/Z5 + R1/R2)
Z5/R2=1/(j*C5*w*R2)= - j * 1/(C5*w*R2) = -j * 1/(470*10^-6*540*4.7) = -0.84 j : pas négligeable devant 1 ni l'inverse : pas de simplification possible de 1+Z5/R2
R1/Z5 = j*R1*C5*w= j * 470 * (470*10^-6) * 540 = 119 *j et R1/R2=470/4.7 = 100 : l'un n'est pas négligeable devant l'autre, là encore on ne peut rien simplifier
Si on injecte (eq2) dans (eq1), on obtient :
(1 + C5/C3) * V- = Vs + [ V- /(1+Z5/R2) + Vs / (R1/Z5 + R1/R2) ] *(C5/C3)
On a donc, pour des fréquences proches de 86Hz, un gain en sortie de l'ampli égal à G = Vs/V+ = Vs/V- = [ 1 + C5/C3 - (C5/C3)/(1+Z5/R2) ] / [ 1+ (C5/C3)/ (R1/Z5 + R1/R2) ]
C5/C3=470µF/100nF=(470*10^-6) / (100*10^-9)=4700 >> 1, donc 1+C5/C3 = C5/C3
1/ (R1/Z5 + R1/R2) = 1/(100 + 119j) soit environt (1/100)*(1/(1+j))=0.01*(1-j)/ [(1+j)*(1-j)]=0.01*(1-j)/2 = 0.005*(1-j)=5*10^-3*(1-j) : c'est 25 fois plus grand que C3/C5, donc C3/C5 + 1/ (R1/Z5 + R1/R2) = 1/ (R1/Z5 + R1/R2)
Cette tension Vref est le 5V de l'arduino, passé par un filtre RC, avec R=100k et C=0.1µF. On a donc une fréquence de coupure fc=1/(2*pi*R*C)=16 Hz
Si ton Ripple a une fréquence de f=86 Hz, alors le gain sera G=1/sqrt(1²+f²/fc²)=1/sqrt(1+86²/16²)=0.18
Donc si tu as une amplitude A=138mV pour le Ripple du 5V, alors tu aura un Ripple d'amplitude B=A*G=29mV sur Vref.
Comme la sortie du DAC est proportionnelle à Vref, si on suppose le pire des cas (tension max en sortie du DAC), alors on a un Ripple C=B=29mV en sortie du DAV
La contribution au niveau du ripple rejection dû à l'alimentation du DAC est négligeable à basse fréquence : d'après le datasheet (même lien, page 13, figure 2-34), en dessous de 200Hz, le ripple de l'alimentation est diminué à -60dB, donc G'=10^(-60/20)=10^-3. Les 138mV de ripple du 5V ne font donc que 0.138 mV en sortie du DAC : négligeable par rapport aux 29mV du aux variations de Vref
Donc en sortie du DAC, on potentiellement jusqu’à C=29mV d’amplitude d’oscilations.
On a potentiellement des oscillations supplémentaires au niveau des suiveurs, mais je penses qu’elles sont négligeables (j’ai pas vérifié)
Enfin, le signal est amplifié au niveau de l’ampli, avec un gain G=119 (cf calculs du gain de l’ampli à fréquence 86Hz). On a donc en sortie, une amplitude d’oscillations D=G*C=119*29mV = 3451 mV = 3.4V d’amplitude d’oscillations !!!
Je suis donc surpris que tu ais seulement 14mV de bruit et pas beaucoup plus.
Je te suggère donc, pour vérifier :
- si tu peux, mesures la tension en sortie du DAC (avant ou après les suiveurs), avec et sans l’ampli branché.
- si tu peux, mesure la valeur Vref à l’oscillo (avec et son ampli branché)
- si tu peux, mesure le ripple sur le 9V à l’entrée de l’arduino
Si mon hypothèse est correcte, alors tu devrais avoir environ 29mV d’amplitude d’oscillations sur Vref.
Si c’est ça, je vois 2 solutions pour réduire le bruit :
- soit tu améliore la stabilisation du 5V (ou du 9V à l’entrée de l’arduino)
- soit tu ajoute une capa de « grande » capacité en parallèle de C6 pour diminuer la fréquence de coupure du filtre de Vref (si tu mets du 100µF, en théorie tu aurais 1000 fois moins de ce ripple). Après, si le shield est fait aec des composants trop petits, ça peut être difficile à souder
2) pour l’origine du bruit :
une possibilité serait que ce soit une « résonance » :
- s’il y a un tout petit peu de bruit en 86Hz sur le 5V, alors il sera amplifié 119 fois par l’ampli.
- Hors, un ampli audio, ça consomme du courant, et se courant est proportionnel à la tension de sortie (si on suppose une charge résistive). Du coup, le courant consommé par l’ampli aura une composante en 86Hz.
- Comme l’ampli consomme « pas mal » de courant (si tu pouvais mesurer le courant consommé, ça donnerait une indication), et que ton circuit a des résistances parasites (la résistance interne d’une pile 9V est assez élevée, plus des résistance de tes pistes/fils/soudures), cette hausse de courant entraîne une chute de tension (à 86Hz) sur le 9V.
- Comme le régulateur 5V de l’arduino n’est probablement pas parfait pour rejeter des oscillations de la tension d’entrée, une partie des oscillations du 9V se retrouveront sur le 5V : on se retrouve donc à créer des oscillations en 86Hz sur le 5V (l’hypothèse de départ)
- S’il se trouve que les oscillations sont à peu près en phase après un tour complet, alors il y a résonance, et les oscillations s’amplifient potentiellement (si le gain de cette boucle est >1). Si au contraire après un tour complet on se retrouve en opposition de phase ou que le gain est <1, alors il n’y aura pas d’amplification
Pourquoi 86Hz sur le circuit soudé et plus 41Hz comme sur la breadboard ? Tout simplement car il y a plein de différences sur les « parasites » (résistance des conducteurs, inductance des conducteurs, capas parasites, …).
Aidez-nous à vous aider : partagez toutes les informations pertinentes : description précise du problème, contexte, schéma de câblage, liens vers la documentation des composants, votre code (ou encore mieux un code minimal reproduisant le bug), ...
Vous recevrez ainsi plus de réponses, et elles seront plus pertinentes.
Je n'ai plus les connaissances nécessaires pour vérifier votre calcul mais effectivement j'ai également un gain de 100, par simulation, à 86 Hz.
Je compléterai ma réponse au fur et à mesure.
EDIT :
Il y a une erreur dans la liste des composants de la carte (Adafruit a changé d'AOP mais n'a pas mis à jour sa page web), l'AOP n'est pas celui que j'ai indiqué mais celui-ci : https://www.ti.com/product/TLV2462
Toutes les mesures sont faites avec la carte en train de lire un morceau et le potentiomètre de volume à sa position la plus basse car c'est dans ses conditions que le problème se voit le mieux. Dans toutes ces mesures, sauf indication contraire, l'entrée de l'ampli est reliée à la masse.
Les mesures sur le 9V sont faites en amont du filtre RC. Le montage est alimenté par une alimentation stabilisée de laboratoire réglée sur 9V.
Le 9V mesuré avec l'amplificateur débranché :
Le 9V mesuré avec l'amplificateur branché :
La vue analyse spectrale de mon oscilloscope :
Le Vref du DAC avec l'amplificateur débranché :
Le Vref du DAC avec l'amplificateur branché :
La sortie de l'AOP sans amplificateur :
La vue analyse spectrale de mon oscilloscope :
La sortie de l'AOP avec l'amplificateur branché :
La sortie de l'AOP avec l'amplificateur et l'entrée de l'ampli branché :
La vue analyse spectrale de mon oscilloscope :
Dans plusieurs mesures j'ai moyenné le signal sur 100 acquisitions et je suis passé en vue analyseur de spectre afin de distinguer s'il y avait un très faible signal noyé dans le bruit. C'est assez probant en sortie de l'AOP : on ne distingue rien à l'oscilloscope mais une fois le gain de FFT et le moyennage on constate que le signal à 86 Hz est bien présent. Malheureusement mon oscilloscope ne permet pas de visualiser l'amplitude en vue analyseur de spectre, il normalise tout par rapport au signal le plus fort.
En revanche je n'arrive pas à reproduire la mesure d'hier soir (la dernière capture oscillo dans mon message de 19h25) en sortie AOP où l'on voyait le 86 Hz en sortie AOP sans traitement.
Ce que je n'explique pas avec votre hypothèse c'est l'indépendance du bruit à la valeur du potentiomètre : peut importe le niveau du potentiomètre le bruit est présent, toujours au même niveau sonore (d'ailleurs dans toutes mes captures le potentiomètre est mis à zéro, quasiment plus aucun signal ne passe du DAC à l'AOP en théorie). Lorsque j'augmente le son, le bruit disparaît dans la musique car le volume de cette dernière a augmenté mais pas celui du bruit. Si c'est le DAC qui génère ce bruit, alors il devrait être augmenté en même temps que le volume de la musique.
Et lorsque je branche directement l'amplificateur en sortie du potentiomètre j'ai quand même le bruit donc ce n'est pas non plus la faute de l'AOP...
Je me permets de me répondre à moi même : j'ai obtenu des résultats en connectant directement l'entrée - de l'ampli et la masse de l'AOP à la masse de l'alimentation.
C'est pas encore aussi bon que ce que j'avais sur la breadboard mais je m'en rapproche.
Les deux premières figures du message 18 laissent penser que c'est l'appel de courant de l'ampli qui crée les oscillations du 9V.
Les oscillations sur Vref semblent ne pas changer selon que l'ampli est actif ou pas. Couplé au fait que l'effet ne dépend pas de la position du potentiomètre, ça aurait plutôt tendance à écarter cette cause (même si c'est pas certain, certains potentiomètres ne vont pas vraiment jusqu'à 0, ce serait à vérifier)
Le fait que changer le branchement des masses change le résultat, ça incite à penser que les résistances parasites jouent un rôle.
Est-ce que tu pourrais tester la sortie de l'ampli en reliant l'entrée de l'ampli à la masse (idéalement un test en jouant un morceau, et un sans)? Si les oscillations sont encore présentes en sortie de l'ampli, alors ça accuse fortement l'alim ou l'ampli.
Aidez-nous à vous aider : partagez toutes les informations pertinentes : description précise du problème, contexte, schéma de câblage, liens vers la documentation des composants, votre code (ou encore mieux un code minimal reproduisant le bug), ...
Vous recevrez ainsi plus de réponses, et elles seront plus pertinentes.