Encodeur CTCSS Arduino / ON7NU / Mob

Pour ma part, opérer des anciens tranceivers est un réel plaisir et je ne suis probablement pas le seul. Le problème, c'est que ces tranceivers ne génèrent pas de signal CTCSS,  ce qui empêche de trafiquer sur la plupart des relais.

Objectif: simplicité, peu de composant périphériques, obtenir un choix de fréquences CTSS, et faible couts.

Actuellement, il est possible de se procurer un Arduino Uno ou un Nano, pour quelques Euros seulement.

Pour générer du CTCSS, Il existe à ma connaissance trois solutions:

 

- Génrer un signal carré sur la fréquence CTCSS désirée et ensuite le filtrer à l'aide d'un filtre passe bas pour obtenir une sinusoïde
  (enlever l'Harmonique 2,3 etc...).

  L'inconvénient réside dans le fait que idéalement la fréquence de coupure du filtre doit être ajustée pour chaque fréquence CTCSS.

 - Utiliser un DDS (Direct Digital Synthétiseur). Ceci implique de mettre en œuvre soit un circuit DDS spécialisé, soit un CPU + convertisseur digital / analogique  (D.A.).
   Ceci reste plus couteux et plus compliqué.

- La technique du Pulse With Modulation (PWM).
  Le principe de cette technique est de faire varier le rapport cyclique ce qui revient à modifier la largeur des impulsions. La périodicité est constante et a
  pour valeur 62.5KHz = 16µs.

Dans la pratique, une impulsion de courte durée provoque une tension efficace faible. En revanche, une impulsion plus longue engendre une tension efficace plus élevée.
Les impulsions à elles seules ne peuvent générer une sinusoïde puisque l’amplitude est constante.
Par contre, si ces impulsions passent via un circuit intégrateur de type RC série, une moyenne va en résulter et ce sera une sinusoïde à condition qu'un algorithme
  correct soit appliqué.

C'est cette solution qui est retenue.

Moyens mis en œuvre:

- Un Arduino Uno ou nano, un intégrateur R.C., un dip switch, un atténuateur, un condensateur de liaison.

                                                             arduino

Desription du montage:

 La sortie N°6 (PWM) de l'Arduino est la seule sortie utilisée. Les impulsions qui en sortent sont la résultante d'un tableau qui est gelé dans la mémoire de l'Arduino. Ce tableau de data comporte les 256 valeurs hexadécimal d'une sinusoïde.
Voici les 4 premières valeurs du tableau:  0x80,0x83,0x86,0x89

 L'introduction de la fréquence CTCSS se fait à l'aide du DIP Switch à 8 canaux.
Un seul switch à la fois doit être fermé sur ON, ce qui permet de sélectionner 8 fréquences au choix.
Au démarrage, l'Arduino, va lire l'état des 8 switchs via les entrées 2,3,8,9,10,11,12,13.
Après lecture de l'état des switchs, la sortie PWM est active, mais à partir de cet instant, il n'est plus possible de modifier la fréquence. Un reboot est   nécessaire soit par un appui sur la touche reset ou bien couper l'alimentation.

 La sortie N°6 sortie attaque le circuit intégrateur représenté par la résistance de 1K et le condensateur de 680nF
La sinusoide est donc présente aux bornes de ce condensateur, mais les impulsions ont un niveau logique de +5V. La tension sinusoïdale pointe à pointe est également proche de 5V et avec une  tension continue résiduelle de  U/2, soit +2.5V.

 Le condensateur de liaison de 100µF permet d'éliminer cette composante DC.
A la sortie du 100µF nous avons enfin une tension alternative sinusoïdale pure, mais son amplitude reste à +5V pointe à pointe (PtP).
Pour attaquer le tranceiver, Il faut donc ramener cette valeur autour de quelques mV.
C'est le rôle de la résistance de 33K et du Trim Pot de 10K.

 Avant d'attaquer l'entrée micro, il faut placer une résistance de 4,7K.
 Cette résistance permet de ne pas atténuer le signal en provenance du micro dans le cas ou le curseur du Trim Pot serait proche de la masse.

Procédure de réglage:

 Une attaque via l'entrée micro, n'et pas la méthode idéale.
Le mieux serait d'attaquer directement le modulateur.
Ceci permet d'injecter derrière les filtres et le préampli audio. Malheureusement, ceci nécéssite le démontage du tranceiver et impose aussi de connaitre l'endroit exact pour l'injection.
J'ai personnellement testé avec succès l'injection micro du CTCSS sur trois tranceivers.

Attention après chaque changement sur le Dip Switch, toujours reseter pour lancer une nouvelle sctrutaion de celeui-ci.

 Donc:

    -      Choisir sa fréquence de CTCSS à l'aide du DIP Switch puis rebooter.
            J'ai réalisé un tableau qui comporte 8 fréquences CTCSS.  Il est toujours possible d'assigner des autres fréquences aux dip switch.

    -       Placer le curseur du Trim Pot au minimum.

    -       Brancher la sortie de l'encodeur sur l'entrée micro.

    -       Envoyer une porteuse pour activer le relais. Mais celui-ci ne devrait pas s'ouvrir.

    -       Augmenter progressivement le niveau d'attaque CTCSS par essais successifs.

    -       Quant le relais s'ouvre, faire un essais avec un niveau légèrement inféreur pour éviter la saturation de l'étage d'entrée micro, mais aussi pour éviter
              le cliping au niveau du limiteur du modulateur FM.

       Il est évident qu'il faut annoncer son indicatif durant ce test hi.

 

Dans le code, voici la partie qui associe la fréquence au switch. Il vous est possible  la modifier:

Dans le code, voici la partie qui associe la fréquence au switch. Il vous est possible  la modifier:

      int Lire1 = digitalRead (1);  // *** Lire Dip Switch 1 sur entrée 1 ***
      if (Lire1 == LOW)
       {
        long Frequence = _67Hz;  // 67Hz  pour 67Hz il faur écrire _67Hz Modifez cette ligne pour changer la fréquence.
        return Frequence;
       }
      //*************************************
      int Lire2 = digitalRead (2);  // *** Lire Dip Switch 2 sur entrée 2 ***
      if (Lire2 == LOW)
       {
        long Frequence = _74_4Hz;  //74.4Hz  pour définir 74.4Hz il faut écrire:  _74_4Hz
        return Frequence.

Dans le code, voici la partie qui associe la fréquence au switch. Il vous est possible  la modifier:

 

      int Lire1 = digitalRead (1);  // *** Lire Dip Switch 1 sur entrée 1 ***
      if (Lire1 == LOW)
       {
        long Frequence = _67Hz;  // 67Hz  pour 67Hz il faur écrire _67Hz Modifez cette ligne pour changer la fréquence.
        return Frequence;
       }
      //*************************************
      int Lire2 = digitalRead (2);  // *** Lire Dip Switch 2 sur entrée 2 ***
      if (Lire2 == LOW)
       {
        long Frequence = _74_4Hz;  //74.4Hz  pour définir 74.4Hz il faut écrire:  _74_4Hz
        return Frequence.

 

 

 De cette manière vous pouvez attribuer n'imprte quel fréquence CTCSS à n'imprte quel switch (entre 67Hz et 151.4Hz).

       Pour des raisons de division, j'ai constaté qu'une règle de 3 permet de s'approcher de la fréquence désirée, mais il y a parfois un certain % d'erreur.
       Dans le programme (sketch), j'ai inclus toutes les fréquences CTCSS  de 67Hz à 151.4Hz., vérifié et fine tuné au fréquencemètre.

      Dans le code, voici un extrait concernant l'attache de la génération PWM / fréquence:  

#define _67Hz 17242
#define _71_9Hz 18498

 Tableau :

  

     Switch     Satus     Freq.
    (Hz)
        1     ON     67
        2     ON     74,4
        3     ON     79,7
        4     ON     88,5
        5     ON     107,2
        6     ON     131,8
        7     ON     71,9
        8     ON     77

 

Mesures :

        Précision en fréquence:                         

  fequ    

      Taux de Distorsion (THD+Noise)

  thd

                            Oscilloscope :

 oscillo

 

Téléchargement

du fichier source pour Arduino Uno/Nano

Télécharger   => CTCSS.ino

Voir le fichier =>  CTCSS.txt

 

home