bbdoctor
Diagnóstico de drones por el log: Betaflight, INAV, ArduPilot, PX4
RUENESPTUA

Filtro RPM de Betaflight: configúralo y comprueba que funciona en el registro

El filtro RPM es el filtro más preciso de Betaflight: el controlador de vuelo recibe la velocidad de cada motor y elimina el ruido justo en esas frecuencias. Aquí encontrarás qué necesita, cómo activarlo, qué hacen sus ajustes y cómo comprobar en un registro real que funciona.

Qué hace el filtro RPM y por qué supera a un filtro pasa bajos

El motor y la hélice hacen vibrar el cuadro a la frecuencia de rotación (1×) y sus múltiplos; el paso de las palas es 2× con una hélice de dos palas y 3× con una triblada. Todas estas frecuencias aumentan con el gas, por lo que aparecen como líneas diagonales en un mapa de calor del gas frente a la frecuencia.

Sin datos de RPM, Betaflight tiene dos herramientas. Un filtro pasa bajos elimina todo lo que supera su frecuencia de corte, pero añade mucho retraso y no puede atenuar bien una línea de 200 Hz. El notch dinámico busca picos del espectro, va por detrás de los cambios del gas y tiene solo 3 notch de forma predeterminada, 5 como máximo. El filtro RPM lee la velocidad de cada motor mediante DShot bidireccional en cada ciclo y coloca un notch estrecho en cada armónico de cada motor. Son 4 motores × 3 armónicos = 12 notch que siguen las RPM casi sin retraso.

Mapa de calor del giroscopio bruto de alabeo de un cuadricóptero de 7 pulgadas: bandas diagonales de ruido con las líneas 1×, 2× y 3× de cada motor trazadas a partir de eRPM; las bandas coinciden con las líneas
REKON 7, 6S, Betaflight 4.6.0, registro a 1980 Hz: giroscopio bruto de alabeo con las medianas 1× (continua), 2× (discontinua) y 3× (punteada) de cada motor, calculadas a partir de eRPM por franja de gas; colores M1–M4. El 84–87 % de la energía de ruido bruto por encima de 80 Hz queda a ±10 Hz de estas líneas, justo donde el filtro RPM coloca sus notch.

Sin embargo, no es gratis: un notch con factor de calidad Q a la frecuencia f retrasa el movimiento lento del cuadricóptero aproximadamente 1/(2π·Q·f). Con un ciclo PID de 4 kHz, 12 notch con Q = 5 y motores a 200 Hz (1×) añaden unos 1,15 ms. Un único PT1 a 150 Hz añade casi lo mismo (1,06 ms). Pero ese PT1 solo reduce una línea de 200 Hz en 4–5 dB, mientras que los notch la reducen decenas de dB. Así, con el mismo retraso eliminas casi todo el ruido del motor y puedes usar pasa bajos más suaves. Los notch de baja frecuencia son los más costosos: a 100 Hz, las mismas 12 cuestan 2,3 ms; para eso sirven min_hz y el rango de atenuación gradual.

Qué necesitas

ESCDShot bidireccionalQué hacer
BLHeli_S (original)noinstala Bluejay (o JESC)
Bluejay, JESCsínada; actívalo en el controlador de vuelo
BLHeli_32 anterior a 32.7noactualiza a 32.7 o posterior
BLHeli_32 32.7+, AM32sínada; actívalo en el controlador de vuelo

Configuración paso a paso

  1. Quita las hélices. Haz una copia de seguridad de la configuración con diff all.
  2. Comprueba el firmware de los ESC: esc-configurator.com lee BLHeli_S, Bluejay y AM32; BLHeliSuite32 lee BLHeli_32. Si tienes BLHeli_S original, instala Bluejay.
  3. Cuenta los imanes de la campana de un motor.
  4. En la CLI (usa tu protocolo y número de polos):
    set motor_pwm_protocol = DSHOT300
    set dshot_bidir = ON
    set motor_poles = 14
    save
  5. Tras reiniciar, abre la pestaña Motors. Cada motor debe mostrar sus RPM y un porcentaje de errores. Gíralos con el deslizador: las RPM deben subir con suavidad y los errores mantenerse cerca de cero. En la CLI, dshot_telemetry_info muestra las RPM y los paquetes incorrectos de cada motor. Con el filtro RPM activado, si un ESC no envía RPM, Betaflight no permite armar y muestra RPMFILTER en el OSD.
  6. Comprueba que el filtro esté activado: lo está de forma predeterminada (3 armónicos), pero algunas configuraciones copiadas pueden tenerlo en 0.
  7. En la versión 4.5 o posterior, comprueba que el registro RPM de blackbox no esté desactivado (está activado de forma predeterminada), o el registro no servirá para comprobarlo:
    set blackbox_disable_rpm = OFF
    save

