Modélisme, Électronique

Software MPX2PPM

Firmware 3.30 Royal Pro et signal PPM
jeudi 19 novembre 2009 par YannickF

Introduction :

Depuis que Multiplex a sorti son système 2.4 GHz (fin septembre 2009), les radios Royal Pro 7, 9, 12 et 16 avec un firmware 3.30 (et +) ne fournissent plus de signal PPM. 
Enfin presque, le seul signal PPM est disponible sur la prise écolage, en pontant les broches 3 et 5, mais cela interdit de faire de la double commande en tant que professeur.
Cela répond à une logique commerciale implacable : rendre les clients dépendant de leur matériel ! Dommage, car cette mise à jour apporte des mémoires de modèles supplémentaire, et le mode 16 canaux pour les RoyalPro 12 (qui affichent un logo RoyalPro 16 au démarrage)

Maintenant, la radio ne communique plus avec le module que sur une liaison UART (un port série en fait), alors qu’avec les firmwares précédents, on pouvait encore obtenir un signal PPM (nécessaire pour les modules HFM à quartz qui, si vous avez bien suivi,sont maintenant incompatibles avec cette mise à jour ! C’est d’ailleurs indiqué dans une documentation Multiplex)

Grace à l’aide de Markus Stoeckli, on a réussi à analyser cette communication et à en comprendre les éléments importants. Voir son site web pour l’analyse des trames Multiplex.

Je me suis donc lancé dans la réalisation d’un circuit qui se ferait passer pour un module Multiplex (35, 40 MHz ou M-LINK), et qui traiterait les données afin de reconstruire un signal PPM dans un premier temps. Ceci permettra à tous les utilisateurs de module 2.4GHz Spektrum, Assan, Corona ou autre de pouvoir continuer à les utiliser dans la RoyalPro.

Dans un 2e temps, comme tous ces modules sont certainement basé eux aussi sur une communication série, il sera très facile de convertir le protocole Multiplex en un autre protocole.
En l’occurence, ne connaissant que le protocole O24RCP, c’est celui-ci que j’utiliserai.

Dans un 3e temps, le module M-LINK permettant d’afficher des mesures sur l’écran de la RoyalPro, il sera possible de faire de même avec le module O24RCP.


Infos récoltées :
- au départ, la communication est à 19200 baud
- la radio envoie "v"
- le module répond en s’identifiant (nom, n° de version)
- la radio envoie " ?" pour obtenir les infos de fréquence des modules 35 - 40 ou 72 MHz (pas de " ?" pour le M-LINK)
- le module répond par une chaine indiquant la gamme de fréquence, le numero de canal et la fréquence utilisée
- si on tourne la molette pour changer de fréquence, la radio envoie "+" ou "-"
- et le module répond par la fameuse chaine avec le numero de canal et la fréquence
- le module envoie 3 octets dont la signification n’est pas clair (canal libre d’après le scanner ?) suivie de 0x0D 0x0A (retour à la ligne, retour chariot.

- la radio envoie "b" pour déclencher la procédure de binding ou "a" si tout est prêt (binding au choix de l’utilisateur au démarrage)
- le débit passe à 115200 baud
- le module répond 0x00 0xFF 0x00 0x00 0x00 dès qu’il est prêt, ou 0x20 0xFF 0x00 0x00 0x00 si le binding est en cours
- la radio envoie les données au format suivant :
— un octet 0x80 ou contenant le nombre de voies transmises
— 36 (ou 24) paires d’octet contentant les temps de chaque voies sur 12 bits signés (infos à préciser)
- le module MLINK (en fait le récepteur dans le modèle réduit) renvoie 5 octets après chaque paquets de données... Ces 5 octets contiennent les information de télémétrie, binding, portée. (voir le site de Markus Stoeckli)
- avec un module MLINK, le premier octet vaut 0x80 dans le mode "Fast Response", 0x82 dans le mode normal, et 0x86 pour le réglage du Fail-Safe

En italique, ça ne concerne que les modules à synthèse de fréquences 35 ou 40 MHz)


