Betaflight : Softserial et Resource Remapping

Des fois on se retrouve face à un contrôleur de vol auquel il manque des ports ou des fonctions qui nous intéressent. Mais on peut y remédier la plupart du temps en utilisant ces deux fonctionnalités de Betaflight, parfois méconnues, que sont « softserial » et le « resource remapping ».

Truc bête, je viens de monter un récepteur frsky doté de la télémétrie SmartPort sur un micro contrôleur de vol. Le processeur est un F4 et il ne dispose que d’un seul inverseur de signal matériel utilisé pour le SBUS. Donc en théorie je ne peux pas également utiliser la télémétrie sans bricoler, repiquer le signal en non inversé, etc.

Mais il existe des solutions pour ce genre de cas, on se lance ?

Expliquons d’abord ce que sont softserial et le resource remapping, cela rendra les choses plus simples pour la suite.

Softserial

La fonction SOFTSERIAL que l’on trouve dans l’onglet « Configuration » de Betaflight permet d’émuler en logiciel des ports série.

Activation de softserial dans l’onglet configuration de betaflight

Cela permet donc d’ajouter des UART qui n’existent matériellement pas moyennant de la capacité de calcul CPU. Bien sur ce n’est pas aussi performant que les UART physiques et si le périphérique qui est raccordé à un softserial est trop bavard ou rapide cela risque de ne pas fonctionner.

Mais pour des choses relativement simples comme la télémétrie SmartPort, la télémétrie des ESC, etc c’est parfait.

Resource Remapping

Une fois softserial activé il nous faut un moyen pour recycler des connecteurs libres du contrôleur de vol et pouvoir les utiliser pour ajouter nos nouvelles fonctions. Le « resource remapping », realocation de ressources est là pour ça.

Concrètement la grande majorité des connecteurs physiques sont raccordés au CPU et comporte une référence. Cela vaut pour les pins de signal des moteurs, les UARTs, le connecteur LED, le connecteur PPM, etc.

la commande « resource list » nous permet de voir toutes les allocations de ressources existantes. Celles qui nous intéressent sont celles concernant les entrées/sorties IO.

Sous le capot de betaflight cela dit que telle ressource (connecteur) est utilisé pour telle fonctionnalité. Mais grâce à la CLI il est possible de changer les fonctionnalités offertes par chacun de ces connecteurs.

Dans les usages courants pour le « resource remapping » on retrouve généralement :

  • Changement de l’ordre des moteurs (quand on tourne un contrôleur de vol AIO par exemple)
  • Réutilisation d’un connecteur pour le FPV Camera Control ou la télémétrie des ESC , etc;
  • Et donc, « softserial » qui va transformer un connecteur quelconque en TX ou RX logiciel pour être utilisé à autre chose que ce pourquoi il était prévu au départ.

Cas pratique : mise en place de la télémétrie SmartPort sur un contrôleur de vol F4.

J’ai changé le récepteur d’un quad qui ne fonctionnait plus. Je l’ai remplacé par un FrSky XSR-M (ou XSR-E) qui fonctionne en SBUS et fournit la télémétrie SmartPort.

Malheureusement  mon contrôleur de vol F4 ne dispose pas de connecteur avec inversion pour le SmartPort. Spa grave on va s’en passer et le faire quand même et sans aucune modification matérielle 🙂

1 : Recycler un connecteur

Les connecteurs réutilisables sont en général ceux qui font office d’entrées/sorties par exemple :

  • PPM
  • LED
  • Les connecteurs Motor

Ça tombe bien, sur mon contrôleur, PPM est juste à coté de SBUS, je vais donc l’utiliser pour ajouter la télémétrie :

2: Récupération de la ressource du connecteur PPM

Avant de toucher à quoi que ce soit on va vérifier et préparer les différentes ressources dont on va avoir besoin. Notamment noter la ressource derrière le connecteur PPM, la libérer pour pouvoir la réutiliser pour softserial.

PS : avant de tout casser je vous recommande de faire une sauvegarde de votre configuration avec « diff » par ex, et la mettre de coté. On sait jamais et comme on touche à des ressources sensibles la possibilité de faire des bêtises est très grande.

Dans la « CLI » Betaflight on utilise la commande « resource » pour afficher la liste des ressources.

# resource
resource BEEPER 1 B04
resource MOTOR 1 B00
resource MOTOR 2 B01
resource MOTOR 3 A03
resource MOTOR 4 A02
resource MOTOR 5 A01
resource MOTOR 6 A08
resource PPM 1 B14
resource PWM 1 B14
resource PWM 2 B15
resource PWM 3 C06
resource PWM 4 C07
resource PWM 5 C08
resource PWM 6 C09
resource LED_STRIP 1 A01
resource SERIAL_TX 1 A09
resource SERIAL_TX 3 B10
resource SERIAL_TX 6 C06
resource SERIAL_RX 1 A10
resource SERIAL_RX 3 B11
resource SERIAL_RX 6 C07
resource INVERTER 1 C00
resource LED 1 B05
resource SPI_SCK 1 A05
resource SPI_SCK 3 C10
resource SPI_MISO 1 A06
resource SPI_MISO 3 C11
resource SPI_MOSI 1 A07
resource SPI_MOSI 3 C12
resource ESCSERIAL 1 B14
resource ADC_BATT 1 C02
resource ADC_RSSI 1 A00
resource ADC_CURR 1 C01