El campo eRPM del registro solo existe desde la versión 4.5 (el código blackbox de 4.4 no lo incluye): nuestro registro 4.4.1 con DShot bidireccional no tiene RPM, mientras que todos los registros 4.5.x tienen eRPM[0]…eRPM[3]. Además, un registro 2025.12.5 tenía el filtro activado, pero el registro RPM desactivado, así que no permite comprobar nada.

Los ajustes, con valores de registros reales

Betaflight 4.3 cambió el nombre de los parámetros y 4.5 añadió pesos por armónico; la tabla muestra los valores predeterminados y los observados en registros reales.

4.3 y posterior4.1–4.2PredeterminadoFunciónObservado en registros
rpm_filter_harmonicsgyro_rpm_notch_harmonics3número de armónicos con notch; 0 desactiva el filtro3 en todos
rpm_filter_qgyro_rpm_notch_q500 (Q = 5)anchura del notch: cuanto mayor, más estrecha y con menos retraso500; 700 (2025.12.5); 850 (VX3.5, 4.5.2)
rpm_filter_min_hzgyro_rpm_notch_min100frecuencia mínima del notch100; 70 (7 pulgadas, 4.6.0)
rpm_filter_fade_range_hz—50rango por encima de min_hz en el que el notch se desvanece50; 70; 80
rpm_filter_weights (4.5+)—100,100,100profundidad de cada notch, en %100,60,100 (4.6.0); 90,50,90 (2025.12.5)
rpm_filter_lpf_hzrpm_notch_lpf150suaviza las RPM antes de calcular los notch150 en todos

rpm_filter_q. Un notch estrecha añade menos retraso, pero requiere RPM precisas. En un notch de 200 Hz, un error de 10 Hz respecto al centro se atenúa casi 7 dB con Q = 5, pero solo 3,6 dB con Q = 8,5. A cambio, 12 notch con Q = 8,5 añaden unos 0,7 ms en vez de 1,15. El VX3.5 usa 850 con telemetría limpia (menos de 0,02 saltos por segundo), pero la wiki de Betaflight desaconseja superar 750; no subas q si tu cuadricóptero tiene errores de eRPM.

rpm_filter_min_hz y el rango de atenuación gradual. Un notch nunca baja de min_hz; entre min_hz + fade y min_hz su profundidad disminuye hasta cero. Esto afecta sobre todo a 1× con motores lentos al cortar el gas y en el lavado de hélice, y también a 2× con RPM muy bajas. En el modelo de 7 pulgadas con 4.6.0 (min 70, fade 50), el motor más lento estuvo por debajo de 120 Hz, dentro de la zona de atenuación, durante una cuarta parte del vuelo (24 %) y por debajo de 70 Hz un 4,4 %. Por debajo del 5 % de gas, la mediana de velocidad del motor fue 58 Hz. Los cuadricópteros de 5 pulgadas giran más rápido y suelen funcionar bien con los valores predeterminados. Reduce min_hz solo con hélices grandes y si el registro muestra ruido 1× con poco gas: los notch de baja frecuencia añaden mucho retraso.

rpm_filter_weights (4.5 o posterior) determina la profundidad del notch de cada armónico: 100 es un notch completo y 50, la mitad. El mismo modelo de 7 pulgadas usa 100,60,100, y el registro lo respalda: 2× concentraba solo el 4–6 % del ruido bruto por encima de 80 Hz, mientras que 3× concentraba el 68 % en alabeo. Cambia los pesos solo a partir de tu propio registro; el número de palas cambia la distribución de energía entre 2× y 3×.

