dimanche 30 juin 2019

TSF et 32 bits : Condensateur variable

Pour ré-utiliser le condensateur variable (CV) de la TSF, une solution simple est de mesurer la fréquence d'un oscillateur ajusté par le CV.
Pour sa simplicité, j'ai choisi un oscillateur réalisé avec un trigger de Schmitt.

Cahier des charges.

Il ne s'agit pas de réaliser un capacimètre ni même un fréquencemètre.
Le but est d'obtenir une valeur stable dépendant de la position de l'indicateur de la TSF, avec une résolution suffisante pour pouvoir distinguer des positions proches de ~1 mm sur l'ensemble de la plage.
La mesure stable doit s'effectuer en un temps court (<1s) pour que le changement de station soit réactif.

Théorie.

Comme je suis radin économe aventureux, je me demande si je peux réaliser un oscillateur avec deux broches gpio du contrôleur.
L'idée est de programmer le gpio d'entrée pour générer une interruption à chaque changement d'état (both-edge) sur gpio-in et d'inverser gpio-out.

Naturellement ça ne fonctionnera que si on vérifie deux premiers points :

- Le code est-il assez rapide ?

Après une rapide recherche sur les maigres documentations de l'OrangePi, je pense que maintenir de façon logicielle (interruptions) un signal de plusieurs dizaines de Khz serait assez hasardeux sur un système linux classique. À la moindre interruption ratée, l'oscillateur va s'arrêter.

Je ne jette pas le OPi, mais je donne pour l'instant la priorité au Wrover.

- Un gpio en entrée peut-il se comporter en trigger de Schmitt ?

La doc de l'ESP32 indique les seuils L(ow) et H(igh) de gpio : 0,25 Vdd et 0,75 Vdd (où Vdd est la tension d'alimentation du circuit, soit 3,3V).
Avec une résistance ajustable et une ligne de code, j'ai constaté que les entrées ne sont PAS des Schmitt : Vers 0,4 Vdd on a une lecture aléatoire / instable de 0 ou 1.
Même avec 3 gpio et des résistances de réaction / contre-réaction je n'arrive pas à un fonctionnement stable.

Place au CD4093.

J'abandonne l'idée d'un oscillateur logiciel. On trouve des circuits comportant de 1 à 6 trigger de Schmitt inverseurs, comme le CD40106 ou le CD4093.
J'utilisais déjà le 4093 dans les années 80, ce circuit  coûte moins de 1€ et ça ne va pas beaucoup compliquer le montage.
Sur l'ESP on peut utiliser des gpio(s) comme compteurs d'impulsions. Avec un des timers je peux obtenir le compte sur une période donnée. C'est gagné ?


Premier essai.

De mon dernier passage à Loches j'ai rapporté un condensateur variable, j'avais ressorti un fer à souder pour y coller deux fils.
Il s'agit comme souvent d'un CV double (2 "cages" étaient nécessaires dans beaucoup de TSF).
J'ai eu la (mauvaise ?) idée de les relier en parallèle, parce qu'ainsi la plage de valeur est plus large et on peut espérer une plus grande résolution de mesure.

Quelques lignes de code et je compte les impulsions sur une période de 1 s. J'affiche la valeur échantillonnée sur le "serial monitor" du Mac.

La valeur "swing" un peu, sans un fréquencemètre  je ne sais pas si ce swing vient de l'oscillateur (le 4093 est alimenté en 3,3V, c'est un peu juste) ou de mon code.
En faisant une moyenne sur des mesures plus courtes (10 mesures de 50 ms par ex.) je devrais pouvoir avoir une valeur stable.

La relation position/fréquence n'est pas linéaire : La fréquence évolue lentement au début (condensateur fermé = forte valeur C = fréquence basse), puis de plus en plus rapidement quand on "ouvre".
C'est  normal car - la moitié - de ce condensateur double est à lames en demi-cercle plein (à droite sur la photo) : Un modèle "Variation Linéaire de la Capacité" (en apprendre plus ici).

