Hall Sensor Use on the Teensy LC

So… I have a 49E hall sensor and I am only going to use one pole of the dual pole design for the sensor and of course run the output into the 10bit DAC. All this is fine and I can get it to work and take readings, however the issue I have is that I would like to be able to get more range out of the ADC to have finer steps…

The LC uses a Voltage of 3.3V and the Middle voltage on the 49E is 1.65V, the Min output voltage is .87v. The way my project works I have a very tight space for the sensor nd magnet and there is only about 3mm distance change that can be done… so at resting the voltage is .87v and at the Max distance for the magnet the sensor reads about 1v.

With this voltage swing I get access to only about 80 steps of the 1024 of the 10 Bit DAC.

I have tried changing the AREF input to 1V and I do get a few more steps bout 120 as I take away the wasted high end steps compressing the ADC voltage range.

I have also tried a voltage divider on the output to drive it closer to zero and then lowering the AREF to compress the range even more and have been able to extract about 200 steps however I think I hit a limit on the AREF input as there is a point that it the AREF doesn’t accept voltages below (not sure exactly what that limit is).

Some of this additional steps were achieved as well by using a much much smaller magent, I am down to a 2mm did x 1mm thickness (which is about as small as I can go).

So my question is does anyone know of anything that will allow me to extract more range out of the ADC, I don’t believe I can just read voltages unless I am missing something . (wishing they had a low voltage limit as well as the AREF high voltage limit so the 1024 steps would be compressed into a range)

I have found an Unidirectional HALL sensor made by TI that would give me a bunch more range but it is also about 20x the price of the 49E so I really would prefer not to go that route.

I can also use the map() programming function but that really isn’t going to give me added resolution it is just going to remap the output to higher number ranges…

NOTE: I have thought of using a JFET variable resistor set-up on the output but I really am hoping that I won’t have to go that far electronically and as well that would add complexity and about as much cost as just getting the TI sensor.

Anyway any thoughts on this or possible methods that I haven’t thought of would be great

So ideally you need 0.87V to read 0 and 1.00V to read 1023? In other words, translate 0.87V to 0V and 1.00V to 3.3V before feeding this to the ADC input.

I guess you could put one or maybe two operational amplifiers between the sensor output and the ADC. This would allow you to adjust the range and centre point of the signal to cover the input range of the ADC.

Another option would be to use an external ADC with higher resolution and adjustable gain, such as ads1115.

PaulRB:
So ideally you need 0.87V to read 0 and 1.00V to read 1023? In other words, translate 0.87V to 0V and 1.00V to 3.3V before feeding this to the ADC input.

I guess you could put one or maybe two operational amplifiers between the sensor output and the ADC. This would allow you to adjust the range and centre point of the signal to cover the input range of the ADC.

Another option would be to use an external ADC with higher resolution and adjustable gain, such as ads1115.

Thank you I will have to look into that and yes the ideal would be as you described as it would give full range input over the distance covered.

Just a question because I haven't researched it out with an external ADC how would that read into the arduino, Im guessing I could probably easily figure it out but I haven't researched it out yet?

Ads1115 uses i2c interface.

PaulRB:
Ads1115 uses i2c interface.

Thank You