Valores predeterminados de 4.3 o posterior para restaurar los ajustes:

set rpm_filter_harmonics = 3
set rpm_filter_q = 500
set rpm_filter_min_hz = 100
set rpm_filter_fade_range_hz = 50
set rpm_filter_lpf_hz = 150
set rpm_filter_weights = 100,100,100
save

Omite la línea rpm_filter_weights en 4.3–4.4, donde no existe.

Qué cambiar cuando ya esté funcionando

El notch dinámico: redúcelo, no la desactives. El filtro RPM se encarga ahora de las líneas del motor; el notch dinámico queda para las resonancias del cuadro y la electrónica apilada, que mantienen una frecuencia constante con cualquier posición del gas y se cubren con uno o dos notch. Para 4.2 o posterior, la wiki de Betaflight sugiere dyn_notch_count = 1 y dyn_notch_q = 500; casi todos nuestros registros 4.5.x usan 1 y uno usa 2. Con el filtro RPM activado, la comprobación de configuración no avisará si el notch dinámico está desactivado, pero las resonancias del cuadro pasarán directamente a los PID.

Ahora puedes usar Dynamic Idle. También necesita RPM: sin DShot bidireccional, dyn_idle_min_rpm no hace nada, y la comprobación de configuración de bbdoctor lo indica. El valor representa centenas de RPM; bbdoctor sugiere 30 para 5", 40–50 para 3" y 20–25 para 7". Mantiene los motores girando al cortar el gas y es una de las primeras soluciones para el lavado de hélice. En 4.2 se llama idle_min_rpm. Está en el perfil PID, así que configúralo en cada perfil que uses.

set dyn_notch_count = 1
set dyn_notch_q = 500
set dyn_idle_min_rpm = 30
save

Los filtros pasa bajos: no te apresures. Es habitual recomendar subirlos de inmediato. bbdoctor sugiere aumentar en un 15 % las frecuencias de corte del giroscopio (y luego comprobar la temperatura de los motores) solo si se cumplen todas estas condiciones: ruido filtrado inferior a 1 deg/s, retraso del filtro superior a 1,5 ms, registro a 500 Hz o más, giroscopio bruto silencioso (menos de 4 deg/s) y ninguna resonancia del cuadro. El modelo de 7 pulgadas muestra por qué: 0,66 deg/s tras el filtrado y 2,1 ms de retraso parecen dar margen. Pero el ruido bruto de cabeceo es 7,9 deg/s, así que la conclusión es que hay margen, pero aún es pronto para relajarlos: primero la mecánica. La guía de filtros explica estas cifras de ruido.

Compruébalo en el registro

Necesitas un registro con el campo eRPM y el giroscopio sin filtrar a 1 kHz o más, idealmente 2 kHz (consulta la guía de configuración de blackbox). Súbelo a bbdoctor y comprueba tres cosas.

1. Las líneas del motor desaparecen después del filtrado. El mapa de calor bruto muestra diagonales; el filtrado no debería mostrarlas. Si siguen ahí, los notch están mal colocados: revisa motor_poles y los errores de eRPM.

Dos mapas de calor del ruido de alabeo: a la izquierda, giroscopio bruto con líneas diagonales brillantes; a la derecha, giroscopio filtrado, casi oscuro con la misma escala de color
El mismo REKON 7, alabeo, una sola escala de color. Izquierda: giroscopio bruto. Derecha: después del filtro RPM, tres notch dinámicos y un pasa bajos de 375 Hz. El ruido por encima de 80 Hz bajó de 5,3 a 0,54 deg/s en alabeo y de 7,9 a 0,66 en cabeceo: 25,5 dB menos en las líneas del motor y 13–14 dB menos fuera de ellas. La tenue zona cerca de 680 Hz con 15–30 % de gas no coincide con los armónicos seguidos y supera dyn_notch_max_hz = 400, así que ninguno de los filtros la elimina.

