BetaFlight 4.0 – Une nouvelle ère pour le filtrage

BF4 RPM filter et Filtre bidirectionnel

Alors que BetaFlight 4.0 est encore en version bêta (la version définitive est prévue pour le début du mois d’avril), voici deux fonctionnalités qui vont révolutionner le filtrage de nos petits engins volants. Découvrez tout d’abord leur fonctionnement avant d’apprendre à les configurer.

Le DShot bidirectionnel

La technologie bidirectionnelle DShot est une nouvelle fonctionnalité de BetaFlight 4.0. Elle permet au contrôleur de vol de recevoir à haute fréquence la télémétrie de chaque moteur au travers de chaque fil signal de l’ESC. Elle ne nécessite aucun câblage supplémentaire. Chaque trame DShot envoyée par la carte de vol reçoit en retour une trame de l’ESC contenant le eRPM actuel. Le FC a besoin de connaître le nombre de pôles moteur pour convertir en RPM (voir le chapitre Nombres de pôles moteur ci-dessous).

Le filtre RPM

Le RPM Filter est une banque de 36 filtres NOTCH de gyroscope et Dterm. Il tire parti de cette télémétrie à haute fréquence pour mettre en œuvre un filtre d’harmoniques qui élimine le bruit du moteur avec une précision chirurgicale. Dans sa configuration par défaut, il utilise 12 filtres coupe-bande (cutoff) pour chacun des axes Roll, Pitch et Yaw, couvrant les 3 premières harmoniques du régime de chaque moteur pour la banque de filtres gyroscopiques.

Par « 3 premières harmoniques », entendez « les 3 premières bandes de fréquences de bruit moteurs ».
Voici un exemple concret :

Ces deux fonctionnalités sont actuellement uniquement prises en charge par BLHeli_32. Elles nécessitent en revanche une mise à jour vers le dernier firmware (Référencé ici).

Configuration requise

Consultez le tableau au bas de cette page pour voir si votre carte de vol est pris en charge. Certaines cartes nécessitent un firmware personnalisé que vous pourrez trouver ici.

Temps de boucle et protocole DShot

Le DShot bidirectionnel fonctionne en DShot 300, 600 et 1200, ainsi qu’avec le Proshot 1000. Rappelez-vous cependant que pour chaque trame envoyée, il y aura désormais une trame retournée, ce qui induit une latence supplémentaire. La sélection du temps de boucle (looptime) doit être suffisamment basse pour que, compte tenu du débit de protocole DShot, les deux trames + 50μs tiennent dans une itération de boucle gyroscopique. Le filtre bidirectionnel DShot et le filtre RPM nécessitent une grande quantité de ressources processeur. Il est donc primordial que les vitesses de boucle soient bien paramétrées, afin que les filtres soient réglés sur les bonnes fréquences. 4k/4k (fréquences gyro update et PID looptime dans BetaFlight) sont fortement recommandées.

Toutes les vitesses DSHOT devraient fonctionner à ce taux de boucle. Sur les cartes de vol F4, la télémétrie RPM consomme environ 3-4μs par moteur et par changement de direction de ligne. Le filtre RPM possède 36 filtres NOTCH qui sont réglés dynamiquement à une fréquence de 1000Hz. Donc, une fréquence gyro update/PID looptime à 8k/8k peut peut s’avérer trop courte.

Commencez par installer le firmware de test BLHeli_32 sur vos ESC. Désactivez également toute mélodie de démarrage étendue (entendez par là: remettez les sons de démarrage Blheli_32 par défaut) car cela interfère avec le DShot bidirectionnel.

DMA

L’implémentation actuelle requiert l’utilisation du DMA normal (DMA = Direct Memory Access) et non du DMA en rafale (ou DMA Burst). Cela peut ou non fonctionner avec une FC donnée. Vous pouvez simplement l’essayer avec la commande suivante à taper en CLI :

dshot_burst = off
save

Testez ensuite ce paramètre en effectuant 2 vols de vérification. Chaque changement devra TOUJOURS IMPÉRATIVEMENT être validé par 2 vols avec une vérification de la température moteurs: un vol stationnaire très court (20s), puis un vol court normal
Si votre drone a passé cette étape, passons à la suite.

Activation de la nouvelle stratégie du planificateur

Etant donné que le filtre RPM fonctionne avec des filtres NOTCH très étroits, il est impératif que le temps de la boucle gyroscopique ne varie pas et soit exactement tel que spécifié. Auparavant, cela exigeait des taux de boucle faibles et un overclocking. Un changement de planificateur a maintenant été ajouté, ce qui permet des taux de gyroscope cohérents, même à des taux de boucle plus élevés. Le DShot bidirectionnel nécessite l’activation de cette fonctionnalité :

set scheduler_optimize_rate = on 
save

Activer le Dshot bidirectionnel

Activez-le avec cette commande :

set dshot_bidir = on  
save

Si vos moteurs sont toujours vivants, connectez une LiPo et connectez le quad en USB. Puis en CLI et tapez :

status

Vous devriez voir la télémétrie DShot apparaître. Le nombre de tours/minute indiqué doit être égal à zéro pour chaque moteur et le nombre d’erreurs doit être faible.

Nombre de pôles moteur

Les ESCs rapportent les eRPM, qui doivent être convertis en RPM en utilisant le nombre de pôles (aimants) des moteurs. Ceux-ci se trouvent sur la cloche du moteur (et non pas sur le stator où se trouvent les enroulements).