Ici on constate que la ressource B14 est affectée a la fonctionnalité PPM 1 (en gros le connecteur PPM 1 car il peut il y’en avoir plusieurs). Mais pas seulement, B14 est aussi utilisé pour PWM 1 et ESCSERIAL 1.

NB : B14 c’est avec mon contrôleur de vol qui est un OMNIBUSF4. Il faut bien sur vérifier sur le votre et prendre la bonne valeur dans votre cas.

On va libérer la ressource B14 pour qu’elle ne soit plus affectée à PPM 1, PWM 1 ou ESCSERIAL 1 :

# resource PPM 1 none
Resource is freed

# resource ESCSERIAL 1 none
Resource is freed

# resource PWM 1 none
Resource is freed

Et on n’oublie pas de sauvegarder :

# save
3 : Activer SOFTSERIAL et TELEMETRY

Dans Betaflight, onglet « Configuration » on active les fonctions SOFTSERIAL et TELEMETRY et on sauvegarde.

4: affecter la ressource précédemment libérée à softserial

Donc, maintenant qu’on a activé softserial et la télémétrie on peut revenir dans la CLI et finir la configuration. Car si vous allez dans « Ports » pour le moment vous n’avez que les UART physiques, aucun UART Softserial présent.

Si vous regardez à nouveau dans la CLI avec resource :

# resource
resource BEEPER 1 B04
resource MOTOR 1 B00
resource MOTOR 2 B01
resource MOTOR 3 A03
resource MOTOR 4 A02
resource MOTOR 5 A01
resource MOTOR 6 A08
resource PWM 2 B15
resource PWM 3 C06
resource PWM 4 C07
resource PWM 5 C08
resource PWM 6 C09
resource LED_STRIP 1 A01
resource SERIAL_TX 1 A09
resource SERIAL_TX 3 B10
resource SERIAL_TX 6 C06
resource SERIAL_RX 1 A10
resource SERIAL_RX 3 B11
resource SERIAL_RX 6 C07
resource INVERTER 1 C00
resource LED 1 B05
resource SPI_SCK 1 A05
resource SPI_SCK 3 C10
resource SPI_MISO 1 A06
resource SPI_MISO 3 C11
resource SPI_MOSI 1 A07
resource SPI_MOSI 3 C12
resource ADC_BATT 1 C02
resource ADC_RSSI 1 A00
resource ADC_CURR 1 C01

On constate tout d’abord que les ressources PPM 1, PWM 1 et ESCSERIAL 1 ont disparu, on les a liberées.

En bleu on voit les ressources des ports série existants (UARTS 1, 3 et 6 sur mon contrôleur). Ces UARTS comportent 2 ressources une TX et une RX car un port série est généralement bidirectionnel.

Néanmoins, pour notre histoire de télémétrie on n’a besoin que du TX.

Pour déclarer un softserial il nous faut affecter notre B14 à une ressource SERIAL_TX comportant un numéro supérieur à 11 (car de 1 à 10 on est sur les UART physiques).

Dans la cli :

# resource SERIAL_TX 11 B14
Resource is set to B14

# save

A présent, si on regarde dans l’onglet « Ports » :

Tada ! On voit apparaître le port SOFTSERIAL1 qu’on vient de configurer en ligne de commande. On va modifier la colonne « Telemetry Output » et indiquer la valeur « SmartPort » et sauvegarder.

Il nous reste une dernière vérification. On doit vérifier que la télémétrie est bien réglée pour fonctionner en mode half-duplex (car SoftSerial fonctionne de cette manière) et que l’inverseur de signal est désactivé (car on s’en fiche avec SoftSerial). De nouveau dans la CLI :

# get tlm
tlm_switch = OFF
Allowed values: OFF, ON

tlm_inverted = OFF
Allowed values: OFF, ON

tlm_halfduplex = ON
Allowed values: OFF, ON

pid_in_tlm = OFF
Allowed values: OFF, ON

Donc ici on doit avoir tlm_inverted = OFF et tlm_halfduplex = ON si ce n’est pas le cas on utilise les commandes suivantes :

# set tlm_inverted = OFF
tlm_inverted set to OFF

# set tlm_halfduplex = ON
tlm_halfduplex set to ON

et on finit par un dernier save.

5: tester sur la télécommande

A présent, sur la télécommande vous devriez détecter les nouveaux « sensors » dans la page « telemetry » et vous pouvez faire vos configurations habituelles, utiliser les scripts LUA pour changer les réglages, etc.

 

 

 

 

Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. Apprenez comment les données de vos commentaires sont utilisées.