After a bit of faff*, the thermostat is running well. While that doesn’t improve the calibrated gravity beyond the current 0.1%, it does remove the need for interpolated values across temperature, which means that non-linearity of the temperature interpolation is removed. and calibration now takes 5 minutes rather than an hour or two and a beer fridge.
I’ve also added some speculative improvements to the calibration rig. The current rig is a 10mm x 50cm x 50cm acrylic sheet, with bolt holes at each corner, which when combined with a spirit level can be levelled to 0.5º on a flat, hard surface.
It’s now enhanced with a carbon fibre sheet** (3mm) sitting loosely on top to compensate for any slight bowing in the heavy acrylic base. On top of that lies a slilicon sheet** (1mm) to buffer out some of the noise. Finally, I decided that for gravity calibration, I could reduce the dlpf from its flight value of 20Hz to a calibration value of 5Hz which should help filter out the noise from the herd of elephants*** which constantly rampages through my house.
So I took her out to see the net results. The best description of what she did was a double forward roly poly. After another run with diagnostics enabled, it seems the gyro Y axis is fried – it’s returning the rotation rate consistently as 205863755304.136**** degrees per second regardless of her real rotation rate when roly polying.
Without a decent replacement for Phoebe’s sensor, I now have no choice but to finally decommission Phoebe and bring Chloe into active service.
- SMD resistors that aren’t flat so they don’t attach firmly to the top of the MPU6050, so there thermal ‘resistance’ is higher than needed, and any slight nudge and they come off – luckily I found another one of the same size which was flat and stuck well
- Thermal epoxy glue that didn’t set for up to 48 hours, and even when set, became soft when leads are soldered to the resistor – I found a better one on e-bay used by PC overclockers call Arctic Silver which both sets in 4 hours and is a much better thermal conductor
- I added some adhesive foam to the MPU6050 underside to provide insulation to reduce the rate heat seeps away through the PCB wires (or more correctly, to increase the thermal capacity so that more heat energy is stored, and so for a fixed rate of thermal conductivity, the temperature changes more slowly)
** Both net zero cost as they were in my stockpile of “potentially useful, but currently redundant” stuff bought to solve earlier problems.
*** My 6 year old son and 3 year old daughter
**** 205863755304.136 is a very weird value to get – it’s a 64 bit precision floating point number. The gyro output is a signed 2 byte integer: 0 – 65536 represents ±250° per second rotation rate. Even after conversion to radians per second (n / 65536 * 500 * π / 180 which would produce a floating point number), the maximum value should only be ≈±4.3633.. radians per second. As a result, I do still have a niggle that there is a bug I’ve recently introduced into the code for just the gyro Y axis, but I’ve scoured the source and can’t see any handling that’s specific to just the gyro Y axis.