La largeur d'affichage de l'appareil n'est pas adaptée à l'affichage de ce site web.
Merci d'orienter votre appareil en mode paysage.
Électronique

Préamplificateur à microcontrôleur Publié par raoul le 07/04/2013 11:18 ; Édité par raoul le 27/11/2016 16:45

27/11/2016 : mise à jour des fichiers source et binaire suite au passage à la version 2.0.7.5 de BASCOM-AVR. Les principales modifications sont :

- ajout du paramètre Wait à Config Rc5 (amélioration du fonctionnement de la télécommande parallèlement à l'encodeur)
- mise à jour des noms de sources
- petite optimisation du code

--

J'ai débuté, en octobre 2011, un projet de réalisation d'un préampli Hi-Fi suite à la lecture d'un article de Paul Van Der Vleuten publié dans le magazine Elektor n° 379 d'octobre 2009.

Cette réalisation correspondait à un besoin que j'avais suite à la réalisation d'un amplificateur Zenquito en septembre 2005 (oui je sais, il s'est écoulé du temps entre les 2... ;-) ) : celui de lui associer un préampli pour le choix des sources musicales et le contrôle du volume. J'utilisais jusque là la partie préamplificatrice d'un ampli A/V.

Le (mini-)préampli présenté a l'avantage d'être quasi neutre dans la retranscription du signal audio. Certes il y a des AOP dans le chemin parcouru par le signal mais ceux-ci ont été choisi justement pour leur neutralité. Les fonctions du préampli sont les suivantes :

- sélection des sources, au nombre de 3 analogiques + 1 numérique (ou 4 analogiques) par relais
- réglage du volume par potentiomètres numériques
- affichage sur un afficheur LCD des informations
- un menu pour personnaliser le nom des sources (selon une liste prédéfinie)
- mémorisation du volume en fonction de la source
- commande à distance avec une télécommande
- mise en/hors service d'un amplificateur à la mise en/hors service du préampli (fonction trigger)

Note : Je ne publierai pas ici l'article original qui est la propriété du magazine Elektor. Vous pouvez bien entendu vous le procurer pour une modique somme sur leur site.

http://blog.gnew.xyz/medias/images/img_1697_t.jpg

  1. Schémas et circuits imprimés :

    Je me suis inspiré des schémas de Paul Van Der Vleuten pour la réalisation des cartes électroniques (partie analogique et partie microcontrôleur). Après analyse de mes besoins et des mes équipements, je les ai retravaillé pour supprimer le superflu (divers jumpers pour tester plusieurs configurations), modifier la courbe de réponse des potentiomètres numériques et adapter une carte de conversion N/A.

    Les schémas ont été saisis sous EAGLE. Les dimensions des circuits imprimés, surtout celles de la partie microcontrôleur, ont été définies par le choix du boîtier. En effet, la carte qui accueille le microcontrôleur, l'afficheur LCD, les boutons poussoirs de sélection manuelle des sources ou d'accès au menu, les LED d'indication et un encodeur rotatif vient se fixer directement derrière la face avant du boîtier qui est au format 1U. Ses dimensions sont de 208 x 37 mm, celles de la carte analogique de 94 x 70 mm. Les 2 cartes sont en 2 couches épargnées, trous métallisés et étamage chimique. La société Beta LAYOUT s'est chargée de la réalisation.

    Voici les schémas et implantations des 2 cartes :

    http://blog.gnew.xyz/medias/images/schema_analogique_t.png
    http://blog.gnew.xyz/medias/images/carte_analogique_top_t.pnghttp://blog.gnew.xyz/medias/images/carte_analogique_bottom_t.png
    Carte analogique


    http://blog.gnew.xyz/medias/images/schema_microcontroleur_t.png
    http://blog.gnew.xyz/medias/images/carte_microcontroleur_top_t.pnghttp://blog.gnew.xyz/medias/images/carte_microcontroleur_bottom_t.png
    Carte microcontrôleur


    ainsi que les fichiers EAGLE :

    - carte analogique
    - carte microcontrôleur

  2. Carte de conversion N/A :

    Pour la conversion N/A j'ai choisi du tout fait : le DAC 1955 MK3 DIR9001+AD1955 24/96 kHz de chez Audiophonics. Voici les composants principaux de la carte :

    - DIR9001(96 kHz, 24-bits Digital Audio Interface Receiver)
    - CM102S (USB vers S/PDIF)
    - AD1955 (décodage S/PDIF 24-bits, 192 kHz sample rate)
    - condensateurs audio Nichicon
    - AOP de sortie : OP275G

    Rien de particulier à dire sur le sujet. Il faut juste prévoir un transformateur à tensions multiples (2 x 15V + 1 x 9V, en 30VA par exemple) pour l'alimenter. Le redressement, la stabilisation et le filtrage des tensions sont réalisés en interne sur la carte. Ah si, les 2 embases RCA d'entrée sont dessoudées et remplacées par une portion de câble coaxial double jusqu'à l'entrée (DIGITAL IN) de la carte analogique.

    http://blog.gnew.xyz/medias/images/img_1704_t.jpg

  3. Liste des composants :

    Le document PDF ici détaille la liste des composants du préampli, avec les quantités, les prix et les fournisseurs utilisés. Vous remarquerez sans doute que les frais de port non pas été optimisés car le développement du projet s'est fait en plusieurs phases.

  4. Microcontrôleur et programmation :

    Un microcontrôleur ATmega8 d'Atmel a été choisi pour piloter l'afficheur LCD, les potentiomètres numériques et les relais de sélection des sources.

    J'ai complètement réécrit le programme original de Paul Van Der Vleuten, en langage BASIC, pour le simplifier et l'adapter à mon utilisation. Des évolutions sont envisageables dans le futur comme, par exemple, la gestion de la balance gauche/droite. Le logiciel BASCOM-AVR a été utilisé pour écrire le code, simuler la gestion de l'afficheur LCD et compiler.

    http://blog.gnew.xyz/medias/images/simu_bascom-avr_t.png
    La simulation


    http://blog.gnew.xyz/medias/images/img_1741_t.jpg
    La concrétisation


    La carte microcontrôleur est équipée d'un connecteur ISP 10 broches. J'ai utilisé un programmateur USB ICPROG-AVR/K disponible chez Go Tronic pour programmer l'ATmega8 par le biais du logiciel avrdude. Dans mon cas, la programmation s'est faite avec la commande (je vous laisse lire la documentation d'avrdude) :

    Code:avrdude -p ATMEGA8 -P COM2 -b 115200 -c avr910 --U flash:w:preampli.hex -U lfuse:w:0x03:-U hfuse:w:0xd9:m

    Vous remarquerez que l'ATmega8 est utilisé à la fréquence de 4 MHz.

    Note : Il n'est pas nécessaire de compiler soi-même le programme avant de le transférer vers le microcontrôleur, vous pouvez très bien transférer le fichier binaire (.hex) fourni directement. Le logiciel BASCOM-AVR n'est donc pas obligatoire. La compilation de la source n'est nécessaire que si vous souhaitez apporter des modifications au programme. Il y a une chose à savoir tout de même : la télécommande compatible RC5 devra émettre à l'adresse 0 (TV). Si votre télécommande émet sur une autre adresse il faudra alors modifier les lignes 111 et 475 (If Adresse = 0 Then) du fichier source (.bas) et recompiler.

    Voici les fichiers source et binaire du programme ainsi que le logiciel avrdude :

    - fichier source
    - fichier binaire
    - avrdude + source + manuel

  5. Fonctionnement de l'encodeur :

    Ci-dessous, une vue de l'encodeur et de ses liaisons avec le microcontrôleur :

    http://blog.gnew.xyz/medias/images/encodeur.png

    On comprend rapidement que l'encodeur va relier successivement à la masse les entrées PB6 et PB7 selon un cycle défini par son fonctionnement interne et qui est le suivant lorsqu'on le tourne dans le sens horaire (voir aussi sa datasheet) :

    http://blog.gnew.xyz/medias/images/cycle_encodeur.png

    L'état des entrées PB6 et PB7 est quant à lui géré par le programme aux lignes 190 et 198 :

    Code:1Set Portb.7 : Set Portb.6
    2Reset Portd.7 
    : Reset Portd.6


    A la mise en service, les entrées sont à un état 1 (fonction Set) ce qui signifie que la tension à leurs bornes est positive et égale à 5V (soit la tension Vcc du microcontrôleur). A la mise hors service, leur état est à 0 (fonction Reset), la tension à leurs bornes est égale à 0V. Lorsque l'on tourne l'encodeur dans le sens horaire, et connaissant son cycle interne, l'état des entrées PB6 et PB7 varie donc de la manière suivante :

    http://blog.gnew.xyz/medias/images/cycle_microcontroleur.png

    Le cycle binaire entre 2 positions de la détente (représentées en tirets bleu) est donc : 11-01-00-10 pour le sens horaire et par analogie 10-00-01-11 pour le sens anti-horaire. A partir de ces cycles binaires, il va être possible de détecter le sens de rotation de l'encodeur dans le programme et lui affecter des routines. Pour se faire, on utilise la fonction OU exclusif (XOR) entre l'état courant de l'entrée PB7 et l'état précédent de l'entrée PB6. En effet, si l'on reprend le cycle binaire sens horaire et avec la table de vérité de XOR (source Wikipédia) on peut observer ceci :

    http://blog.gnew.xyz/medias/images/table_xor.png http://blog.gnew.xyz/medias/images/cycle_xor.png

    XOR entre l'état courant de l'entrée PB7 et l'état précédent de l'entrée PB6 est toujours égal à 1 sens horaire et XOR sens anti-horaire toujours égal à 0. Voici un exemple d'utilisation de l'encodeur dans le programme :

    Code:1For X = 1 To 100
    2    Sens 
    = Y Xor Pinb.7
    3    Z 
    = Encoder(pinb.6 , Pinb.7 , Volume_incr , Volume_decr , 0)
    4
        Y = Pinb.6
    5    Waitus 100
    6Next X
    7
    = 0


    Il s'agit d'une boucle de 100 × 100 µs durant laquelle on attend un mouvement de l'encodeur. La durée totale de 10 ms correspond à la durée typique d'un cycle de l'encodeur. Durant cette boucle, on détecte le sens de rotation avec la fonction XOR, on store l'état précédent de l'entrée PB6 et on appelle les routines Volume_incr ou Volume_decr.

    Code:1Volume_decr:
    2
    3
    If Sens = 0 And Z = 1 Or Commande = 17 Then
    4
    ...
    5
    End If
    6
    7
    Return
    8
    9
    Volume_incr:
    10
    11
    If Sens = 1 And Z = 0 Or Commande = 16 Then
    12
    ...
    13
    End If
    14
    15
    Return


    Z correspond aux impulsions du cycle binaire. Il y a 4 impulsions durant un cycle mais seule la troisième est lue (00 sens horaire et 01 sens anti-horaire) pour qu'entre 2 positions de détente l'encodeur n'incrémente, ou ne décrémente, que de 1.

  6. Choix des positions des potentiomètres numériques :

    A la lecture du code source et plus particulièrement de la routine Volume_afficher, on peut se demander d'où sortent les valeurs de la variable Volume auxquelles correspondent des valeurs (d'atténuation) en décibels.

    Code:1Volume_afficher:
    2
    3
    Locate 2 , 12
    4
    5Select Case Volume
    6    Case 0 
    : Lcd " MINI"
    7
        Case 2 : Lcd "-56dB"
    8
        Case 3 : Lcd "-54dB"
    9
        Case 4 : Lcd "-52dB"
    10
        Case 5 : Lcd "-50dB"
    11
        Case 7 : Lcd "-48dB"
    12
        Case 10 : Lcd "-46dB"
    13
        Case 14 : Lcd "-44dB"
    14
        Case 20 : Lcd "-42dB"
    15
        Case 29 : Lcd "-40dB"
    16
        Case 45 : Lcd "-38dB"
    17
        Case 68 : Lcd "-36dB"
    18
        Case 98 : Lcd "-34dB"
    19
        Case 128 : Lcd "-32dB"
    20
        Case 156 : Lcd "-30dB"
    21
        Case 180 : Lcd "-28dB"
    22
        Case 199 : Lcd "-26dB"
    23
        Case 215 : Lcd "-24dB"
    24
        Case 228 : Lcd "-22dB"
    25
        Case 239 : Lcd "-20dB"
    26
        Case 247 : Lcd "-18dB"
    27
        Case 254 : Lcd "-16dB"
    28
        Case 255 : Lcd " MAXI"
    29
    End Select
    30
    31
    Return


    Tout simplement par la théorie puis la confirmation par la pratique. Un potentiomètre, numérique ou non, n'est rien de plus qu'un diviseur de tension. Les valeurs de la variable Volume sont les positions du curseur du potentiomètre dans une plage de 0 à 255, soit 256 positions (voir la datasheet de l'AD5290).

    Le document PDF ici (8 pages) donne les valeurs théoriques entre les points BW et AW du potentiomètre numérique dans sa configuration diviseur de tension (tout potentiomètre peut aussi être utilisé en résistance variable, rhéostat). Il donne aussi les valeurs d'impédance Z, d'atténuation dB et la tension de sortie Vout. La valeur R de 10k correspond aux résistances R11 et R12 de la carte analogique qui donnent aux potentiomètres (LIN à la base) une courbe quasi LOG. La colonne Vout R10k −15dB correspond à la tension de sortie finale du préampli. Le −15dB est la valeur du diviseur de tension additionnel en sortie matérialisé par les résistances R13/R17 et R14/R18.

    Pourquoi ce diviseur de tension en sortie ?

    A la lecture de sa datasheet, on découvre que la valeur en position 0 du potentiomètre numérique est typiquement égale à 3 × Rw soit 150 Ω. C'est sa structure interne qui veut ça et cela fixe l'atténuation minimale du potentiomètre à :

    dB = 20 × LOG10(147,78 ÷ (147,78 + 100150)) = −56,63 dB (les valeurs proviennent du PDF)

    Avec comme source un lecteur de CD dont le signal peut atteindre 2V RMS (ma platine par exemple) cela se traduit par un niveau sonore déjà bien perceptible dès les premières positions du curseur ! Un potentiomètre de 100 kΩ devrait, en théorie, pouvoir atteindre une valeur d'atténuation de −100 dB. Dans la pratique, une valeur de −70/−80 dB est déjà suffisante.

    Pour pallier à cela, j'ai donc ajouté un diviseur de tension qui ramène la position MINI (0 du curseur) à −72 dB environ. La première position du volume est ensuite fixée à −56 dB puis croît par paliers de 2 dB jusqu'à la valeur MAXI de −15 dB. Les paliers de 2 dB ont été choisis en fonction de la courbe corrigée du potentiomètre (LOG). Le comble est que la linéarisation de l'atténuation est rendue possible par la courbe corrigée (LOG). Sans correction (en conservant un potentiomètre LIN donc) le choix des paliers aurait été beaucoup plus restreint.

    A l'usage : Une des entrées de mon préampli est reliée aux sorties PRE OUT de mon ampli A/V. Il s'agit d'un usage "Bypass" (volume en position MAXI). Évidemment, l'atténuation de −15 dB se répercute. Il m'a donc fallu ajuster le niveau des voies gérées par le préampli par rapport aux autres au niveau des réglages de l'ampli A/V. Pour le reste, je ne pense pas que le point MAXI de −15 dB soit une limite à mon utilisation ;-) .

    Une autre solution aurait été de diminuer le gain de mon ampli Zenquito (+30 dB).

  7. Dans la pratique :

    La carte microcontrôleur est alimentée par un transformateur 2 x 15V de 7VA associé à un kit Velleman K8042 pour le redressement et la régulation. Les tensions symétriques de sortie sont ajustées à 12V. C'est la carte microcontrôleur qui alimente ensuite la carte analogique.

    Quatre paires de RCA (rouge + noir ou rouge + blanc), pour les entrées des sources, sont reliées par des portions de câbles coaxiaux doubles jusqu'aux entrées (ANALOG IN 1-4) de la carte analogique. Une de ces paires est au préalable dérivée vers un inverseur 3 pôles sur lequel les sorties de la carte de conversion N/A arrivent aussi. Ainsi, l'inverseur permet de choisir entre une source analogique ou numérique.

    Note : l'inverseur permet d'éviter la mise en parallèle des 2 sources, analogique et numérique, dans le cas où celles-ci seraient connectées au préampli. On peut se passer de l'inverseur si l'on prend la précaution de ne relier qu'une source (analogique ou numérique) à la fois. Dans ce cas, la source analogique est directement reliée à l'entrée ANALOG IN 4 et la sortie de la carte de conversion N/A est directement reliée à l'entrée DIGITAL IN de la carte analogique.

    La sortie ANALOG OUT est reliée quant à elle vers une 5ème paire de RCA, celle qui sera reliée à un amplificateur. La sortie BYPASS est utile si l'on souhaite récupérer les signaux d'entrée des sources, sans qu'ils ne passent par le contrôle du volume, pour les envoyer vers un appareil d'enregistrement par exemple. Pour ma part, je n'ai pas utilisé cette fonction.

    Une des grosses difficultés dans la réalisation des cartes électroniques est la soudure des composants CMS au fer à souder : l'ATmega8 (boîtier TQFP) a un pas de 0,8 mm, les AOP ont un pas de 0,65 mm et les 2 potentiomètres numériques quant à eux ont un pas de 0,5 mm ! Ce n'est pas simple mais réalisable. Le minimum requis est une panne fine (0,5 mm maxi), une loupe binoculaire et une tresse à dessouder. La méthode :

    - sous la loupe, étamer délicatement une des pastilles externes du circuit où le composant sera soudé
    - approcher et positionner le composant proche de la pastille
    - faire fondre l'étain avec le fer et positionner en même temps, et du mieux que possible (alignement), le composant
    - vérifier le positionnement du composant après solidification de l'étain
    - si le composant est correctement placé, souder une patte opposée pour assurer son positionnement
    - souder la totalité des pattes d'un côté du composant : il ne faut pas s'attendre à un résultat parfait mais éviter quand même les pâtés et faire attention de ne pas déplacer le composant
    - souder l'autre côté
    - à partir de là, la tresse à dessouder va servir à "lisser" et "homogénéiser" la quantité d'étain sur les pattes

    Il n'est pas simple d'expliquer la méthode mais le résultat est très correct. Il peut être nécessaire de recharger en étain pour que la tresse à dessouder ne "boive" pas tout. Sur les potentiomètres numériques, toutes les pattes d'un côté sont lissées en même temps. Et voici le résultat :

    http://blog.gnew.xyz/medias/images/img_1694_t.pnghttp://blog.gnew.xyz/medias/images/img_1687_t.jpg

    Évidemment, bien vérifier l'absence de court-circuits après nettoyage.

  8. Mise en boîtier :

    Le boîtier est un modèle Hi-Fi 2000 Slim Line au format 1U, de 280 mm de profondeur et une façade de 4 mm d'épaisseur. L'utilisation d'une contre-façade permet la fixation (ou plutôt le maintien) de la carte microcontrôleur contre la façade sans percer cette dernière.

    Comme pour chaque mise en boîtier, organisation, patience et soin sont requis pour ne pas faire de bêtises. Les outils nécessaires sont courants : une perceuse et des forets adaptés aux matériaux, une petite scie à main dont la lame peut être orientée suivant différents angles, une lime et de l'huile de coude ;-) .

    Mon conseil : chaque façade apparente sur laquelle il va falloir percer des trous ou ouvrir des logements est à recouvrir avec un scotch pour éviter les rayures et autres dérapages.

    http://blog.gnew.xyz/medias/images/img_1701_t.jpg

  9. Mise en route :

    Au premier allumage du préampli, il faut régler le contraste de l'afficheur LCD, par le biais du potentiomètre TR1 de la carte microcontrôleur, pour voir apparaître cet écran :

    http://blog.gnew.xyz/medias/images/img_1750_t.jpg

    On peut alors vérifier le bon fonctionnement des boutons poussoirs pour la sélection des sources et l'accès au menu, l'encodeur pour le défilement des éléments, ainsi que la télécommande (touches 1, 2, 3, 4, volume et mise en/hors service).

    Dans le menu, au premier écran vous pouvez sélectionner la source à éditer. L'astérisque indique la ligne en cours. Un nouvel appui sur le bouton SETUP fait basculer sur la seconde ligne pour le choix du nom de la source.

    http://blog.gnew.xyz/medias/images/img_1753_t.jpghttp://blog.gnew.xyz/medias/images/img_1754_t.jpghttp://blog.gnew.xyz/medias/images/img_1755_t.jpg

    Puis à nouveau un simple appui sur SETUP pour sortir du menu.

  10. Documentations relatives :

    - Alps_EC12E2424407.pdf
    - Analog_Devices_AD5290.pdf
    - Analog_Devices_AD8610_8620.pdf
    - Atmel_ATmega8.pdf
    - DEM_16209_FGH-PW.pdf
    - Fairchild_BS170.pdf
    - ICprog-AVR_2.0_KANDA.pdf
    - NEC_EE2.pdf
    - NEC_PS710B.pdf
    - Velleman_K8042.pdf
    - Vishay_TSOP4836.pdf