2. Los motores coinciden entre sí. bbdoctor compara las RPM de cada motor con las demás para la misma orden. En este modelo de 7 pulgadas, la diferencia va de −0,7 % a +0,8 %. Una desviación del 6 % genera un aviso, y un motor al menos un 10 % más lento que los demás se marca como grave. Si buscas un motor que se frena o vibra, consulta la guía de vibraciones.

3. Errores de telemetría eRPM. El filtro RPM confía en cada paquete, así que uno incorrecto puede desviar brevemente el notch. bbdoctor cuenta lo siguiente por motor y solo mientras gira (orden superior al 12 %):

Más de 1 salto por segundo o más del 1 % de ceros genera el aviso «errores de telemetría eRPM» y recomienda revisar la soldadura del cable de señal del ESC, las interferencias de los cables de alimentación y el firmware del ESC. Como referencia, cuatro registros del VX3.5 muestran de 0 a 0,02 saltos por segundo.

RPM de cuatro motores a partir de eRPM: M1 y M4 muestran picos frecuentes y bruscos mientras M2 y M3 son uniformes; ampliación de 100 ms, M4 salta entre 103 y 171 Hz mientras M2 se mantiene entre 121 y 150 Hz
Cuadricóptero 6S, Betaflight 4.5.1, registro a 801 Hz, vuelo 10. A: los cuatro motores durante 1 s; M1 y M4 son irregulares. B: 100 ms, los puntos son tramas del registro: M2 se mantiene entre 121 y 150 Hz, M4 salta entre 103 y 171 Hz. Cambio mediano entre tramas: M3 0,6 %, M2 3,4 %, M1 9,8 %, M4 10,3 %. Saltos por segundo: M4 6,1, M1 1,1, M3 0,24, M2 0.

En este cuadricóptero, M4 supera el umbral en los 11 vuelos del archivo, con entre 1,6 y 6,1 saltos por segundo. M1 lo supera en tres vuelos, M3 en dos y M2 nunca (su peor valor es 0,61). No hay ceros. Los errores que se repiten en el mismo motor vuelo tras vuelo no son interferencias aleatorias: apuntan a ese canal, a la soldadura del cable de señal, su recorrido junto a los cables de alimentación o al propio ESC. En el vuelo más largo (98 s), bbdoctor avisó sobre dos motores: M3, con 1,35, y M4, con 1,61 saltos por segundo.

Las RPM del registro también ayudan después de un accidente: bbdoctor busca una desincronización antes del impacto, cuando un motor recibe una orden del 40 % o más y gira a menos del 35 % de los demás durante más de 30 ms. Si ese motor mostró ceros de eRPM antes en el vuelo, se considera un fallo de telemetría, no una desincronización.

Solución de problemas: síntoma, causa y solución

SíntomaCausaSolución
Con dshot_bidir activado, los motores no giran o muestran 0 RPMEl ESC no admite DShot bidireccional (BLHeli_S original, BLHeli_32 anterior a 32.7)Instala Bluejay o actualiza BLHeli_32; AM32 lo admite de fábrica
No arma y el OSD muestra RPMFILTEREl filtro RPM está activado, pero al menos un ESC no envía RPMBusca el motor sin RPM en la pestaña Motors o con dshot_telemetry_info; revisa el ESC y el cable
Errores en todos los motores a la vezUna causa común en el controlador de vuelo: el método de salida DShot o recursos de motor reasignadosPrueba dshot_bitbang = OFF en lugar de AUTO (o a la inversa) y restaura los recursos predeterminados
Errores o saltos de eRPM en un motorSoldadura del cable de señal, recorrido junto a los cables de alimentación o canal del ESCVuelve a soldar, cambia el recorrido o actualiza el firmware; si el error sigue al ESC al intercambiarlo, sustitúyelo
Las RPM de la pestaña Motors parecen demasiado altas o bajasValor incorrecto de motor_polesCuenta los imanes e introduce ese número
DShot bidireccional activado, pero el registro no tiene eRPM4.5+: registro RPM desactivado; 4.1–4.4: no existe el campo eRPMblackbox_disable_rpm = OFF o actualiza a 4.5 o posterior
Filtro activado y motores aún calientesRuido ajeno a los armónicos: resonancia del cuadro, hélice doblada o rodamiento; o exceso de D con pasa bajos D-term relajadosLee el mapa de calor: una línea vertical indica resonancia; un 1× marcado en un motor indica un problema mecánico. Después revisa D y sus filtros
La comprobación indica: «DShot bidireccional activado, pero el protocolo no es DShot»dshot_bidir = ON con PWM/OneShot/ProShotCambia el protocolo a DShot
La comprobación indica: «El filtro RPM está desactivado aunque hay datos RPM»rpm_filter_harmonics = 0Restablécelo en 3

