I have done s SE survey of BLDC motors and figured out they are essentially stepper motors but aimed for continuous torque. Moreover they differ from brushed DC motors significantly in terms of control.

I am building a linear rail for a camera (so the camera can be moved in linear axis) and the rail is quite long. I want to do position control over this rail. Can I use BLDC motors as rotary position encoders to control the brushed DC motors to move the rail precisely?

The motor I have is from Seagate ee25.2 HDD and has 3 wires. Can such BLDC motors provide accurate position control?

I have search but couldn't find a project for position control, I did find direction control and velocity control usage for scrapped BLDCs.

  • \$\begingroup\$ HDD motors incorporate hydrodynamic bearings, which can not carry significant load and can only rotate one direction. Also it probably will not generate enough voltage at low speed. Simple solution could be cheap BLDC motor for toy and 3-phase sinusoidal PWM drive without feedback. \$\endgroup\$
    – Vladimir
    Jul 23, 2022 at 15:43
  • 1
    \$\begingroup\$ BLDC motors only generate signals when they're moving. That's why you can find direction (moving) and velocity (moving) projects, but not position (not moving). You could get position if you count cycles from them though. How about use BLDC motors instead of DC motors for position control, and drive them as steppers to get them to a specific position? \$\endgroup\$
    – Neil_UK
    Jul 23, 2022 at 16:13
  • 1
    \$\begingroup\$ As @Neil_UK says, counting "steps" is fairly easy while the rotor is rotating at a high speed. As you approach a target position, and slow down to a stop, step amplitude becomes quite small - at some slow speed, noise competes with tiny voltages, making mis-counting likely. \$\endgroup\$
    – glen_geek
    Jul 23, 2022 at 20:40
  • 1
    \$\begingroup\$ @mkeith thanks I just wanted to make-do with what is available as the project is low budget and is not persistant. More like 2-3 shots and thats it. So I think Ill follow what Neil_UK has mentioned, to count the pulses \$\endgroup\$
    – user0193
    Jul 24, 2022 at 10:47
  • 1
    \$\begingroup\$ counting pulses gives you an incremental displacement, but you have not shared your servo position control specs. which includes F=ma. P=VI , max acceleration, max velocity and position error tolerance and home calibration. You may also have hysteresis errors. A stepper control system on 8mm pulleys can do 1m/s full step and fractional steps are slower \$\endgroup\$ Jul 24, 2022 at 17:41

1 Answer 1


A BLDC motor, used as an generator, produces an AC output voltage with amplitude roughly proportional to velocity, and frequency exactly proportional to velocity.

There are two ways to try to extract position from this, both involve integration.

  • You can precision rectify the voltage, and perform an analogue integration. This is subject to gain and offset errors, which will give you unbounded position drift over time.
  • You can square-up the signal and integrate the frequency to phase, aka count the pulses. This will give you relative position exactly, down to some speed at which you can accurately detect the pulses. Below that speed, offset and noise errors mean that you can't determine whether the motor has produced a pulse or not. Unless you want the equivalent of analogue drift as you try to interpret noise as pulses, you need to set a lower amplitude threshold and reject signals below that, which means you cannot track final fine-positioning movements.

The best thing to do is to use the right tool for the job(™) . If you are going to count pulses, then use an optical encoder. These produce clean logic pulses at any speed, including very slow and stopped.

They also produce 2-phase pulses, which requires less logic to control the requisite bidirectional counter than the 3-phase waveform from a BLDC.

  • \$\begingroup\$ I think your first point is more suitable, but I am not sure why would I get offset error, the sinusoidal output wave is pretty much periodic so what would cause it to drift? \$\endgroup\$
    – user0193
    Jul 24, 2022 at 10:51
  • 1
    \$\begingroup\$ @user0193 the 3 ph windings produce voltage proportional to speed kV/RPM. There will be some low speed SNR error threshold. How low is hard to estimate. you have yet to define position resolution specs and velocity profile. You need either a "resolver" or a decoder with absolute position or like a stepper , relative with home switch or stop at both ends. \$\endgroup\$ Jul 24, 2022 at 11:00
  • \$\begingroup\$ but "resolvers" use 3 windings XY+Z=excitation for quadrature XY rather than 3 phase \$\endgroup\$ Jul 24, 2022 at 11:06
  • \$\begingroup\$ oh thanks makes so much sense. Just figured out that there is a analogous device to encoder called resolver. I believe I have sufficient information to execute. Thanks \$\endgroup\$
    – user0193
    Jul 24, 2022 at 11:13

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.