Avec un condensateur VLC, la capacité est proportionnelle à la position.
Sur un oscillateur à trigger de Schmitt, la période est proportionnelle à la capacité.
Comme fréquence = 1/période, la fréquence varie suivant une courbe.

Mais comme l'autre moitié de ce condensateur est constituée de lames profilées (visibles en bas à gauche), j'ai surement déformé la courbe en reliant les deux condensateurs en // . On va vérifier ça lors des essais.

Linéariser.

Chaque web-radio sera mémorisée dans l'ESP en regard d'une fréquence de l'oscillateur (avec une tolérance sur une petite zone, on verra ça plus tard).
Si j'utilise directement la valeur mesurée (non linéaire), il sera difficile - d'un côté - de retrouver une "station" enregistrée car un tout petit déplacement du bouton produira un grand déplacement de valeur.
Si je compense avec une division importante, de l'autre côté le réglage deviendra trop "mou".

Donc je vais utiliser K/n (où n est le nombre d'impulsions comptées pendant une durée fixe - ma "pseudo fréquence" -, et K une constante), pour retrouver une valeur proportionnelle à la position de l'indicateur.

J'ai marqué le pignon d'entrainement du CV et relevé grossièrement la "fréquence" (courbe bleue) à 9 positions. À gauche le condensateur est fermé (C élevé -> f faible); Vers la droite on ouvre le condensateur, la fréquence augmente de plus en plus rapidement,


En orange, les valeurs prévues après linéarisation (calculées pour l'instant par Excel).
On va dire que c'est une ligne droite.

Tolérance...

Il faut des valeurs suffisamment "fines" (= une plage de valeurs large) pour pouvoir attribuer une station à un emplacement précis de l'aiguille.
Sur certains gros postes l'aiguille peut avoir une course de 40 cm, donc pour une précision de 1 mm il faudrait une plage d'au moins 400 valeurs discrètes.
Personne ne va mémoriser 400 web-radios sur une seule gamme, je peux donc ajouter une tolérance autour de la valeur mémorisée.
Par ex., si une station est mémorisée pour la valeur 100, elle sera sélectionnée pour la zone 99...101.
Sur notre "gros poste" il restera possible de régler une station en face d'une marque du cadran à 1 mm près, mais l'écart entre deux stations devra être au minimum de 3 mm.

...et œil magique ?

Le nec plus ultra serait d'afficher la précision de la position (la distance de l'aiguille par rapport à la station la plus proche) en réutilisant l'œil magique du poste. Ceci sera peut-être l'objet d'un prochain "POC".


À suivre :

Je passe de la rédaction de ce blog à l'écriture de 'C' pour l'ESP32.
Et puisque j'utilise maintenant un oscillateur externe, je vais également me pencher sur les possibilités de comptage d'impulsions et de timers avec le OrangePi.


samedi 29 juin 2019

TSF et 32 bits : Préambule.

Cela fait longtemps que je n'ai rien écrit (ni soudé), mais après l'installation d'un tableau électrique à Loches, j'ai eu envie de distractions "basse tension".

Même en l'absence d'atelier, je peux avancer sur un des sujets en cours : Redonner de la voix à de vieilles radios à lampes.
J'ai déjà abordé le sujet du dilemme entre restauration et transformation, ce ne sera pas le cas ici.

Aujourd'hui j'explore les options, avec toujours comme but de conserver au maximum le fonctionnement, l'esthétique et les composants d'origine :
  • marche/arrêt; volume;
  • graves/aigus;
  • gammes;
  • œil magique;
  • mais surtout : sélections des stations.
  • et pour un coût humain et matériel minimal.
L'AM étant en voie de disparition, je m'oriente vers une diffusion de web-radios, cela peut être confié à un pico-ordinateur genre Raspberry-Pi ou même à un micro-contrôleur comme l'ESP32.

Le Lego™ de l'électronicien.

Pour pouvoir avancer sans fer à souder ni oscilloscope (quoique... j'ai des amis et la chance, voir plus bas), j'ai acheté un petit ensemble "breadboard + quelques composants" ...


... ainsi qu'un "OrangePi" et un "Wrover" pour tester les deux plateformes.

OrangePi Zero.

OrangePi Zero
Le OrangePi est un ersatz chinois du pico-ordinateur RaspberryPi, plus performant (à modèles comparables) mais moins cher.
Le fonctionnement sous Linux permet l'utilisation des nombreux programmes déjà existants, mais il est plus difficile de faire de la "haute vitesse" sur les interfaces gpio (General Purpose Input/Output).
On verra prochainement pourquoi on va plutôt continuer l'expérimentation avec le Wrover.

ESP32 Wrover.

ESP32 Wrover

La carte "Wrover" comporte un ESP32 : Un micro-contrôleur, un genre de "super-arduino" en 32 bits, avec du wifi, du bluetooth et suffisamment de ressources pour faire de l'internet. Ici on est libre de piloter les interfaces "à fond", mais la programmation est plus ardue. Par ex., il n'y a pas de système de fichiers.

Astuce et grosse ficelle.

Tous les montages que j'ai vu sur internet utilisent des interfaces à base de boutons, claviers ou encodeurs, d'écran lcd ou de leds.
Pas de ça dans mes TSF ! Il est temps d'inventer.

Dans une radio ancienne, la sélection de station s'effectue grâce à un condensateur variable.

Condensateur variable
La rotation est souvent assurée par une ficelle qui entraine l'aiguille de l'indicateur via des galets, des enrouleurs, des ressorts de tension, etc.


Y substituer un autre dispositif (encodeur ou potentiomètre) serait non seulement dommage, mais une galère en terme de mécanique :

  • Un encodeur produit des impulsions (+1, +1...+ ou -1, -1...) dont le décompte doit être mémorisé. Si on tourne le bouton alors que l'appareil est hors-tension, on va perdre la position absolue de l'aiguille et décaler toutes les stations.
  • Un potentiomètre peut fournir une tension absolue - mesurée par un gpio configuré en entrée analogique -. Ça devrait faire l'affaire, mais il faudrait s'assurer que le déplacement de bout-en-bout de l'aiguille couvre une large plage du potentiomètre (10 tours) pour avoir une bonne exploitation.
    Je ne jette pas cette idée, mais le challenge reste pour l'instant d'utiliser le CV.

Donc mon premier "POC" (proof of concept = démonstration de concept) sera d'essayer d'exploiter un condensateur variable - typiquement analogique - avec un micro-contrôleur - plutôt numérique -.

Des amis et de la chance.

Alors que je pensais commencer mes bricolages sans oscilloscope, mon ami Ken me téléphone :

- Tu serais intéressé par la récupération d'un Tektronix que mon entreprise met à la retraite(*) ?

- Laisse moi réfléchir....
Comme ça, c'est un Tektronix 2220 en parfait état ? Avec son capot, sa poche contenant la doc et 3 sondes dans leur sachets d'origine avec tous les accessoires ?
C'est bien parce qu'il va me servir immédiatement que je veux bien t'en débarrasser à titre gratuit, mais tu me l'apportes à domicile.

Tektronix 2220 : 30 ans passés.
C'est vrai ça, je suis trop sympa.
Merci Ken.



(*) Salauds de jeunes scopes en plastique avec leurs lcd couleur, qui chassent les vieux tubes !
C'est gros comme un grille-pain, ça frime avec 4 voies, 50 mesures, des tonnes de mémoire, de l'analyse numérique, ça remplace 6 ou 7 appareils volumineux, ça ... ça ...

Dis, Ken, t'aurais pas aussi un MSO5000 qui traîne ? Je pourrais faire un effort pour t'en débarrasser.