There is a group of people who think that the RPM Filter is the best thing to happen to flight controllers and quadcopters since the sliced bread. Perhaps. I'm more inclined to believe that RPM Filter is just an example of good functionality. But it will not be about that, so let's go back to the topic.
Joshua Bardwell asked me a question if INAV uses ESC telemetry for the RPM filter. The answer was, of course: yes, INAV has no Bidir-DSHOT support, and 4th wire is required for RPM filter in INAV.
But the latency and jitter makes it unusable. Isn't that the whole reason for bidirectional dshot development
Is it true that the RPM filter is unusable without Bidirectional DSHOT, and a flight controller really has to know the RPM after each motor update? How much jitter RPM data has and how fast motor can accelerate and decelerate? If you have no idea what's I'm talking about, here is an express course to RPM filtering:
- Bidirectional DSHOT allows ESC to report motor RPM after each DSHOT packet. If the main looptime is processed at 4kHz, RPM is also obtained at 4kHz
- ESC telemetry gets RPM data one ESC at a time. On a quadcopter (4 motors) and 4kHz control loop, each motor RPM is then updated at 1kHz
- RPM filter sets a series of narrow notch filters on gyro data, one for each motor on every axis. Four motors, three axes, 12 notch filters in total.
- By default, notches are placed with a Q factor 5, so for example at notch center of 233Hz (14k RPM equivalent) attenuation band starts at around 211Hz, reaches max attenuation at 233Hz and then fades at 255Hz
- Notches are updated to match current motor RPM
The real questions now are:
- How much jitter RPM data have?
- How quickly motor with a propeller accelerates and decelerates?
- Is the 1kHz update rate via ESC telemetry enough?
I did an experiment, recorded a Blackbox log, and now I will share my findings with you.
- Freestyle quadcopter
- 2208 2450KV XING-E motors
- Dalprop Nepal N1 props
- 3-minute freestyle flight with punch-outs, flips, rolls and all the other figures
- jitter and acceleration analysis of the recorded log
In general, this quadcopter is slightly overpowered. 2208 stator size is just too much for 5-inch propellers. Most probably, on smaller motors (2205, 2206, 2207 and 2306) propeller acceleration profiles would be lower.
All the acceleration units are in Hz/ms (Hertz per millisecond). Why? Notches work with Hertz and in our example each motor RPM is updated every 1ms. It's a very nice measure of how much motor frequency can change between measurements.
After looking at the available data turned out that:
- Average jitter was 0.5Hz/ms
- Highest jitter was 3,5Hz/ms
- In general, jitter was greater during deceleration than during acceleration or stable rotation speed. This suggests that at least some of the jitter was caused by induction load and flyback causing ESC missing single commutation cycles. Not full desync, just problems with measurements
- The highest recorded motor acceleration (at least 50ms in length and correlated with the throttle or other stick movement) was 1,7Hz/ms. This translates to 104k RPM/s. Yes, 104000 rotations per minute per second. It's less than a quarter of a second to reach 25k RPM!
- The highest recorded motor deceleration was 2,3Hz/ms. 138k RPM/s.
The conclusion is that... well... remember 32k mode? It turns out that 1ms update rate on a motor RPM via ESC Telemetry is just enough. Yes, it is possible that not all the notches from RPM filter hit precisely noise frequencies introduced by motors. The error can reach even up 15% from the filter center frequency, but mostly during decelerations (jitter or micro desync), and even then, it's well inside the filter band to be effective. During better scenarios, the error will be closer to 10% and way inside attenuation band.
I also checked the FFT graph of the reported motor rotation speed. It turns out that most updates have a frequency of around 50Hz or even less. Yes, there are some outliers but no visible spikes above 100Hz.
Bottom line: ESC Telemetry is good enough for the RPM filter, and the main advantage of Bidirectional DSHOT is wiring simplicity, not an increased update rate! Not perfect, but good enough. And we have no idea how precise ESC measurements really are. I have a feeling that not that precise as people like to think.
But we all love big numbers, don't we?