Electronique > Réalisations > Interphone 004b - avec PIC 18F2420 - Pro

Dernière mise à jour : 31/07/2022

Présentation

Cet interphone d'un genre un peu particulier s'appuie sur une liaison filaire numérique différentielle (parfait pour de grandes distances) et permet le raccord simultané de plusieurs postes. Une seule personne peut parler à un instant donné (poste en position émission) et toutes les autres peuvent entendre (postes en réception). Le passage d'un poste en mode émission bloque automatiquement les autres postes en mode réception, la tentative de passer un second poste en émission est refusée (c'est le plus rapide qui a gagné).

Le montage utilise un PIC 18F2420 pour effectuer la conversion A/N (microphone vers liaison numérique) et pour effectuer la conversion N/A (liaison numérique vers HP). L'UART interne au PIC est mis à contribution pour la gestion des données émises (signal audionumérique) via un adaptateur RS485 qui prend la forme d'un rigolo petit circuit intégré à 8 broches nommé MAX487 (voir page Bases - MAX487).

Une autre version de cet interphone, l'interphone 004 à base de PIC 16F886, a servi de base à la construction de celui-ci. La différence principale entre les deux interphones 004 avec PIC 16F886 et 004b avec PIC 18F2420 réside dans la vitesse de traitement des informations et dans la bande passante du signal audio transmis en numérique.

- Interphone 004 avec PIC 16F886 : bande passante audio 2 kHz (2,5 kHz en poussant un peu);
- Interphone 004b avec PIC 18F2420 : bande passante audio 4 kHz.

Pour tout le reste (alimentation, préampli micro, ampli BF) il est fait usage des mêmes circuits. Ce circuit n'est pas spécialement plus performant qu'un interphone analogique. Mais il pourrait au besoin permettre un petit encryptage des données émises ou plus simplement un adressage individuel vers un unique poste récepteur...


Avertissements

Quelques remarques...

Schéma 004b - avec PIC 18F2420

Le système complet de l'interphone est décomposé en plusieurs sections qui sont les suivantes (Tx = émission, Rx = réception):

interphone_004b
Circuit principal (coeur du montage)
   
Vitesse de fonctionnement générale...

Avant de commencer l'analyse indépendante de chaque section, je souhaite parler des réfléxions primaires qui ont conduit à l'étude de ce circuit. Je savais dès le début que le traitement d'échantillons obtenus après conversion analogique / numérique ne pourrait pas se faire à une vitesse très élevée avec ce type de PIC, même en employant un quartz de 20 MHz et en limitant la quantification à 8 bits. Pour me faire une idée de la vitesse maximale de traitement des échantillons (qu'on ne pourrait en aucun cas dépasser) j'ai d'abord commencé en faisant le plus simplement du monde possible au niveau logiciel, à savoir envoyer directement les données acquises par le module ADC (10 bits) vers le port B (8 bits de poids fort de la valeur acquise). Histoire de voir à quelle fréquence de traitement des échantillons on pouvait grimper (bien entendu, on pouvait aussi savoir cela par le calcul).

ADC_In -> PORTB