Les moteurs 5″ typiques ont 14 pôles, ce qui est le réglage par défaut. Les moteurs plus petits ont moins de pôles, souvent 12. Vous pouvez configurer cette valeur en CLI :

set motor_poles = 14
save

Vérifier la constance de la looptime

Important : Après avoir activé toutes les fonctionnalités ci-dessus, vérifiez de nouveau que votre taux de rafraîchissement est cohérent. Sinon, sélectionnez un taux de looptime inférieur. Rappelez-vous que, contrairement au filtrage, le temps de boucle a un effet très minime sur les performances de vol. N’hésitez donc pas à passes de 8 à 4k !
Pour rappel, voici où se place ce paramètre dans « l’échelle de consommation de temps » des différents acteurs:

Pour ce faire, entrez encore la commande ci-dessous en CLI

status

Vérifiez que le taux de gyroscope corresponde à ce que vous avez spécifié.

Modes de débogage

Il existe deux modes de debug blackbox pour vérifier le filtre RPM:
set debug_mode =RPM_FILTER enregistre la fréquence de chaque moteur telle que signalée par le contrôleur.
set debug_mode = DSHOT_RPM_TELEMETRY enregistre l’eRPM non converti.

Réglage (par SugarK)

Le filtre RPM fera le gros du travail sans ajouter beaucoup de latence. En règle générale, seuls le filtre passe-bas Dterm et le filtre dynamique NOTCH sont nécessaires pour supprimer respectivement le bruit de fond général et les résonances du châssis. Vous devez retirer les filtres par étapes, tester le vol stationnaire et le vol normal après chaque modification pour vérifier que vos moteurs ne chauffent pas.

La première chose à désactiver est le filtre passe-bas Dterm stage2 :

set dterm_lowpass2_hz = 0 
save

La prochaine étape consiste à affiner le filtre NOTCH dynamique. Nous vous recommandons de définir ce filtre à 0. Cela active le filtre NOTCH classique, pas la version « en cascade » :

set dyn_notch_width_percent = 0 
save

Vous devez maintenant définir la fréquence minimale et la plage du filtre NOTCH dynamique. Sur un racer typique de 5 pouces, une valeur dynamique minimale de 200hz et une plage (range) médium devraient convenir, mais pour un quad plus grand (au delà de 5 pouces), vous devrez peut-être régler cette fréquence à 100hz et une plage basse. Ici, la blackbox sera d’une grande aide. En principe, il faut recherchez la fréquence du bruit du moteur au ralenti :

set dyn_notch_range = medium 
set dyn_notch_min_hz = 200
save

Si le quad est très propre, vous pouvez probablement vous en tirer avec filtre NOTCH dynamique Q de 200 à 250 (le stock est de 120). Cela réduit le filtrage et produit moins de latence (plus la fréquence de coupure d’un filtre est élevée et plus la latence diminue) :

set dyn_notch_q = 200 

Vient ensuite le filtrage gyroscopique passe-bas (lowpass). Rappelez-vous qu’il existe à la fois des filtres gyro statiques et dynamiques. Si vous désactivez le dynamique, il redevient un passe-bas statique et vous devez également désactiver cette option :

set gyro_lowpass_hz = 0 
set dyn_lpf_gyro_max_hz = 0
save

Si votre quad n’aime pas cela et que vos moteurs deviennent trop chauds, réactivez le filtre passe-bas gyroscopique statique et changez son type en PT1 afin de réduire au moins le temps de latence de celui-ci.

set gyro_lowpass_hz = 150 
set gyro_lowpass_type = PT1
save

Enfin, vous devriez pouvoir augmenter légèrement le filtrage dynamique du filtre passe-bas Dterm. Ne le désactivez pas, mais vous pouvez augmenter le min / max et gagner sur la latence globale. Les réglages stock pour min / max sont respectivement 150Hz et 250Hz.
En commençant par le max, vous pouvez essayer de le pousser à 300 voire 400Hz :

set dyn_lpf_dterm_max_hz = 300 
save

Une fois défini, vous pouvez essayer de pousser le min jusqu’à 200Hz. Si cette valeur est trop élevée, vos moteurs peuvent produire un bruit de grincement au ralenti. Si tel était le cas, réglez-le simplement à 150Hz :

set dyn_lpf_dterm_min_hz = 150 
save

Il est possible de désactiver le filtre coupe-bande dynamique si vous abaissez suffisamment votre filtre passe-bas Dterm, mais cela supprime tout filtrage susceptible de réagir à des influences externes, par exemple le vent.

Enfin, il est recommandé d’utiliser le TPA uniquement D (alias TDA, qui est désormais la valeur par défaut en 4.0) en utilisant une forte réduction de taux de l’ordre de 60-80% (valeur par défaut de 50%) et le seuil à 1750 (valeur par défaut de 1500).

Le TPA dans les versions antérieures à la 4.0, agissaient sur le P et le D.
En 4.0, on peut choisir P+D, ou D uniquement.

De cette façon, vous avez toujours un D puissant pour vous débarrasser du propwash, et il s’effacera lors de grosses accélérations :

set tpa_rate = 60 
set tpa_breakpoint = 1750
save

Pour aller plus loin

Ces explications sont tirées de la page Github de Betaflight dédiée à ces deux fonctionnalités. Elle évolue constamment et je vous conseille de la consulter régulièrement.
UAV Tech nous explique en vidéo (et en Anglais) ces deux concepts.

Just high five your nearest neighbor and happy flying !

Quitter la version mobile