Sobre el número de polos: un motor con 12 imanes configurado como 14 muestra 6/7 de sus RPM reales; a 200 Hz reales, el notch queda en 171 Hz. Un notch Q = 5 solo atenúa 1,5 dB a 29 Hz de distancia, así que el filtro apenas funciona. En 3× la diferencia es mayor: 514 Hz en vez de 600. La comprobación de configuración te pide volver a contar los polos si motor_kv es 6000 o más y motor_poles = 14. Solo lo detecta si introdujiste el valor KV: todos nuestros registros que incluyen motor_kv usan el valor predeterminado 1960. bbdoctor también convierte eRPM con motor_poles de la cabecera, así que un número incorrecto desplaza sus líneas armónicas.

Errores frecuentes: usar el 12 de 12N14P en motor_poles (ese número indica los dientes del estator), subir el pasa bajos sin consultar un registro, desactivar el notch dinámico o aumentar rpm_filter_q pese a los errores de eRPM. Una desincronización al cortar el gas es un problema del ESC y del motor, no del filtro RPM.

INAV, ArduPilot y PX4

INAV no usa DShot bidireccional en este caso. Recibe las RPM por telemetría de ESC en un cable independiente conectado al pin RX de un UART libre; activa la telemetría del ESC en ese puerto, en la pestaña Ports. Los ESC BLHeli_32 y AM32 con una almohadilla de telemetría la proporcionan; Bluejay no. El número de polos se define en motor_poles. Los ajustes del filtro son rpm_gyro_harmonics (1 de forma predeterminada, máximo 3), rpm_gyro_min_hz (100; la documentación de INAV permite 60–70 en un modelo de 7 pulgadas) y rpm_gyro_q (500). Actívalo así:

set rpm_gyro_filter_enabled = ON
save

Si el filtro está activado, pero ningún puerto tiene telemetría ESC, la comprobación de configuración de bbdoctor indica que no funciona. La blackbox de INAV solo registra un valor escRPM en sus tramas lentas, sin RPM por motor, por lo que las comprobaciones de eRPM no están disponibles en registros INAV.

ArduPilot usa su notch armónica controlada por la telemetría ESC. SERVO_BLH_BDMASK es una máscara de bits de las salidas que usan DShot bidireccional (15 cubre las cuatro primeras); SERVO_BLH_POLES indica el número de polos. INS_HNTCH_MODE = 3 hace que el notch siga las RPM del ESC y INS_HNTCH_OPTS = 2 asigna un notch a cada motor. En placas con IOMCU (Pixhawk, Cube), DShot bidireccional solo funciona en salidas AUX; la máscara AUX1–4 es 3840 y algunas placas necesitan una versión del firmware cuyo nombre incluya -bdshot. Configura INS_HNTCH_FREQ por debajo de la frecuencia en vuelo estacionario; INS_HNTCH_BW suele comenzar en la mitad de FREQ, pero con notch por motor la documentación sugiere una cuarta parte. Nuestros registros de ArduPilot con esta configuración usaban MOT_PWM_TYPE 6 (DShot600), INS_HNTCH_FREQ 50, INS_HNTCH_BW 25 e INS_HNTCH_HMNCS 1 (solo 1×).

MOT_PWM_TYPE = 6
SERVO_BLH_BDMASK = 15
SERVO_BLH_POLES = 14
INS_HNTCH_ENABLE = 1
INS_HNTCH_MODE = 3
INS_HNTCH_OPTS = 2
INS_HNTCH_REF = 1