Avancement :
- réalisation d’un faux module 35-40 MHz ou MLINK : la radio n’y voit que du feu. Mais pour l’instant, avec un quartz à 8 MHz, il est impossible de récupérer les données de façon fiable. Il faut un quartz 11.0592 ou 7.3728 MHz pour pouvoir sélectionner le débit de 115200. (Le module M-LINK de Multiplex est équipé d’un ATMega324P à 11.0592 MHz)
- récupération d’un vieux quartz 11.0592 MHz... mais il ne doit pas être en bon état car le Mega88 ne fait alors plus rien.... reste à attendre la livraison d’un quartz neuf !

Mise à jour du 18 octobre 2009 :

J’ai maintenant un quartz de 7.3728 MHz, et le projet avance donc un peu.
J’ai actuellement un montage qui :
- fait croire à la radio qu’un module HF (35 ou 40 MHz) est connecté
- se synchronise pour récupérer les données
- converti les données en temps de voies PPM dès que la transmission est finie.

Il ne reste plus qu’à élaborer un algorithme pour sortir une trame PPM et ce sera fini pour cette première version.

La 2e version simulera la présence d’un module MLINK, enverra les données au format 024RCP (donc pas de conversions multiples Données MPX vers PPM puis PPM vers données O24RCP), et utilisera les fonctions de télémétrie qui sont dans le firmware 3.30 des RoyalPro.

J’ai également effectué quelques mesures :

Valeurs radio -110% -100% 0% +100% +110%
temps PPM n.m 950µs 1500µs 2050µs n.m
data HFMS -1937 -1761 0 1760 1936
data O24RCP 950 1500 2050

La conversion des données transmises par la radio en un temps PPM implique une petite erreur d’arrondi. En effet, par ex, à -100%, la radio envoie -1761 et il faut convertir cette valeur en 875, qui est le temps de l’impulsion de 950 µs vu par le timer du microcontroleur qui est configuré à 921.6 KHz (Quartz / 8)

875 / 921.6 KHz = 950 µs

La formule est donc : (1382 est le temps du neutre vu par le µC)

Tps PPM = 1382 + valeurMPX * 0,28798636750923

Avec la contrainte d’être limité à des nombres signés sur 16 bit, j’utilise une valeur arrondie de 0,28798636750923 c’est à dire 16/56 !
On ne peut pas multiplier par plus de 16 sans prendre le risque de dépasser la limite d’un nombre signé sur 16 bits.

Mise à jour du 21 octobre.

L’utilisation d’un ATtiny2313 n’est pas vraiment possible : il n’a que 128 octet de RAM, et mon programme en nécessite 127 (après optimisation légère)
Il doit y avoir moyen d’optimiser encore plus, mais en cas de mise à jour du firmware Multiplex, le Tiny2313 risque de ne plus être capable de suivre... Donc on reste sur un Mega88 sur lequel j’ai développé le prototype.

Mise à jour du 22 octobre

En pièce jointe : le schéma du montage utilisé, ainsi qu’un circuit imprimé simple face réalisé rapidement (on peut donc faire bien mieux je pense).
J’ai ajouté un cavalier pour choisir entre trame PPM positive ou negative et 3 autres cavaliers pour choisir le nombre de voies à utiliser dans la trame PPM en mode "émulation MLINK".
En effet, dans ce cas, la radio transmet en permanence les données de 12 voies (même si certaines sont à 0). Il peut être utile de se limiter à 7, 9 ou 12 voies puisque je crois savoir que certains modules 2.4 GHz n’acceptent les signaux PPM que s’ils comportent 9voies.

ATTENTION, l’utilisation de ces cavaliers provoque l’émulation MLINK. Si aucun de ces 3 cavaliers n’est utilisé, le circuit émule un module 40 MHz.

Mon code source n’est pas encore adapté à la présence de ces cavaliers.....

Mise à jour du 24 octobre : utilisation des cavaliers

absent : le cavalier n’est pas en place : cavalier ouvert : 0

présent : le cavalier est en place : cavalier fermé : 1

- POS absent : trame PPM négative
- POS présent : trame PPM positive

Version 1.00 à 1.05 :