Avec un quartz 20 MHz, on arrive à une fréquence de traitement des échantillons légèrement supérieure à 12,4 kHz (valeur à ne pas confondre avec la fréquence d'échantillonnage du CAN du PIC). Donc possibilité de passer un signal audio dont la bande passante ne dépasse pas 6 kHz (théorème de Shanon / Niquist). Et encore, 6 kHz avec un filtre passe-bas à pente très raide si on veut limiter au maximum les problèmes de repliement de spectre (aliasing) - il est plus raisonable de se limiter à 5 kHz. Ce qui reste largement suffisant pour passer un signal BF de type voix intercom - on peut se contenter d'une limite supérieure de 3 kHz comme c'est le cas pour le téléphone analogique standard RTC. Mais évidement, ajouter des fonctions logicielles supplémentaires va forcément ralentir tout ça et c'est là que ça devient intéressant. Maintenant, envoi des échantillons non plus directement sur le PORTB du PIC mais sur la sortie RC6/TX (et donc via l'UART), bouclage Tx/Rx en reliant ensemble les deux broches RC6/TX et RC7/RX, puis transfert des données reçues sur RC7/RX vers le PORTB.

ADC_In -> UART_TX -> UART_RX -> PORTB

Toujours avec un quartz 20 MHz pour l'horloge principale du PIC et avec une vitesse de transmission de 115200 bauds, on arrive à une fréquence de traitement des échantillons légèrement supérieure à 5 kHz, ce qui permet de monter avec une bande passante un peu inférieure à 2,5 kHz. Là encore cette valeur de 2,5 kHz serait exploitable avec un filtre passe-bas de pente très raide, disons qu'une valeur de 2 kHz est plus réaliste. Ce n'est pas ce qu'on peut faire de mieux, mais pour de la voix ça passe encore même si ça sonne un peu "sourd". Si on descend la vitesse de transmission à 9600 bauds, la fréquence de traitement des échantillons dégringole à 860 Hz pour une bande passante de 350 Hz à 400 Hz. Là ça commence à faire mal, en fait ce n'est plus du tout exploitable. En poussant la vitesse de transmission de l'UART à 200000 bauds, on arrive à une fréquence de traitement des échantillons 6,4 kHz, ce qui nous permettrait en théorie de disposer d'une bande passante de 3 kHz. On n'est pas loin d'un truc correct, non ?

 

Valeurs finalement adoptées

La fréquence d'horloge du PIC 18F2420 pouvant grimper à 32 MHz, il n'y avait pas de raison de la plafonner à 20 MHz. Un quartz de 8 MHz avec activation de la PLL x4 du PIC et hop ! on arrive à 32 MHz. La vitesse de transmission sur le bus série a été initiée à 115200 bauds, mais là encore, pas de problème pour la pousser à 250000 bauds. A cette vitesse, la transmission d'un octet avec ses bits de start et de stop prend 1,5 us. Finalement, c'est l'acquisition du signal audio d'entrée et sa numérisation qui prennent le plus de temps, environ 73 us. Cela m'a conduit à utiliser une fréquence d'échantillonnage "globale" de 10 kHz (interruption d'un timer toutes les 100 us), pour une bande passante audio fort raisonnable de 4 kHz.

   

Circuit principal avec PIC (coeur du montage)

Tout (ou presque) repose sur un circuit intégré de quelques euros. Le PIC assure non seulement les tâches de conversion A/N et N/A (on utilise ici un réseau de résistances R/2R, mais on aurait pu employer un DAC 8 bits tel le DAC80x), il gère en outre le cadencement des données (échantillons audio) en émission et en réception, et pour finir il gère également les actions utilisateur. Ce qu'il faut lui ajouter (qu'il ne peut pas assurer lui-même) concerne toute la circuiterie audio analogique requise pour la préamplification et le filtrage du signal microphone et l'amplification de puissance pour attaquer un haut-parleur.

Le MAX487 permet de transmettre des données jusqu'à une vitesse de 250 kbps (250000 bauds) ce qui convient parfaitement ici. Le MAX485 convient également, mais attention, ce dernier peut travailler jusqu'à 2,5 Mbps et les fronts des signaux logiques sont plus raides et engendrent des harmoniques sur une plage de fréquence plus étendues (attention donc aux perturbations des appareils alentours).

   
Préamplificateur et filtre pour microphone

Le microphone délivre un signal dont l'amplitude de quelques mV est trop faible pour attaquer directement le convertisseur A/N du PIC qui fonctionne sur une plage de 0 à +5 V. On aurait pu abaisser cette plage en faisant usage d'une référence de tension haute inférieure à +5 V au niveau du CAN du PIC, mais je ne me suis pas "ennuyé" avec ça. Une amplification est donc nécessaire et cette tâche est confiée à un AOP non représenté sur le schéma. Le filtrage quant à lui est indispensable pour éviter que le signal audio ne soit trop entâché de cochonneries sonores "métalliques". La bande passante est en effet limitée par la fréquence de traitement des échantillons sonores (10 kHz) et il convient de ne pas laisser passer des fréquences audio qui dépassent la moitié de cette fréquence de traitement (5 kHz). Le filtrage adopté est assez sommaire (la pente d'atténuation du filtre est plutôt douce) et insuffisant pour un résultat parfait. Mais dans l'ensemble, le message sonore parlé est tout-à-fait compréhensible et c'est bien le principal. 

Remarque : l'utilisation d'un compresseur/limiteur de dynamique même très simpliste (AOP+FET) est recommandé pour limiter les risques d'écrêtage et optimiser le rapport signal/bruit de l'ensemble émetteur/récepteur. Par exemple : préampli micro 020.

   
Filtrage et amplification BF

Un filtrage est également nécessaire en sortie BF, car si on ne fait rien, on a droit à un splendide petit sifflement dans les oreilles situé à la fréquence de 10 kHz (voir remarque). Et dans le cas présent, mieux vaut le filtrer assez énergiquement, même si ce dernier n'est pas audible en période de pause, quand aucun poste n'est en mode émission. Une solution très économique consiste à utiliser un haut-parleur "très bas de gamme" qui de façon naturelle atténue fortement les aigus...   

L'amplification BF en elle-même est confiée à un circuit intégré que j'ai utilisé de multiples fois et qui fonctionne très bien, le LM386 (voir par exemple l'article Ampli BF 003). Libre à vous d'adopter un autre type d'amplificateur BF, ce n'est pas ce qui manque sur le marché !

Remarque : il est probable que l'utilisateur âgé de plus de 90 ans soit moins gêné par le 10 kHz.

   
Régulation d'alimentation

Enfin un module simple dans cet horrible réalisation ! Un régulateur de tension intégré de type 7805 suffit en effet à fournir la tension de +5 V et l'énergie requise pour le PIC. Notez que l'amplificateur BF prend sa source d'alimentation avant la régulation de cette tension de +5 V.

   
Collision entre plusieurs postes placés en émission

Le risque d'avoir simultanément deux postes en émission (situation de collision) est très faible, puisqu'un poste placé en mode émission bloque quasi-instantanément tous les autres en mode réception. Le risque existe toutefois si deux interlocuteurs cherchent à passer en mode émission au même moment ou pour être plus précis dans un intervale de temps inférieur à 0,1 seconde.

Pour que ce type de situation ne provoque aucun dommage matériel (destruction des drivers de ligne) il faut prévoir une solution "anti-collision" logicielle ou matérielle. J'ai opté ici pour une solution 100% matérielle qui n'empêche pas la collision, mais qui garantit toutefois la totale sécurité du matériel.

   

Procédure de simulation

La simulation a été opérée en deux étapes, comme je l'avais fait pour la version 004 avec PIC 16F886 :

- première étape consistant à mettre un seul circuit en place et à vérifier le bon fonctionnement des routines de base.
- seconde étape consistant à mettre en place deux circuits identiques sur une même ligne "RS485" avec un des deux positionné en émission, comme le montre le schéma suivant.

interphone_004b_simul

Prototype

Je possède plusieurs circuits intégrés pour interfaçage RS485 (MAX485, MAX487, MAX3080), mais pour des questions de simplicité j'ai effectué mes tests avec des modules précâblés.

   
module_rs485_001a
   
Les enregistrements audio qui suivent permettent d'évaluer la "qualité" de la transmission audio. Une fréquence d'échantillonnage de 10 kHz et une quantification sur 8 bits ne répondent pas aux normes de haute fidélité, mais encore une fois, c'est de l'intercom. L'important est de comprendre ce que les interlocuteurs disent.
   
interphone_004b_graph_sample_001a
   
A l'émission :


A la réception :


Je n'ai pas enregistré en studio ni en cabine speak, mais avec le micro intégré d'un PC portable.
Ah bon, ça s'entend ?  :)

   

Logiciel du PIC

Pro - Non disponible.

Circuit imprimé

Non réalisé.

Historique

31/07/2022
- Mise à jour du logiciel pour démarrage plus rapide. Avec l'ancienne version, il fallait attendre 6 secondes avant que le système soit opérationnel (configuration d'horloge interne du PIC placée au mauvais endroit).
- Ajout enregistrements sonores pour comparaison messages audio au départ (Tx) et à l'arrivée (Rx).

16/10/2016
- Première mise à disposition.