PX4 usa el notch dinámico IMU_GYRO_DNF_EN: el bit 0 sigue las RPM del ESC; el bit 1 sigue la FFT (que también necesita IMU_GYRO_FFT_EN); el valor 3 activa ambas. IMU_GYRO_DNF_HMC define el número de armónicos. Las RPM proceden de DShot bidireccional, telemetría DShot por cable (DSHOT_TEL_CFG) o ESC DroneCAN. En nuestros registros 1.16–1.17, DSHOT_BIDIR_EN = 1 activa DShot bidireccional y MOT_POLE_COUNT define los polos; nuestros registros 1.15 aún no tienen DSHOT_BIDIR_EN. La documentación actual de PX4 selecciona BDShot como protocolo en la configuración de actuadores y define los polos por motor (DSHOT_MOT_POL1…12), así que comprueba tu versión. Un registro 1.16.2 tenía IMU_GYRO_DNF_EN = 3 con DSHOT_BIDIR_EN = 0, DSHOT_TEL_CFG = 0 y DroneCAN solo para sensores: la parte RPM no tenía datos que seguir y el registro no incluía ningún parámetro IMU_GYRO_FFT_*.

DSHOT_BIDIR_EN = 1
MOT_POLE_COUNT = 14
IMU_GYRO_DNF_EN = 1
IMU_GYRO_DNF_HMC = 3

Consulta también la guía de registros de ArduPilot y la guía de PX4 ULog.

Resumen

Activa DShot bidireccional, comprueba el número de imanes y los errores en la pestaña Motors, y deja el filtro con sus valores predeterminados. Después, vuela con el registro eRPM activado y súbelo a bbdoctor para comprobar si desaparecieron las líneas del motor y si la telemetría eRPM es correcta. La comprobación de configuración funciona sin hacer un vuelo, y el informe de ejemplo muestra un análisis completo.

Preguntas frecuentes

¿Necesito DShot bidireccional si ya tengo el notch dinámico?

Sí, si tus ESC lo admiten. El notch dinámico detecta picos en el espectro del giroscopio con cierto retraso y coloca unos pocos notch para todo el cuadricóptero (3 de forma predeterminada). El filtro RPM conoce la velocidad de cada motor en cada ciclo y coloca un notch en cada armónico de cada motor. En el registro de 7 pulgadas de esta guía, el 84–87 % del ruido bruto del giroscopio por encima de 80 Hz coincidía con los armónicos del motor. Mantén el notch dinámico junto con el filtro RPM, pero redúcelo a 1–2 notch para tratar las resonancias del cuadro.

¿Cuántos armónicos debe tener rpm_filter_harmonics?

Déjalo en 3, el valor predeterminado. La mayor parte del ruido está en 1× y en la frecuencia de paso de las palas: 2× con hélices de dos palas y 3× con hélices tribladas. En el modelo de 7 pulgadas de esta guía, 3× concentraba el 68 % del ruido bruto de alabeo. Si el registro muestra que un armónico está vacío, en Betaflight 4.5 o posterior reduce su peso con rpm_filter_weights en vez de reducir el número de armónicos.

¿motor_poles debe ser 12 o 14?

Es el número de imanes en la campana del motor. En una clasificación 12N14P, es el segundo número: 12 dientes del estator y 14 imanes. La mayoría de los motores 22xx–28xx tienen 14 imanes, mientras que los pequeños 08xx–11xx suelen tener 12. Si te equivocas, Betaflight calcula las RPM con un error del 14–17 %, así que cada notch queda junto al ruido y no sobre él.

¿DShot300 o DShot600 para DShot bidireccional?

Depende de la frecuencia del ciclo PID. Para ciclos de 4 kHz y 3,2 kHz, la wiki de Betaflight recomienda DShot300 por ser la opción más fiable; DShot600 también funciona, pero no aporta ventajas. A 8 kHz necesitas DShot600, porque DShot300 solo actualiza los motores cada dos ciclos. La mayoría de los registros con DShot bidireccional de nuestro conjunto, a 4 y 3,2 kHz, usaban DShot300; el único a 8 kHz usaba DShot600.

Actualizado:

Más guías