ENSEMBLE MODULES CODEUR/DECODEUR BURC
I. Introduction
BURC (prononcer Beurk!) est un Boîtier Universel RC pour les francophones et une Universal RC Box pour les anglophones.
L'ensemble BURC permet d'ajouter très facilement à un modèle réduit des animations pilotables depuis presque tous les ensembles RC.
L'ensemble BURC se compose de:
Il compatible avec les anciens ensembles RC AM/FM 27MHz, 41MHz et 72MHz ainsi qu'avec les ensembles RC récents en 2.4GHz.
Le codeur BURC ''Basic'' se connecte tout simplement sur la prise écolage de l'émetteur: il n'y a aucune modification interne à effectuer.
Pour réaliser le codeur BURC ''Basic'', un simple Arduino Nano V3 suffit: il n'y a que très peu de composants à ajouter grâce aux résistances internes de tirage au + (pull-up)! Comme tous les contacts ont GND en commun, les contacts
C1 à C16 peuvent être:
Note:
Le lien de communication entre le module codeur et le
décodeur BURC s'appuie sur le
système RCUL développé par
l'auteur: Lien Universel
RC.
Le codeur BURC étant le plus universel possible, son interface USB donne accès à toutes les commandes de paramétrage afin de l'adapter à l'émetteur utilisé.
Une fois connecté à un terminal série réglé à 115 200 bauds sur un PC (via le cordon USB), la commande AIDE? donne une bonne idée de ce qui est paramétrable:
LANG=FR/UK
Definit le langage courant de l'Interface Homme Machine
LIGNE.TERM=CRLF/CR
Definit le terminateur de ligne (Depend du Terminal)
ECOLAGE.MODE=CPPM_OUT+CPPM_IN/CPPM_OUT/SBUS_OUT;FUTABA[_INV] Definit
le mode d'ecolage de l'emetteur
CPPM.MODU=NEG/POS
Definit la modulation CPPM
CPPM.ENTETE=xxx
Definit l'entete CPPM (xxx en us)
CPPM.VOIE.NB=xx
Definit le nombre de voie du train CPPM (xx de 1 a 8)
RCULx.MESSAGE=C1-C8/C9-C16/C1-C16/ANGLE+ANA[_INV]/ANGLE@0xXX Definit
le contenu a l'addresse I2C 0xXX du message RCUL
CPPM.PERIODE=xxxxx
Definit la periode CPPM (xxxxx en us)
SBUS.VITESSE=NORMALE/RAPIDE
Definit la vitesse SBUS (NORMALE=14ms, RAPIDE=7ms)
RCUL.REPET=x
Definit le nombre de repetition (x de 0 a 3)
RCULx.VOIE=y
Definit la voie y (y de 1 a 12) de l'instance RCUL x (x de 1 a 6)
RCULx.TEST=OFF/ON
Definit le mode de test de balayage de l'instance RCUL x (x de 1 a 6)
RX.MODE=OFF/RCULx@PWM/RCULx@CPPMx
Definit le mode RX a OFF, PWM ou CPPMx (Entree D8) (x est le numero de
voie)
RX.DBG=NiveauDebug
Definit le niveau de debug en RX (Entree D8) (Niveau Msg:
NiveauDebug=1, Niveau quartet: NiveauDebug=2)
CONF?
Renvoie la configuration complete
nom_commande?
Renvoie la valeur courante de la commande "nom_commande" (Ex:
ECOLAGE.MODE?)
Le principe dépend de l'émetteur, mais reste similaire: injecter un train (C)PPM ou une trame SBUS dans l'entrée écolage de l'émetteur.
1) Sur les anciens émetteurs RC qui disposent d'une
sortie (C)PPM ET d'une entrée (C)PPM
Le principe est de récupérer le train (C)PPM de l'émetteur (sur la broche (C)PPM Out du connecteur d'écolage), de modifier ce train (C)PPM afin de coder la position des 16 contacts sur une voie existante (ou additionnelle) et de réinjecter ce nouveau train (C)PPM ainsi modifié dans l'émetteur (broche (C)PPM In du connecteur d'écolage). Les voies non modifiées étant transférées telles quelles.
Exemple de configuration du codeur BURC:
LANG=FR
ECOLAGE.MODE=CPPM_OUT+CPPM_IN
RCUL.REPET=0
RCUL1.VOIE=6
RCUL1.MESSAGE=C1-C16@0x00
Cela signifie que le codeur BURC récupère le train (C)PPM sur la broche (C)PPM Out de la prise écolage, code la position des 16 contacts dans la voie N°6 et réinjecte ce train (C)PPM sur la broche (C)PPM In de la prisé écolage.
Comme les anciens émetteurs fonctionnent la plupart du temps en (C)PPM, aucune répétition de message n'est nécessaire (RCUL.REPET=0).
Le message transporté par l'instance RCUL1 contient l'état
des 16 contacts natifs de l'Arduino Nano (@0x00 = Natif de la carte
Arduino Nano)
Note: Si l'émetteur ne génère que 5 voies dans son train (C)PPM et que l'on demande à passer la position des 16 contacts dans la voie 6, une 6e voie sera automatiquement ajoutée au train (C)PPM qui est injecté dans l'entrée écolage.
Une fois l'émetteur démarré, il est possible de connaître les caractéristiques du train (C)PPM reçu et du train (C)PPM réinjecté:
CPPM.INITIAL?
Initial
CPPM characteristics:
============================
-Modulation = NEG
-Channel Nb = 5
-Header (us) = 415
-Period (us) = 17982
Initial CPPM frame:
==================
-- ----------
----//---- ----------
-------------------
| | CH1 |
| |
| CH5 |
| Synchro
| |
---
---
---
---
---
<--->
Header
<------------------------------------------------------------------>
Period
CPPM.FINAL?
Final
CPPM characteristics:
==========================
-Modulation = NEG
-Channel Nb = 6
-Header (us) = 415
-Period (us) = 17982
-Tx Period (ms)= 126 (RCUL1 message -> CH6)
Final CPPM frame:
================
-- ----------
----//----
---------- -------------------
| | CH1
|
|
| | CH6 |
|
Synchro | |
---
---
---
---
---
<--->
Header
<------------------------------------------------------------------>
Period
Pour que l'émetteur utilise le train (C)PPM fourni sur la prise écolage, il est nécessaire de maintenir appuyé (de manière permanente) le bouton-poussoir "écolage".
2) Sur les émetteurs RC récents et programmables qui disposent d'une entrée (C)PPM ou d'une entrée SBUS
Le principe est de créer un train (C)PPM ou une trame SBUS en codant la position des 16 contacts dans une des voies de ce train (C)PPM ou trame SBUS et de l'injecter dans l'émetteur (broche (C)PPM In ou SBUS In).
Puis l'émetteur est configuré pour récupérer la voie du train (C)PPM ou SBUS afin de la "mapper" pour l'envoyer vers le récepteur. Cela se fait habituellement dans le menu "mixage" de l'émetteur.
2.1) Injection d'un train (C)PPM dans l'entrée écolage ((C)PPM
In)
Exemple de configuration du codeur BURC:
LANG=FR
ECOLAGE.MODE=CPPM_OUT
CPPM.MODU=NEG
CPPM.ENTETE=300
CPPM.VOIE.NB=5
CPPM.PERIODE=14000
RCUL.REPET=3
RCUL1.VOIE=5
RCUL1.MESSAGE=C1-C16@0x00
Cela signifie que le codeur BURC génère un train (C)PPM contenant 5 voies, d'entête de 300 µs et de période 14 ms, code la position des 16 contacts dans la voie N°5 et l'injecte sur la broche (C)PPM In de la prise écolage de l'émetteur.
Comme le train (C)PPM de l'écolage n'est pas
synchronisé avec la cadence d'envoi des voies internes de l'émetteur
(aspect asynchrone), des répétitions de message sont nécessaires pour
assurer la bonne transmission du message RCUL (RCUL.REPET=3)
vers le récepteur RC.
Une fois le codeur BURC configuré, il est possible de connaître les caractéristiques du train (C)PPM injecté dans l'entrée écolage:
CPPM.FINAL?
Final
CPPM
characteristics:
==========================
-Modulation = NEG
-Channel Nb = 5
-Header (us) = 300
-Period (us) = 14000
-Tx Period (ms)= 392 (RCUL1 message -> CH5)
Final CPPM frame:
================
-- ----------
----//---- ----------
-------------------
| | CH1 |
| |
| CH5 |
| Synchro
| |
---
---
---
---
---
<--->
Header
<------------------------------------------------------------------>
Period
2.2) Injection d'une trame SBUS
dans l'entrée écolage (SBUS In)
LANG=FR
ECOLAGE.MODE=SBUS_OUT;FUTABA
SBUS.VITESSE=NORMALE
RCUL.REPET=3
RCUL1.VOIE=5
RCUL1.MESSAGE=C1-C16@0x00
Cela signifie que le codeur BURC génère une trame SBUS avec la polarité FUTABA, code la position des 16 contacts dans la voie N°5 et l'injecte sur la broche SBUS In de la prise écolage de l'émetteur. Comme la trame SBUS de l'écolage n'est pas synchronisé avec la cadence d'envoi des voies internes de l'émetteur (aspect asynchrone), des répétitions de message sont nécessaires pour assurer la bonne transmission du message RCUL (RCUL.REPET=3) vers le récepteur RC.
Note:
La prise écolage de l'émetteur Radiomaster TX16S attend un signal SBUS de polarité inversée par rapport au SBUS de Futaba, il faut alors configurer le mode d'écolage comme suit:
Le Firmware est fourni au format
HEX: BURC_CODER_V0_6.hex (Pour le
télécharger: Clic-droit, enregistrer sous...).
Pour charger le fichier HEX dans l'Arduino Nano
du codeur BURC, il suffit d'utiliser l'utilitaire XLoader.
qui est téléchargeable par exemple ici.
Le Firmware du codeur BURC dispose de différents
modes de test pour vérifier si un ensemble RC particulier (émetteur +
récepteur) est éligible (compatible) ou pas avec l'ensemble
codeur/décodeur BURC. Pour les tests, le Firmware HEX
peut être chargé indifféremment dans un Arduino Nano ou un
Arduino UNO à l'aide de l'utilitaire XLoader (Voir
ci-dessus).
Une fois le codeur BURC paramétré pour injecter soit un train (C)PPM, soit une trame SBUS dans l'émetteur (et que le mapping a été déclaré dans l'émetteur pour les émetteurs programmables uniquement), en armant la commande RCUL1.TEST=ON, le codeur BURC va moduler la voie qui sert à transporter les commandes: la voie va faire un balayage périodique pour générer des impulsions de voie d'environ 1000µs à environ 2000µs.
Sur les émetteurs programmables récents, en allant sur le menu qui affiche les voies, le barre-graphe associé à la voie transportant les commandes doit faire des balayages périodiques de la valeur min à la valeur max: cela prouve que la voie injectée dans l'écolage est bien prise en compte par l'émetteur.
En branchant un servo sur la voie associée sur le récepteur, le palonnier du servo doit faire des allers-retours périodiques de -45° à +45° environ.
Si c'est le cas, cela signifie que la voie utilisée par le codeur BURC arrive bien jusqu'au récepteur.
ATTENTION: ne pas brancher le servo si le mode
test n'est pas actif, sinon le servo recevra des commandes quasi
aléatoires et risque de pas apprécier si cela dure trop longtemps!
Note:
Sur les anciens émetteurs, c'est le seul moyen de vérifier sans oscilloscope que la voie (transportant les commandes) injectée dans la prise écolage arrive bien jusqu'au récepteur.
C'est la première vérification à effectuer avant d'aller plus loin.
Une fois le test concluant, envoyer la commande RCUL1.TEST=OFF ou bien faire un Arrêt/Marche du codeur BURC: celui-ci démarre toujours avec RCUL1.TEST=OFF.
Câblage supplémentaire à réaliser entre le récepteur et le codeur BURC:
Note:
Pour ce test, l'Arduino peut être indifféremment un UNO
ou un Nano V3.
1) Connecter le GND du récepteur à GND de l'Arduino du codeur BURC,
2) Connecter le fil "Signal" de la voie du récepteur dédiée à BURC à la broche D8 du codeur BURC,
3) Depuis le PC connecté en USB au codeur BURC, envoyer la commande RX.MODE=RCUL1@PWM afin de signaler au codeur que le signal issu du récepteur est de type PWM (sortie "voie" du récepteur),
4) Mettre l'émetteur en marche,
5) Depuis le PC connecté en USB au codeur BURC, envoyer la commande RX.DBG=1 afin d'armer le mode debug en réception. Si le codeur est capable de décoder le signal de la voie du récepteur l'affichage est le suivant dans la console série:
6) Si la période d'envoi du train (C)PPM ou de la trame SBUS ainsi que le nombre de répétition(s) sont corrects, la qualité de réception/décodage doit être de 100%:
Si une qualité de 100% ou proche de 100% est atteinte, l'ensemble codeur/décodeur BURC fonctionnera à coup sûr sur l'ensemble RC testé.
A retenir:
Avec un simple Arduino UNO (le plus courant), en chargeant le Firmware HEX à l'aide d'XLoader, il est possible de déterminer l'éligibilité d'un ensemble RC (émetteur + récepteur) avec l'ensemble codeur/décodeur BURC.
En mode d'écolage SBUS, pas besoin
d'inverseur SBUS hardware, les 2 polarités sont supportées: tout
est géré en software
Le décodeur BURC est un décodeur
multi-fonctions intelligent qui se connecte sur
un récepteur RC.
Les spécifications du décodeur BURC sont
les suivantes:
1) Piloté par les 16 Contacts du codeur situé côté émetteur (notés C1 à C16 par la suite).
2) Alimentation du module
BURC: de 7,2V à 30V (Support des batteries LiPo de 2S à 7S et
batteries 12V et 24V au plomb),
3) Fourniture d'une alimentation (à découpage) 5V/2A en continu, 3A en pointe, pour alimenter les éventuels servos connectés au module BURC,
4)
Paramétrage du module BURC
via un câble USB
depuis une machine sous Window$, Mac, Linux, Android.
5) Branchement et commande du module BURC sur le récepteur RC depuis:
IV.
Exemple d'application du module décodeur BURC
Cette configuration est en cours d'installation sur
le chalutier AGRION et est détaillée
dans cette page.
Cet exemple montre combien il est facile de particulariser la configuration du module BURC.
Le schéma du décodeur BURC en version PDF: BURC_Decoder_V1_0.pdf
Le bus I2C du codeur BURC permet les extensions matérielles suivantes:
1) Extenseurs I2C 8 I/O:
PCF8574: adresses I2C [0x20..0x23]
PCF8574A: adresses I2C [0x38..0x3B]
2) Extenseurs I2C 16 I/O:
PCF8575A: adresses I2C [0x3C..0x3F]
MCP23017 et PCF8575: adresses I2C [0x24..0x27]
3) Capteur angulaire à 360° I2C:
"I2C-isation" d'un capteur angulaire
absolu 360° analogique 0-5V P3022-V1-CW360: adresses I2C
[0x0C..0x0F]
4) Capteur angulaire à 360° + entrée analogique I2C
"I2C-isation" d'un capteur angulaire absolu 360° analogique 0-5V P3022-V1-CW360 + ajout d'une entrée analogique 0-5V: adresses I2C [0x0C..0x0F]
Les
informations issues de ces périphériques I2C
peuvent être utilisées par les 6 instances RCUL
du codeur BURC.
Par exemple, il est possible de connecter 4 modules MCP23017 ou PCF8575 sur le bus I2C. Ceux-ci vont fournir 4 x 16 entrées digitales permettant de lire la positions de 4 x 16 contacts.
Si on ajoute encore un module PCF8575A sur le bus I2C, on peut encore ajouter 16 entrées digitales permettant de lire la positions de 16 contacts.
En y ajoutant les 16 contacts natifs du codeur BURC, il est possible de passer jusqu'à 6 x 16 = 96 états de contacts.
Exemple de configuration:
LANG=FR
ECOLAGE.MODE=SBUS_OUT;FUTABA
SBUS.VITESSE=NORMALE
RCUL.REPET=3
RCUL1.VOIE=5
RCUL1.MESSAGE=C1-C16@0x00
<- Les 16
Contacts
natifs du
codeur BURC
RCUL2.VOIE=6
RCUL2.MESSAGE=C1-C16@0x24
<- Les 16
Contacts d'un
MCP23017 ou
PCF8575 à
l'adresse I2C
0x24
RCUL3.VOIE=7
RCUL3.MESSAGE=C1-C16@0x25
<- Les 16
Contacts d'un
MCP23017 ou
PCF8575
ou PCF8575 à
l'adresse I2C
0x25
RCUL4.VOIE=8
RCUL4.MESSAGE=C1-C16@0x26
<- Les 16
Contacts d'un
MCP23017 ou
PCF8575 à
l'adresse I2C
0x26
RCUL5.VOIE=9
RCUL5.MESSAGE=C1-C16@0x27
<- Les 16
Contacts d'un
MCP23017 ou
PCF8575 à
l'adresse I2C
0x27
RCUL6.VOIE=10
RCUL6.MESSAGE=C1-C16@0x3C
<-
Les 16
Contacts d'un
PCF8575A à
l'adresse I2C
0x3C
L'état des 16 contacts natifs du codeur passeront dans la voie N°5 de la trame
SBUS fournie sur l'entrée écolage
L'état des 16 contacts du MCP23017 ou PCF8575 ayant l'adresse I2C 0x24 passeront dans la voie N°6 de la trame SBUS fournie sur l'entrée écolage
Il faudra évidemment un décodeur sur
chacune des voies 5, 6, 7, 8, 9 et 10 pour exploîter ces informations.
Sur le codeur il y a 16 contacts natifs C1 à C16. Les broches de l'Arduino associées aux contacts C11 à C16 sont aussi des entrées analogiques.
Du coup, les broches C11 à C16 sont aussi ANA1 à ANA6:
cela nous fournit donc 6 voies analogiques qui pourront être
transmises dans les voies de l'écolage et offre des possibilités
nouvelles.
Exemple de configuration:
LANG=FR
ECOLAGE.MODE=SBUS_OUT;FUTABA
SBUS.VITESSE=NORMALE
RCUL.REPET=3
RCUL1.VOIE=5
RCUL1.MESSAGE=C1-C8@0x00+ANA1
<-
Les 8 premiers
Contacts
natifs + la
valeur
analogique
ANA1 du codeur
BURC
Cette configuration permet, par exemple, de commander le décodeur MS8 V2 qui dispose 8 sorties Tout-Ou-Rien et d'une sortie proportionnelle d'appoint.
VII.
ARCHITECTURE MODULAIRE
DU
SYSTEME BURC/RCUL
Les extensions I2C et analogiques du codeur BURC ont imposé une rélexion quant à l'architecture du système BURC/RCUL car ses possibilités sont désormais démultipliées.
Tout ce qui a déjà été présenté dans les paragraphes
précédents reste vrai, il ne s'agit que d'une extension du concept.
Afin d'organiser les choses le plus clairement possible, côté codeur BURC, le système a été décomposé en modules fonctionnels ayant tous une adresse I2C et fournissant des ressources, ainsi on y trouve:
1) Le module fonctionnel codeur BURC à l'adresse I2C virtuelle 0x00 qui fournit les ressources suivante:
2) Le module fonctionnel Angle+Ana à l'adresse I2C dans la plage [0x0C..0x0F] qui fournit les ressources suivante:
3) Le module fonctionnel Switches à l'adresse I2C dans les plages [0x20..0x23]/[0x24..0x27]/[0x38..0x3B]/[0x3C..0x3F] qui fournit les ressources suivante:
La finalité du système est de permettre le contrôle d'animations diverses d'un modèle depuis presque n'importe quel émetteur RC pour peu qu'il soit doté d'une entrée écolage.
Le besoin d'un modéliste n'étant pas forcément le besoin
d'un autre, le système a été organisé en 2 modules physiques
"emboîtables" un peu comme des pièces de légo: cela crée un espèce de
pupitre/tableau de bord à fixer (par ex, en partie haute) sur
l'émetteur.
Cette réflexion a d'abord été menée avec Pierre (aka Pierrotm777) pour la conception des circuits imprimés, puis avec Cédric (aka Croky_b) pour la réalisation des boîters "emboîtables" réalisés en impression 3D.
Ce module physique intègre les modules
fonctionnels Codeur BURC et Angle+Ana:
![]() |
![]() |
|
Module physique Angle&Ana&Sw
vu de dessus |
Module physique Angle&Ana&Sw vu de dessous |
En connectant ensembles 2 modules Angle&Ana&Sw, il est possible de faire des commandes de propulseurs azimutaux pour bateaux tels que remorqueurs ASD par exemple.
L'angle (sur 360° sans butée), ainsi que
les gaz de chaque propulseur sont indépendants.
En bonus, il est possible d'avoir 16
commandes Tout-Ou-Rien pour les animations!
Pour réaliser cela, les modules sont configurés de la façon suivante:
Ce module physique intègre uniquement le
module fonctionnel Switches:
![]() |
![]() |
|
Module physique 16 Switch du de dessus |
Module physique 16 Switch du de dessous |
Utilisation de 2 modules 16 switch
en complément des commandes azimutales précédemment présentées.
Toutes les commandes individuelles (interrupteur, angle
et gaz) sont indépendantes les une des autres.
Cet agencement ne nécessite que 5 voies
pour passer toutes ces commandes vers le récepteur RC:
- Commande d'Angle du propulseur
azimutal gauche (360° sans butée avec une résolution de 0,088°)
- Commande d'Angle du propulseur azimutal droit (360° sans butée avec une résolution de 0,088°)
- Commande de Gaz du propulseur azimutal gauche
- Commande de Gaz du propulseur azimutal droit
- Commandes à partir de 3 x 16 = 48
positions d'interrupteurs
Les boîtiers Angle&Ana&Sw et 16 Switch imprimés 3D par Cédric (aka Croky_B)