
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 troune sur la face arrière du pupitre Yaesu. 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 à gauche se fait par la mise à GND de la broche 1 et de la broche 2 pour la rotation à droite. 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.
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 comprise entre 0 et 5 V est disponible sur la broche 4 du connecteur « EXT ». 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°.
Afin de rendre cette tension exploitable par le Raspberry Pi, un convertisseur analogique-numérique (ADC) MCP3202 a été retenu. Ses caractéristiques sont : Résolution : 12 bits, 2 entrées analogiques, interface de communication SPI. Sur le MCP3202, la tension de référence correspond à la tension d’alimentation Vdd. Une alimentation en 5 V via le connecteur GPIO du Raspberry Pi aurait été envisageable mais cette solution n’a pas été retenue pour les raisons suivantes :
- Le 5 V du Raspberry Pi n’est pas régulé par la carte elle-même.
- Sa valeur dépend directement de la qualité du bloc d’alimentation externe.
- Des variations peuvent apparaître en fonction de la charge système (CPU et périphériques).
Donc pour de garantir 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.
La tension issue du rotor pouvant atteindre une tension proche de 5 V, un diviseur de tension a été mis en place afin d’adapter le signal à la plage 0–3,3 V compatible avec l’ADC alimenté en 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. 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 analogique 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 la plage 0–5 V. 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 résistance 3.3kΩ/4.7uF et 3.3kΩ/1uF. N’ayant que des capas chimiques avec ces valeurs, 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 …



