I am currently working with a custom board that has the LSM303DLM module on it. I am successfully reading correct data via the I2C interface and calculating a heading based on the process of this source:
github.com/ryantm/LSM303DLH
I am working in C (not C++) on a dsPIC so I had to make a few minor changes but nothing functional.
The heading I am getting seems to be very weighted towards the south pole. At magnetic north I get a heading of 0, and south a heading of 180. But at what should be about 135 degrees I get a reading of 90 degrees and at about 225 degrees I get a reading of 270.
In other words the rotation of readings is very slow around the north pole and fast around the south pole. Most of the calibrations I have found have just been a scaling of the data which does not fix this problem. And I have tried to follow the process of this source:
pololu.com/file/download/LSM … e_id=0J434
But I had trouble following the math without example data, and my setup is not ideal for getting reliable data at known orientations.
What I am looking for is a step by step set of equations to correct my readings (not just scale them). Also, most of the solutions I have seen reference MATLAB to get and plot the data but I do not have access to this either.
If it helps, here are the maximum and minimum values of each of the readings for my device (not scaled):
x min: -540
x max: 320
y min: -710
y max: 163
z min: -426
z max: 419
Thanks for your help.