Some Compass Calibration Queries

I have been building and testing a 500 mm hexacopter and it is flying nicely …

However, occasionally when I switch to Loiter mode, the copter will start “toilet-bowling”. Switching back to “Stabalise” and then back to “Loiter” usually stops the toilet-bowling. So, I decided to go through the Compass_Mot process to check if there was very much interference from the motor currents.

My external compass is mounted on the same PCB as the N8M GPS module and is up on a carbon fibre rod about 140 mm from the nearest motor wiring. So, I wasn’t expecting to see much interference. However, this is the results that I got:

COMPASS_MOT_X = -3.819818
COMPASS_MOT_Y= 3.233983
COMPASS_MOT_Z = 2.478025

and an interference percentage of 58% … :open_mouth:
I am surprised that it is so high, although each motor draws about 6A at hover.

My queries are:

  1. Is this level of interference typical given that the external compass is 140 mm above the motor wires?

  2. Will the COMPASS_MOT calibration be sufficient to prevent toilet-bowling, or do I have to mount the external compass even higher to get the interference below 30%?

  3. How can I find out (in Mission Planner) what compass is being detected and used?

  4. The internal compass on the FC does not seem to be detected at all. I thought that the internal one is used as a redundant backup, if required? Or, do I have to enable it somehow and calibrate it separately?

Here is some more information that relates to my earlier queries. I am running ver 3.5.5 of Copter on a Pixhawk 2.4.8 and the latest version of Mission Planner. This is what I see in the Compass section of MP:


Notice that the “on-board” compass doesn’t appear to be detected, as there are no offsets displayed - is that correct?

Is there anyway that I can see in MP what sensors Copter has found on the Pixhawk and is using?