The Sensing Principle: Lorentz Force in Semiconductors

When a bias current flows through a thin semiconductor element and a perpendicular magnetic field is applied, the Lorentz force deflects the moving charge carriers to one edge of the material. This charge accumulation creates a measurable transverse voltage—known as the Hall voltage—that is strictly proportional to the magnetic flux density passing through the element.

In modern integrated modules, this microvolt-level signal is immediately amplified by an on-chip operational amplifier. Linear sensors output a continuous ratiometric voltage that scales with field strength, while switch sensors route the amplified signal through a Schmitt trigger to output a clean digital HIGH or LOW at specific magnetic thresholds. Understanding which output architecture your module uses is the critical first step in hall effect sensor testing, as the wiring and microcontroller code diverge completely between the two.

Wiring and Pinout Reference

The most common failure mode in hall effect sensor testing is misidentifying the pinout or exceeding the supply voltage. While the industry standard 3-pin SIP package looks identical across analog and digital variants, their internal architectures and voltage tolerances differ. Below is the hardware specification matrix for the two most common bench sensors: the A3144 (Digital Switch) and the DRV5055 (Linear Analog).

Table 1: Hall Effect Sensor Hardware Specifications
Parameter A3144 (Digital Switch) DRV5055A1 (Linear Analog)
Supply Voltage (VCC) 4.5V to 24V 2.7V to 5.5V
Output Type Open-Drain Digital (Active LOW) Ratiometric Analog Voltage
Quiescent Current ~4.5 mA ~2.5 mA
Pin 1 VCC VCC
Pin 2 GND GND
Pin 3 OUT (Requires Pull-up Resistor) OUT (Direct to ADC)
Wiring Rule: Never power a 3.3V ESP32 GPIO directly from a 5V A3144 digital output without a logic level shifter or a voltage divider. The open-drain output requires a pull-up resistor; tie the 10kΩ pull-up resistor to the ESP32's 3.3V rail, not the 5V VCC rail, to ensure the HIGH state does not exceed 3.3V.

Output Signal Math: Raw ADC to Milli-Tesla

A frequent mistake in embedded tutorials is conflating digital and analog outputs. Digital switches (like the A3144) require zero math: the output pin simply pulls LOW when the magnetic field exceeds the operate point (typically 30 Gauss / 3 mT) and releases when it drops below the release point (hysteresis). Linear sensors, however, require explicit raw-to-unit scaling.

Analog Scaling for the DRV5055A1

The DRV5055A1 is a 3.3V-compatible linear sensor. Its output voltage is ratiometric to the supply voltage. At zero magnetic field, the output sits at exactly half the supply voltage (the null offset). According to the Texas Instruments DRV5055 datasheet, the A1 variant has a nominal sensitivity of 60 mV/mT.

The Math:

  • V_quiescent = V_s / 2 (If V_s = 3.3V, V_q = 1.65V)
  • V_out = V_quiescent + (Sensitivity × B_field)
  • B_field (mT) = (V_out - V_quiescent) / 0.060

To implement this on an ESP32 using the internal 12-bit SAR ADC (which reads 0 to 4095), we convert the raw integer to voltage, then to milli-Tesla. Note that 1 mT = 10 Gauss.

// ESP32 Hall Effect Sensor Testing Code (DRV5055A1)
const int HALL_PIN = 34; // ADC1_CH6
const float V_REF = 3.3;
const int ADC_MAX = 4095;
const float SENSITIVITY = 0.060; // 60 mV/mT for A1 variant

float zeroOffsetVoltage = 1.65; // Calibrated at runtime

void setup() {
  Serial.begin(115200);
  analogReadResolution(12);
  calibrateZeroOffset();
}

void calibrateZeroOffset() {
  long sum = 0;
  // Average 200 reads with NO magnets present to find true null offset
  for(int i = 0; i < 200; i++) {
    sum += analogRead(HALL_PIN);
    delay(2);
  }
  int rawZero = sum / 200;
  zeroOffsetVoltage = (rawZero * V_REF) / ADC_MAX;
  Serial.printf("Calibrated Zero Offset: %.3f V\n", zeroOffsetVoltage);
}

void loop() {
  int rawADC = analogRead(HALL_PIN);
  float vOut = (rawADC * V_REF) / ADC_MAX;
  
  // Calculate Magnetic Flux Density in mT and Gauss
  float bField_mT = (vOut - zeroOffsetVoltage) / SENSITIVITY;
  float bField_Gauss = bField_mT * 10.0;
  
  Serial.printf("Raw: %d | V: %.3f | Field: %.2f mT (%.1f Gauss)\n", 
                rawADC, vOut, bField_mT, bField_Gauss);
  delay(100);
}

Calibration, Interference, and the ESP32 ADC Trap

Getting the math right is only half the battle. Real-world hall effect sensor testing introduces environmental noise and microcontroller quirks that will corrupt your data if left unaddressed.

The ESP32 ADC Non-Linearity Trap

The ESP32’s internal SAR ADC is notoriously non-linear at the voltage extremes (below 0.15V and above 3.1V). If your magnetic field pushes the DRV5055 output near the 3.3V rail, your readings will flatten out and compress. The fix: For precision analog hall testing on an ESP32, bypass the internal ADC entirely and use an external I2C ADC like the ADS1115 (16-bit, highly linear, ~$4 on breakout boards).

Common Interference Sources

  1. Switching Power Supply EMI: Buck converters and PWM-driven motor drivers generate high-frequency magnetic noise. Always place a 0.1µF ceramic decoupling capacitor directly across the sensor's VCC and GND pins, as close to the plastic housing as physically possible.
  2. Ferrous Enclosure Distortion: Steel screws, metal breadboard backplates, and iron-core inductors bend magnetic flux lines. A magnet held 10mm from a sensor on a wooden bench will yield a completely different Gauss reading than the same setup mounted inside a steel project box. Maintain a minimum 15mm clearance from ferrous metals.
  3. Temperature Drift: The Hall element's sensitivity shifts with ambient temperature. While premium sensors like the DRV5055 feature internal temperature compensation, cheap unmarked eBay modules (often cloned SS49E variants) can drift by 10% to 15% over a 30°C temperature swing. Always calibrate your zero-offset at the operating temperature.

Decision Tree: Selecting the Right Hall Module

Do not default to the sensor that happens to be in your parts bin. Use this decision path to select the correct architecture for your specific testing or deployment scenario.

Table 2: Sensor Selection Decision Matrix
Application Requirement Required Output Concrete Part Pick
Measuring exact field strength (e.g., current sensing, joystick position, material thickness) Linear Analog DRV5055A1 (3.3V) or SS49E (5V)
RPM counting, gear tooth sensing, or limit switching (needs clean edges) Digital Switch A3144 (5V) or DRV5012 (3.3V)
Detecting both North and South poles with distinct digital states Digital Latch A3144 (Latch variant) or SS41
The Final Verdict: If you are building a general-purpose magnetic field measurement tool or testing linear displacement on a 3.3V microcontroller, buy the TI DRV5055A1. It eliminates the 5V-to-3.3V level-shifting headache, provides excellent internal temperature compensation, and its 60 mV/mT sensitivity perfectly spans the usable linear range of modern microcontroller ADCs. For simple RPM counting or door-switch applications on a 5V Arduino Uno, the A3144 remains the undisputed, high-noise-immunity workhorse.

For further reading on magnetic position sensing architectures and layout best practices, refer to the All About Circuits guide on Hall Effect integration. Always verify your specific module's sensitivity curve against its manufacturer datasheet before finalizing your scaling math.