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.

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
- Betaflight 4.1 o posterior. La versión 4.1 incorporó DShot bidireccional y el filtro RPM.
- Un protocolo DShot (DSHOT150/300/600): con PWM, OneShot, Multishot o ProShot no se reciben RPM.
- Firmware de ESC compatible con DShot bidireccional (consulta la tabla). Bluejay se instala desde esc-configurator.com.
- El valor correcto de motor_poles: el número de imanes de la campana. Betaflight divide las RPM eléctricas (eRPM) entre motor_poles/2 para obtener las RPM mecánicas.
| ESC | DShot bidireccional | Qué hacer |
|---|---|---|
| BLHeli_S (original) | no | instala Bluejay (o JESC) |
| Bluejay, JESC | sí | nada; actívalo en el controlador de vuelo |
| BLHeli_32 anterior a 32.7 | no | actualiza a 32.7 o posterior |
| BLHeli_32 32.7+, AM32 | sí | nada; actívalo en el controlador de vuelo |
Configuración paso a paso
- Quita las hélices. Haz una copia de seguridad de la configuración con
diff all. - 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.
- Cuenta los imanes de la campana de un motor.
- 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
- 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_infomuestra 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. - Comprueba que el filtro esté activado: lo está de forma predeterminada (3 armónicos), pero algunas configuraciones copiadas pueden tenerlo en 0.
- 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 posterior | 4.1–4.2 | Predeterminado | Función | Observado en registros |
|---|---|---|---|---|
rpm_filter_harmonics | gyro_rpm_notch_harmonics | 3 | número de armónicos con notch; 0 desactiva el filtro | 3 en todos |
rpm_filter_q | gyro_rpm_notch_q | 500 (Q = 5) | anchura del notch: cuanto mayor, más estrecha y con menos retraso | 500; 700 (2025.12.5); 850 (VX3.5, 4.5.2) |
rpm_filter_min_hz | gyro_rpm_notch_min | 100 | frecuencia mínima del notch | 100; 70 (7 pulgadas, 4.6.0) |
rpm_filter_fade_range_hz | — | 50 | rango por encima de min_hz en el que el notch se desvanece | 50; 70; 80 |
rpm_filter_weights (4.5+) | — | 100,100,100 | profundidad de cada notch, en % | 100,60,100 (4.6.0); 90,50,90 (2025.12.5) |
rpm_filter_lpf_hz | rpm_notch_lpf | 150 | suaviza las RPM antes de calcular los notch | 150 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.

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 %):
- saltos: cambios de RPM superiores al 35 % entre tramas, por encima de 30 Hz. Un motor con hélice no puede cambiar de velocidad tan rápido; es un error de lectura.
- ceros: RPM inferiores a 5 Hz en un motor que está girando.
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.

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íntoma | Causa | Solución |
|---|---|---|
| Con dshot_bidir activado, los motores no giran o muestran 0 RPM | El 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 RPMFILTER | El filtro RPM está activado, pero al menos un ESC no envía RPM | Busca 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 vez | Una causa común en el controlador de vuelo: el método de salida DShot o recursos de motor reasignados | Prueba dshot_bitbang = OFF en lugar de AUTO (o a la inversa) y restaura los recursos predeterminados |
| Errores o saltos de eRPM en un motor | Soldadura del cable de señal, recorrido junto a los cables de alimentación o canal del ESC | Vuelve 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 bajas | Valor incorrecto de motor_poles | Cuenta los imanes e introduce ese número |
| DShot bidireccional activado, pero el registro no tiene eRPM | 4.5+: registro RPM desactivado; 4.1–4.4: no existe el campo eRPM | blackbox_disable_rpm = OFF o actualiza a 4.5 o posterior |
| Filtro activado y motores aún calientes | Ruido ajeno a los armónicos: resonancia del cuadro, hélice doblada o rodamiento; o exceso de D con pasa bajos D-term relajados | Lee 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/ProShot | Cambia el protocolo a DShot |
| La comprobación indica: «El filtro RPM está desactivado aunque hay datos RPM» | rpm_filter_harmonics = 0 | Restablé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: