Run motor without encoder?

I have a BLDC motor but I don’t have encoder or hall sensor.


I saw the above picture not encoder sensor, so Do i need a encoder sensor ??

Hello @nghiank97 !
It depends on what you want to do! The SimpleFoc library has also some great open loop examples for torque mode and angle mode.
Obviously not having a position feedback of any type is a limit in some cases, are you trying to control a Sensored or Sensorless BLDC motor?
Regarding the controller images you posted, I think that in that example is using the b-emf for sensoring the motor position, this is why in that case a sensor is not needed.
In some uses, this could be enough precise, It really depends on what you are trying to achieve!

Hi @Pipe !

I have a similar question here. I saw that sensorless FOC is something in the SimopleFOC work roadmap but has not been implemented yet. Is this something that I could try to implement somehow?

You see I am obviously a beginner so I don’t have a good sense of how much work that would be. I’d greatly appreciate it if you (or anyone else of course) could point me to something to get started on that. In my case, I had a motor with Hall sensor - but I unfortunately fried the Hall sensors so would need to do it without sensors.

Thank you!

Welcome, @CZhang !

SimpleFOC already has open-loop control modes, as @Pipe describes above. So you can already move motors without any kind of sensors.

So I assume what you would like is closed loop, sensorless control of the motor. This is not so easy:

Generally speaking, the usual way to sense the motor’s position without having a sensor on the shaft is to use the back-EMF generated by the motor’s movement. The back-EMF can be sensed on the motor phases and from this you can calculate the motor’s (electrical) position.

But this is voltage sensing on the phase lines, and currently none of the simplefoc boards I have seen support this in hardware. Some of the evaluation boards for motor drivers from TI (and I assume others) have voltage sensing, so it would be possible to build a test-setup.

Note that this strategy only works if the motor is moving, when it is stationary (or turning slowly) there is no back EMF to measure. This implies a) that you need a different strategy to start the motor moving, e.g. open-loop; and b) that you can’t really do position control, or slow movement control with back EMF sensing, only velocity control.

In terms of the code, I have been thinking about it, but due to the need to switch from open-loop to closed-loop at a certain speed, and the fact that the “back EMF sensor” is not absolute, it is also not 100% straightforward how to integrate this into the code. If you wanted to try to solve it, we would be very happy to look at any contributions you send our way :smiley: .

Note that there apparently are also solutions for closed loop, sensorless control in stopped motors and slowly moving motors. It can be done by injection of high-frequency patterns onto the phases and measuring the resulting waveforms on the other phases… this kind of thing is so advanced it is almost science fiction :slight_smile: . It is very motor- and MCU-specific, and needless to say it would not really fit into a SimpleFOC library.

The motor-world is not that complicated.
If you want slow : use a stepper-motor.
If you want fast : use a (BL)DC motor.
If you want a miracle : use faith.

A BLDC motor will at low speeds gladly behave like a (less steps ) stepper-motor.

Thank you very much @runger for your very informative reply! I didn’t mention my specific application before, we’d like to run a motor at high speed (30 kRPM) so I assumed that once the motor has started, it’s fine to use the back EMF. The start-up sequence surely would be a problem as well :smiley: