12-bit ADC Code Jumps When Motor Driver Enables
A 12-bit SAR ADC in a motor-control board uses a 3.3 V reference, so one LSB is about 0.8 mV. The ADC communicates over SPI at 1 MHz to an MCU. A 500 kHz buck converter supplies the digital rail, and a brushed DC motor driver shares the same board ground. With the motor disabled, the ADC code is stable within ±1 LSB. When the motor driver enables, the code jumps by ±4 LSB, and the effect depends on which ground point is used for the ADC input return. A ferrite bead between analog and digital ground is fitted, but the ADC ground pin still carries about 30 mA of digital return. The product needs 12-bit accuracy but has no room for a separate analog supply.
1. What is the most likely cause of the ADC code jumps, and why does the ferrite bead fail to eliminate them?
Read the worked answer
The symptom points to ground bounce or shared return impedance rather than ADC resolution. The motor driver and digital buck currents flow through the board ground, and about 30 mA of digital return still passes through the ADC ground pin. Even a few milliohms of shared trace or plane impedance at the motor-driver switching frequency can develop several hundred microvolts, which is multiple LSBs at 0.8 mV/LSB. The ferrite bead isolates high-frequency noise but does not remove DC or low-frequency return current, and it may even create a differential ground voltage across the bead. The ADC measures its input relative to its own ground pin, so any ground disturbance appears as code shift. The dependence on the ground return point confirms a return-path problem.
2. What measurement would you make to confirm the diagnosis before changing the layout?
Read the worked answer
Measure the ADC ground pin voltage relative to the analog input source ground with a short-ground-tip probe, both with the motor disabled and enabled. Use AC coupling and sufficient bandwidth to see switching transients, and compare the result with the ADC code jumps. Also measure the analog input with a differential probe or a clean external reference to separate input noise from ground shift. Inject a known DC input and capture the ADC output while the motor driver switches; if the code shift tracks the ground-pin voltage, the diagnosis is confirmed. Check the buck converter switching node and motor-driver return current with a current probe to identify which return path dominates.
3. Recommend a fix that preserves 12-bit accuracy without adding a separate analog supply.
Read the worked answer
Rework the grounding so the ADC analog return is a quiet island connected to the digital ground at one point, and route motor-driver and buck returns away from the ADC ground pin. Add an RC filter at the ADC input and a local reference bypass capacitor. If the ADC supports differential input, use it to reject the ground shift. The ferrite bead alone is not sufficient; it should be placed only after the return current path is controlled. If layout cannot be changed, use an external delta-sigma or 16-bit ADC with a true differential input and isolated front end. Verify by repeating the motor-enable test and confirming the code stays within ±1 LSB at the specified input.