The Hall effect occurs when a perpendicular magnetic field deflects moving charge carriers in a semiconductor, generating a transverse millivolt potential. In a digital hall effect sensor, this raw analog voltage is never exposed to the outside world. Instead, it feeds an internal comparator equipped with a Schmitt trigger, which snaps the output to a clean binary HIGH or LOW state based on precise magnetic thresholds.
This internal hysteresis—the gap between the magnetic field strength required to turn the sensor ON ($B_{OP}$) and the weaker field required to turn it OFF ($B_{RP}$)—is what makes digital variants so robust. Unlike analog hall sensors (like the SS49E) that require an ADC and software filtering, digital sensors eliminate contact bounce and noise natively. They are the definitive choice for counting gear teeth, measuring shaft RPM, and acting as non-contact limit switches in dirty, high-vibration environments.
Understanding the Digital Output and Sensor Variants
Before wiring anything, you must understand what the output actually is. A digital hall sensor does not output a varying voltage proportional to magnetic flux. It outputs a switched DC logic level. These outputs come in two flavors:
- Open-Drain (NPN): The internal transistor pulls the output pin to Ground when activated. It cannot drive the line HIGH. You must provide an external pull-up resistor (typically 4.7kΩ to 10kΩ) to your microcontroller's logic voltage (3.3V or 5V).
- Push-Pull (CMOS): The IC actively drives the pin both HIGH (to VCC) and LOW (to GND). No external pull-up resistor is required, making these ideal for low-power battery applications.
No. The magnetic operate ($B_{OP}$) and release ($B_{RP}$) thresholds are laser-trimmed at the factory. You do not need to scale voltage to Tesla. Your only "calibration" involves setting the mechanical air gap between the magnet and the sensor face, and tuning software debounce timings in your microcontroller code.
Selecting the right IC depends on your magnetic pole arrangement. Unipolar sensors trigger on a single pole (usually South) and ignore the other. Bipolar latches trigger on a South pole and stay latched until a North pole is presented. Here is a data-dense breakdown of the most common digital hall sensors used on the bench:
| Part Number | Type | Supply Range (VCC) | Typ. $B_{OP}$ (mT) | Output Stage |
|---|---|---|---|---|
| Allegro A3144 | Unipolar Switch | 4.5V to 24V | 3.0 mT (30 Gauss) | Open-Drain |
| Melexis US1881 | Bipolar Latch | 3.5V to 24V | 3.5 mT (35 Gauss) | Open-Drain |
| TI DRV5013AJ | Bipolar Latch | 1.6V to 5.5V | 3.0 mT (30 Gauss) | Push-Pull |
| Infineon TLE4906L | Unipolar Switch | 2.7V to 28V | 7.5 mT (75 Gauss) | Open-Drain |
Wiring Pinouts and ESP32/Arduino Integration
Most through-hole digital hall sensors (like the TO-92 package A3144) share a standard 3-pin footprint. When holding the sensor with the flat, stamped face toward you and the leads pointing down, the pinout from left to right is VCC, GND, and OUT.
| Pin | Function | Connection Details |
|---|---|---|
| 1 (Left) | VCC | Connect to power supply within the IC's rated range. For ESP32 projects, use the 3V3 pin if using a DRV5013, or the 5V/VIN pin for an A3144. |
| 2 (Center) | GND | System ground. Must be shared with the microcontroller's GND to ensure a common logic reference. |
| 3 (Right) | OUT | Digital signal. Add a 4.7kΩ pull-up resistor to 3.3V if the sensor is Open-Drain and your MCU lacks internal pull-ups. |
Output Signal Math: From Raw Pulses to Physical Units
Because the output is strictly binary, you cannot read a magnetic field strength in Teslas directly from a digital sensor. Instead, the "raw reading" is a pulse count over time, and the "physical unit" is typically Revolutions Per Minute (RPM) or linear velocity.
To convert raw interrupt pulses to RPM, use this formula:
RPM = (Pulse Count × 60) / (PPR × Seconds)
Worked Example: You have a motor shaft with 4 neodymium magnets attached (Pulses Per Revolution, PPR = 4). Your ESP32 interrupt counts 120 pulses over exactly 1.0 seconds.
RPM = (120 × 60) / (4 × 1.0) = 7200 / 4 = 1800 RPM.
Below is robust, copy-pasteable ESP32 code using hardware interrupts and critical sections to prevent missed pulses at high RPMs. This references the Espressif GPIO interrupt API principles adapted for the Arduino framework.
// ESP32 Digital Hall Sensor RPM Calculator
#define HALL_PIN 18 // GPIO 18 supports hardware interrupts
#define PPR 4 // Pulses per revolution (number of magnets)
#define SAMPLE_MS 1000 // Sampling window in milliseconds
volatile unsigned long pulseCount = 0;
volatile unsigned long lastMicros = 0;
// Interrupt Service Routine (ISR)
void IRAM_ATTR hallISR() {
unsigned long currentMicros = micros();
// Software debounce: ignore pulses closer than 200us (max ~5000 Hz)
if (currentMicros - lastMicros > 200) {
pulseCount++;
lastMicros = currentMicros;
}
}
void setup() {
Serial.begin(115200);
// Use INPUT_PULLUP if sensor is open-drain and no external resistor is used
pinMode(HALL_PIN, INPUT_PULLUP);
attachInterrupt(digitalPinToInterrupt(HALL_PIN), hallISR, FALLING);
}
void loop() {
static unsigned long lastSample = 0;
if (millis() - lastSample >= SAMPLE_MS) {
// Safely read and reset the volatile variable
noInterrupts();
unsigned long count = pulseCount;
pulseCount = 0;
interrupts();
// Calculate RPM
float seconds = SAMPLE_MS / 1000.0;
float rpm = (count * 60.0) / (PPR * seconds);
Serial.print("Pulses: "); Serial.print(count);
Serial.print(" | RPM: "); Serial.println(rpm, 1);
lastSample = millis();
}
}
Interference Sources and Bench Troubleshooting
Digital hall sensors are highly immune to dust, oil, and optical interference, but they are not invincible. When a sensor behaves erratically on the bench, it is almost always due to magnetic or electrical interference. Here are the most common culprits and how to fix them.
| Symptom | Root Cause | The Fix |
|---|---|---|
| Sensor is permanently stuck LOW (or HIGH). | Mounted using steel/ferrous screws or brackets, skewing the baseline magnetic flux past the $B_{OP}$ threshold. | Replace mounting hardware with brass, nylon, or austenitic stainless steel (300-series) M3 screws. |
| Random double-counting or phantom pulses at high RPM. | Electromagnetic Interference (EMI) from nearby brushless motors or switching power supplies inducing voltage spikes on the signal wire. | Route signal wires away from motor phases. Add a 10nF ceramic capacitor between the OUT pin and GND to filter high-frequency EMI. |
| Sensor fails to trigger when hot, but works fine cold. | Temperature drift. Hall IC thresholds drift with heat, and neodymium magnets lose flux density (remanence drops ~0.11%/°C). | Decrease the mechanical air gap by 1-2mm, or switch to a Samarium Cobalt (SmCo) magnet which has a much lower temperature coefficient. |
| Bipolar latch (e.g., US1881) refuses to change state. | Using only one pole of the magnet, or presenting the magnetic field parallel to the sensor face instead of perpendicular. | Ensure the magnet is oriented to present alternating North/South poles directly at the flat, stamped face of the TO-92 package. |
By matching the correct digital topology (unipolar vs. latch) to your mechanical design, respecting the open-drain pull-up requirements, and keeping ferrous metals out of the immediate air gap, digital hall sensors will provide years of bounce-free, high-resolution position data for your embedded projects.






