RoTorD. 1ere partie : Prototype d’interface

A l’origine du projet, le but n’était pas de construire un pupitre, mais juste une interface similaire à la GS-232B (qui coute presque plus cher que le rotor lui meme …). Comme j’ai de plus en plus de mal à imaginer des trucs qui ne sont pas connectable d’une manière ou une autre en reseau IP, j’etais parti sur un ESP32 puis je me suis dit qu’un truc sur un petit écran tactile, cela pouvait être rigolo et faire bien frimeur dans la station😎. Finalement, j’ai décidé de faire d’une pierre 2 coups. Un pupitre doté d’une interface graphique tactile qui héberge une emulation GS-232B.

Voila un projet parfait pour recycler un des raspberry pi qui traine dans mon bazar. Pour l’occasion ce sera un PI4 2Go et un écran officiel 7″ de première génération (800×480). J’ai appelé le projet RoTorD tout simplement parce que c’est moi qui l’ai fait et que dans rotord il y a R_T__D tout comme dans F1RTD 😁.

Le connecteur ‘EXT’ :

Tout comme l’interface GS-232B, RoTorD utilise le connecteur ‘EXT’ qui se trouve sur la face arrière du pupitre Yaesu G-1000DXC. C’est un connecteur femelle mini-din 6 broches cablé comme suit :

  • 1 : Rotation à droite (cw)
  • 2 : Rotation à gauche (cww)
  • 3 : Vitesse de rotation
  • 4 : Orientation du rotor
  • 5 : GND
  • 6 : NC

Fondamentalement, voilà à quoi servent ces broches : La rotation à droite se fait par la mise à GND de la broche 1 et de la broche 2 pour la rotation à gauche. La position du rotor est lue sur la broche 3 qui retourne une tension comprise entre 0 et 5v pour un angle de 0 à 450°. Pour la vitesse, on applique une tension comprise entre 0 et 5v sur la broche 4 pour une vitesse qui va du mini. au maxi. (en fait cela modifie la tension d’allimentation du moteur qui va de ~11 à 24v)

Pour le raccordement, j’avais envisagé de récupérer le cordon d’un vieux clavier ou souries ps/2, mais pas de bol, tous les fils ne sont pas câblés 🙁

L’interface

Il faut donc construire une petite interface pour raccorder tout ça sur le port gpio du Raspberry Pi. Voila la solution que j’ai adoptée pour le prototype en utilisant surtout ce que j’avais dans mes fonds de tiroir.

Rotation gauche/droite.

La commande du sens de rotation est réalisée au moyen d’optocoupleurs 4N35 . Chaque optocoupleur est piloté par une broche GPIO du Raspberry Pi configurée en sortie. La LED interne de l’optocoupleur est alimenté via une résistance de 470 Ω. Cette valeur limite le courant à environ 5 mA, ce qui est suffisant pour assurer la saturation du phototransistor de sortie dans les conditions d’utilisation prévues (charge faible côté sortie). L’utilisation de simples transistors NPN montés en commutation aurait également permis de remplir cette fonction mais j’ai mis la main sur les optos en premier ….

Acquisition de la position rotor.

Une tension continue comprise entre 0 et 5 V est disponible sur la broche 4 du connecteur. Cette tension varie en fonction de la position angulaire du rotor. Les valeurs exactes peuvent différer selon le modèle de rotor utilisé. À titre de mesure sur mon G-1000DXC, la tension relevée est de 0,045 V à 0° et 4,480 V à 450°. Pour rendre cette tension ‘digérable’ par le Raspberry Pi, j’ai utilisé un ADC MCP3202 (Résolution : 12 bits, 2 entrées analogiques, interface de communication SPI).

Sur le MCP3202, c’est Vdd qui fait office de tension de référence . Une alimentation en 5 V via le connecteur GPIO du Raspberry Pi aurait été envisageable mais cette tension n’est pas régulée par la carte elle-même. Sa valeur dépend directement de la qualité du bloc d’alimentation externe et des variations peuvent apparaître en fonction de la charge système (CPU et périphériques). Donc pour de assurer une référence la plus stable possible et cohérente avec les niveaux logiques du Raspberry Pi, c’est l’alimentation en 3,3 V prise sur le port GPIO qui a été retenue. Vue que la tension issue du rotor peut atteindre une valeur proche de 5 V, un diviseur de tension a été mis en amont de l’ADC afin d’adapter le signal à sa plage d’entrée de 0 à 3,3 V. Le diviseur présente un rapport de ~0,66 et est constitué d’une résistance de 20 kΩ et une de 10 kΩ.

Pour isoler l’impédance de la source et améliorer la stabilité de la mesure, un AOP rail-to-rail MCP602 est monté en suiveur tout de suite derrière le diviseur. Cette configuration permet d’éviter toute influence de l’ADC sur le diviseur et assure une faible impédance de sortie vers l’entrée analogique. Un filtre passe-bas RC est ajouté entre la sortie de l’AOP et l’entrée de l’ADC. Le filtre est composé d’une résistance en série de 1KΩ et d’une capa de 100nF vers la masse. Il permet notamment de limiter le bruit haute fréquence et améliore grandement la stabilité de la conversion. La seconde entrée de l’ADC est mise a la masse pour le prototype. Elle pourra éventuellement servir à récupérer la tension de ‘vitesse’ afin d’en disposer informatiquement.

L’ADC étant alimenté en 3,3 V, les niveaux logiques sont compatibles avec ceux du Raspberry Pi. Le raccordement des lignes SPI (MOSI, MISO, SCLK, CS) peut donc être réalisé sans adaptation de niveau supplémentaire.

Vitesse de rotation.

Le contrôle de la vitesse de rotation s’effectue par l’application d’une tension continue comprise entre 0 et 5 V sur la broche 3 du connecteur. Le Raspberry Pi ne disposant pas de sortie analogique native, la tension de commande est générée à partir d’un signal PWM . Ce signal est ensuite filtré afin d’obtenir une tension continue proportionnelle au rapport cyclique, puis amplifié pour atteindre une tension proche de 5V pour un rapport cyclique de 100%. Un filtre passe-bas RC d’ordre 2 a été mis en place afin de lisser le signal PWM avant l’amplification. Le filtrage est constitué de deux cellules RC successives 3.3kΩ/47uF et 3.3kΩ/1uF. N’ayant que des capas chimiques avec ces valeurs dans mes tiroirs, c’est ce que j’ai utilisé pour le proto. Pour l’amplification, j’ai profité de l’AOP resté dispo sur le MCP602 mais cette fois ci monté en ampli non inverseur avec un gain de ~1.5 avec une paire de résistance 10kΩ, 4.7kΩ.

Voila, le prototype fonctionne et la programmation a déjà bien avancé. La précision est plutôt très bonne et la subtilité du code me permet d’ajouter plein d’options que je n’avais pas prévu au départ. Tout cela fera l’objet d’une seconde partie …

image_print
Ce contenu a été publié dans Bricolouillage. Vous pouvez le mettre en favoris avec ce permalien.