EMULCEMULBEMULAtrameémulation
0 0 0 PPM6 à PPM12 automatique module 40 MHz
0 0 1 PPM7 module MLINK
0 1 0 PPM8 module MLINK
0 1 1 PPM9 module MLINK
1 0 0 PPM10 module MLINK
1 0 1 PPM11 module MLINK
1 1 0 PPM12 module MLINK
1 1 1 PPM12 module MLINK

Depuis la version 1.06, le tableau est un peu différent :

EMULCEMULBEMULAtrameémulation
0 0 0 PPM6 à PPM12 automatique module 40 MHz
0 0 1 PPM6 module MLINK
0 1 0 PPM7 module MLINK
0 1 1 PPM8 module MLINK
1 0 0 PPM9 module MLINK
1 0 1 PPM10 module MLINK
1 1 0 PPM11 module MLINK
1 1 1 PPM12 module MLINK

En pièces jointes, vous trouverez 2 fichiers ZIP avec de quoi faire des circuits imprimés (V1.0). Il y a une version en composant classique, et une autre en composant CMS.
J’utilise la version gratuite de Eagle.

Il me reste un dernier test à faire avant de publier le code.

Mise à jour du 25 octobre

Voilà, le code source est en ligne... tout fonctionne !

Mise à jour n°2 du 25 octobre

Mise à jour du code en V1.01

Ajout de la gestion du mode "Range" (test de Portée).
Comme le "Binding", il s’agit juste d’une émulation passive... le module répond mais ne fait strictement rien de plus !

La version 1.04 du PCB est équipée d’un cavalier supplémentaire. Il sert à activer le bootloader pour les mises à jour éventuelles.

Mise à jour du 30 octobre 2009

Mise à jour du code en V1.05
- Correction d’un bug lorsque la radio sélectionne le mode MPX au lieu du mode UNI pour les servos (lorsqu’on choisit plus de 10 voies en émulation 35 MHz)
- le circuit émule maintenant un module 35 MHz (ou MLINK) avec scanner. Cela assure un démarrage sans problème. En effet, en émulant un module 40 MHz sans scanner, la radio veut modifier la fréquence et ça bloque tout !
- en émulation 35 MHz, affichage du canal 2G4 et de la fréquence 02.400 MHz
- test du bootloader : ça marche ! (AVR Universal BootLoader)
— il faut mettre le cavalier en place et on a alors 20s pour transmettre le fichier .hex MPX2PPM via un port COM à 19200 baud. (Utilisez le fichier AVRUBD.exe pour le transfert)

Mise à jour du 07 novembre 2009

Mise à jour du code en V1.06
- Correction du nombre de voies dans la trame PPM en mode MLINK. On peut maintenant choisir de 6 à 12 voies (de 7 à 12 auparavant)

Mise à jour du 18 novembre 2009

- correction d’une erreur dans le bootloader (démarrage intempestif du bootloader, même en l’absence du cavalier)
- ajout d’une petite temporisation lorsque le bootloader lit l’état du cavalier BLDR (permet une lecture plus fiable)

Mise à jour du code en V1.07
- MPX2PPM ne fonctionnait plus avec le bootloader car ce dernier laissait des registres modifiés. Il fallait donc remettre les registres à zéro au début.

Mise à jour du 22 novembre 2009

Fuse bits :
- LOW : 0xEC
- HIGH : 0xDF
- EXTENDED : 0xF8

soit CKDIV8=no, BOOTRST=yes, external crystal 3-8MHz

Protection :
SPM & LPS prohibited for boot section


titre documents joints

Code source bootloader

22 novembre 2009
info document : Zip
9.3 ko

Une ligne de code en plus par rapport au code source original AVRUDB (pour activer les "pull-up")


Bootloader MPX2PPM

18 novembre 2009
info document : Zip
345.2 ko

V1.07 Code source & fichier .hex

18 novembre 2009
info document : Zip
7.2 ko

V1.06 Code source & fichier .hex

7 novembre 2009
info document : Zip
6.9 ko

Accueil | Contact | Plan du site | | Statistiques du site | Visiteurs : 3525 / 87499

Suivre la vie du site fr  Suivre la vie du site MPX2PPM   ?

Site réalisé avec SPIP 3.0.13 + AHUNTSIC

Creative Commons License