The seat remembers: Brushed DC motor ripple counting drives innovation in full-featured memory seats

My parents have an SUV that they share between them. When I go home, I might also use their car to visit old friends or run errands. When all three of us are using the same car, we each have to adjust the driver’s seat height, the distance from the steering wheel and the pedals, the steering wheel height, the angle of the chair back, and the angle of the rearview and side mirrors.

Many high-end luxury automobiles have full-featured memory seats and mirrors, where drivers create their own seat “profile” with their preferred angle and height adjustments. With this feature, my parents could save time by not having to readjust the seat and mirrors.

As my colleague Clark Kinnaird discussed in his blog post, “Putting innovation in the driver’s seat,” small brushed DC motors are controlling more and more axes of seat adjustment. Existing technology to measure these seats uses magnetic Hall-Effect sensors attached to the body of the DC motor. Magnetic poles rotate in the motor shaft and provide a field for sensor capture. Multiple sensors can measure the speed and total number of motor rotations and subrotations. The number of motor rotations can be inferred and directly translated into the total distance moved by the seat for that particular axis and saved on the memory seat control module’s microprocessor.

Measuring position

Positional memory and motor speed are not only popular for car seats. Many small-motor automotive applications – including power windows, sliding doors and lift gates – can use information about the speed of the motor to determine stall conditions for pinch detection and optimize motor speed for efficiency with pulse-width modulation (PWM) control. Side mirrors can adjust based on different user conditions, such as changing angles to a set position to give drivers a better view when backing the car into a parking spot. Small motors are everywhere in automobiles, and a simple positional memory solution provides a wide array of convenient features.

There is growing interest in determining motor position and rotational speed without the need for sensors; in some cases redundancy in sensing helps avoid mechanical and electrical failures in memory seats. As small motors control more axes of seat position, there is a need for more Hall-Effect sense elements mounted to the motors, more Hall-Effect sensing integrated circuits (ICs) and more harness wiring to drive the motors and capture sensor data.

Using motor current ripple to measure position

Over the years, research has shown methods for capturing brushed DC motor speed and rotational position by measuring the total current flowing through the motor and counting the current ripples generated by the motor’s back-electromotive force (back-EMF). This back-EMF is proportional to the motor speed and generated by the induction of magnetic energy onto the motor commutator poles. The DC motor armature voltage and sinusoidal back-EMF cause the total current flowing through the motor to have a sinusoidal waveform.

Equation 1 expresses the total current flowing through a motor as:

where Varm and Rarm are the voltage applied to the motor armature and the resistive load seen on the armature.

Equation 2 expands VBEMF to be represented by the frequency of the motor as:

where Ke is a motor-specific machine constant and ωr is the rotor speed.

Back-EMF will be applied to every coiled commutator pole, and every shifting of a coil within the magnetic field causes the wire to conduct and create a ripple.

As the motor is turning, the motor brushes cause a short between adjacent commutator poles. This short lowers the effective armature resistance, increasing the total current flow, as seen in Figure 1. Every commutator pole subrotation will cause this effect and add to the current ripple.

Figure 1: Impedance changes that occur due to motor rotation

Effective ripple counting

Now that you understand where motor ripple comes from, you must come up with an effective way to actually measure it. Unfortunately, it’s not as simple as just using a comparator to translate the periodic ripple signal into a general-purpose input/output (GPIO) trigger for a microcontroller. Besides the AC component signal that you need to measure, there is a widely varying common-mode DC component that makes signal biasing and comparator threshold configuration difficult.

The DC level of the signal depends on the motor and changes depending on load. As the load increases, the amount of torque necessary to move the load increases. A larger torque leads to slower motor speeds, and as you can see in Equation 1, will directly change the total DC current. This effectively creates a constantly changing DC bias point for your ripple signal based on the load.

In other applications with biasing issues, you could remedy this with a simple DC decoupling capacitor in the signal path. With correct filtering, you can remove the DC point from the output of a current-sense amplifier, while a simple resistor divider can reconfigure the bias point for optimal signal swing for the comparator stage.

For a ripple counter application, there is another issue at hand. Upon motor startup, there is a very large current spike due to the initial energy needed to fight friction and the momentum necessary to get the motor turning. Motor ripples are typically around 100 to 1000Hz, so the size of the decoupling RC filter becomes fairly large to block DC and pass the ripple signal. With the necessary RC filter size, the time constant also increases. The current spike transient is fast and large enough to not look like a DC signal for a DC-blocking capacitor.

Creative circuitry has led to the development of an innovative way to measure motor ripples while also avoiding complexity in digital signal processing. Figure 2 shows how to effectively translate the initial current measurement with the large transient spike (yellow) into a very easily measured signal for a microcontroller (purple). More details on how to achieve this can be found in the Brushed-Motor Ripple Counter Reference Design

Figure 2: Translating motor current ripple (yellow) into countable signal (purple)

Ripple counting provides a new approach for existing technologies to provide a more comfortable and convenient driving experience. As memory seats continue to expand beyond luxury vehicles, I can see my family using a car with these much-appreciated memory features. Concepts like DC motor ripple counting will help us get there.

Additional resources

  • Mr.Matthew

    My name is shundai.

    I am Japanese student in University.

    I usualy study blushed motor by sensor less.

    But I don't understand what INA240-Q1 output by oscilloscope,  I bought INA240-Q1 and checked the MABUCHI small motor's rippule pulse in PWM.

    Could you tell me the detail of what INA240-Q1 output by  oscilloscope.

    under In Japanese.






  • Hi Matthew,

    Thank you for your kindness, I will do your suggestion.

    And if I have further private question I will send you email.

    Thank you very much.

    Best Regards,


  • Hi Lukman,

    For this design, I put together a very simple code for the MSP430 that utilizes the Timer_B timer counter to capture the purple waveform in Figure 2 above. The timer counter can capture the incoming pulses rising/falling edges as an interrupt, tick up or down a simple variable based on direction, then wait for the next pulse to occur.

    Additionally, using the timer counter, we can include some error correction and verification by measuring the period of between sequential pulses and verify that they meet what would be a rough estimate of the expected frequency of the motor given the Battery voltage and DC current flowing into the motor. This is discussed shortly in the design guide.

    I did not publicly post the code that I used for my testing, but if you need some more guidance, please let me know.

    If you have more specific questions related to this design, feel free to post on the TI Designs E2E forum at

    If you have any application specific details you'd like to discuss privately, reach out to me at

  • Hi Matthew,

    I am interesting with your blog. As I read " Brushed-Motor Ripple Counter Reference Design", it is use MSP430 family for counting the ripple current, is there any example for counting the ripple current using MSP430?

    I appreciate your example or information .

    Best Regards,


  • Adam,

    I'm glad you enjoyed the blog! This design was fun to work on and an very interesting problem. The great thing is that you don't need specially tuned motors. I used a very standard car seat assembly from a 10 year old car for most of my testing. There are definitely going to be motors better suited for this application, but as long as there is some amount of motor ripple, we should be able to tune this circuit to count it!