how much resolution from ADC with linear magnetic sensors?

I want to turn the two voltage outputs from linear Hall sensors into a distance travelled along a magnetic strip of alternating N and S poles.

I researched that if the two signals have a sine and cosine phase relationship, I can use arctan = Vsin/Vcos to give the angle in degrees (from 0 to 90) within one N to S traverse.

If I use the arduino ADC with 10 bits to measure a sine wave of 5 volts peak to peak, how many subdivisions can I obtain?

I need some help on the maths of this!

I tried plotting on graph paper and seems only up to sine 87 degrees with 10 bit ADC is possible?
So if all steps are to be equal, that is only 30?

Thanks if you can help.

using 511 steps 0..90 deg. (adding 1/2 before truncating to int)
Angles 86 and 87 deg returns analogvalue 510
88..90 deg returns 511 (max)
max error close to top of curve +/- 1.5 deg

If u got an 90deg delayed curve, u can do much better than this as the second one will change about 6 steps/deg

Best performace, full range, will be close to 1/5 of a deg. (511steps/90deg=5.6steps/deg)
This is not what u actually will get. components +/- n% tolerance in performance - hysteresis ? - noise

Thank you knut_ny.

If u got an 90deg delayed curve, u can do much better than this as the second one will change about 6 steps/deg

I can see the more linear slope giving larger changes in V for equal movement steps on the oscilloscope.
It all sounds very obvious, but thank you for confirming that the 'delayed' curve from a second sensor can retain the resolution.

So this is the other purpose of 'quadrature' ie to fill out the hump when sin or cos voltage is near max or min.

It has not been at all clear to me from researching arctan = Vsin/Vcos how the resolutions claimed were being obtained with the number of bits available in the ADC used.

I hope I have understood you correctly, because I can't find any examples of coding this signal processing method to see if it had been done before.

I can't find any examples of coding this signal processing method to see if it had been done before.

It is quite common. Google "sine cosine quadrature encoder" for more information. Example:

http://www.diegm.uniud.it/petrella/Azionamenti%20Elettrici%20II/Sensori%20e%20trasduttori/Data%20Sheet%20-%20452913422000_sin_encoder.pdf

Thanks.
The link was helpful, although I think I've read through the paper previously from another source.

There is still an assumption being made that using arctan = Vsin/Vcos does something magical to the ADC values.

This paragraph on page 3 of your link for example.
If the ADC values are 12 bit, there is no more distinct changes in the voltage as it nears the top of the sine wave. The resolution concluded here seems to relate to a triangle wave with a linear slope all the way.

As seen from Figure 5, the resultant error in the
computation is always less than or equal to 0.01
degrees per electrical revolution. In addition, for an
encoder that offers 512 electrical cycles per
mechanical revolution, the 9 MSBs of position
information come from the cycle information as
29
=512, the number of lines in the encoder. This
means that the error occurring in Figure 5 due to the
finite quantization levels and calculation inaccuracies
of the DSP is at the 15th bit position of the computed
16-bit fine position value. This implies that the
fundamental limit on the 16-bit fixed point DSP
calculation used in this method is located at the 24th
bit in position (for a 512-line encoder). In other
words, the maximum achievable resolution from such
a solution is given by 2-24 * 360 * 60 * 60 = 0.077
arc-sec .

I have now found (only) one reference on the web to an IC integrated interpolator which mentions a NON-LINEAR 8 bit A/D conversion to obtain an interpolation of n=50.

The angle related to movement of sensor arctan = Vsin/Vcos could possibly then retrieve resolution at the top and bottom of the sine curves.
But noise, offset and response errors would also be converted in a non-linear fashion as well.
I am not convinced this is the answer as to how 4096 positions are obtained from one sine period with only 12 bit ADC.

Of course a non-linear conversion with 12 bits is very different to the Arduino ADC.
Or any other kind of normal A/D converter.