BLDC with built in Hall Sensors

I've been searching the forums for three days now, but it seems I'm not able to find an answer to my question.

Background:
I've gotten my hands on a robotic lawn mower that has a defect motherboard, although the motors are fine. I wanted to try and build my own based on the Ardumower project.

The mower consists of two BLDC with Hall sensors built in that is rated to 18V and 2W (there is no info on amps on the motor) and a Li-Ion battery at 18V - 1,6Ah.

The motors is wired with an 8-pin connector:
Top row: Hall 1, Hall 2, Hall 3, NC, VCC (for hall sensors).
Bottom row: Coil 1, Coil 2, Coil 3, GND, NC.

"The Problem":
I understand that I need a ESC to control this motor, but since it has built in hall sensors, what ESC do I need? If I'm correct, RC ESCs found at eg. HobbyKing is too "basic" in order for me to control speeds at ~ 43 r/min?

I have experience from electronics and Arduino, but not BLDC motors/ESCs.

[your 8 pin connector has 10 pins!]

ESCs are for high current (10 -- 100A) sensorless motors usually.

You need a 3-phase bridge - the hall sensors you can read directly on the Arduino and sequence
the phases to the 3-phase bridge. This way you can use the hall sensors as encoders and
track position best.

The tricky part is finding a 3-phase bridge though - there may be an ESC for a sensored motor
that will be the cheapest option, even if its over kill here

2W seems implausible for these traction motors - got a photo of the nameplate, or part number?

Yes, it's a 10-pin connector with only 8 pins used :slight_smile:

A photo of the motor can be found here:
http://www.clasohlson.com/medias/sys_master/9076054720542.jpg

What would you recommend otherwise, continue to look into a 3-phase bridge or look for other motors that can handle ~ 7 kg?

this might help you with your motor
http://www.linixmotor.com/3-2-Actuator-Motor.html

looks like an 18 volt 2 amps model. speed of about 3000 to 5000 rpm max, i'd have to dig a little more to find it. but ballpark figures will work.

now here's the question. 43 rpm is wayyyyyy slow for that motor. If you could, check if it has a gearbox on it. I'd bet dollars to donuts there's a reducer on there, and if that's the case a cheap r/c esc might let you drive it! the cheap r/c units use back emf to detect the rotor position so use of the hall effect sensors would not be necessary.

Wonderful!

Absolutely, the motor is geared in order to achieve 43 rpm. So something like this would work if I skip using the Hall sensors on the motors?

Can't find any ESCs with lower amp's with reverse. What I'm not sure about is "1-2s lipoly / 3~8 Ni-xx", is lipoly / li-ion the same when it comes to cells, eg. 1 cell? Is 3.7V which means that I need another ESC?

Many questions, I know :slight_smile: thanks!

mwestin:
Absolutely, the motor is geared in order to achieve 43 rpm. So something like this would work if I skip using the Hall sensors on the motors?
Radio Control Planes, Drones, Cars, FPV, Quadcopters and more - Hobbyking

Maybe - maybe not - read on...

mwestin:
Can't find any ESCs with lower amp's with reverse.

The ESC needs to be able to supply enough current to run the motor - the motor requires 2 amps @ 18 volts - that ESC can support the amps - but the voltage is well under 18 volts. It may not have enough voltage to get the motor to turn under load; if it does, the speed will be fairly low.

I'd look for a different controller - something that can support at least 12 volts (or more), with a current capability of at least 3-5 amps.

mwestin:
What I'm not sure about is "1-2s lipoly / 3~8 Ni-xx", is lipoly / li-ion the same when it comes to cells, eg. 1 cell? Is 3.7V which means that I need another ESC?

What you're seeing there is R/C hobby terminology when it comes to battery packs. Basically, it works like this:

There are two "main" chemistry types of R/C battery cells - Lithium (Li) and Nickel (Ni) - for the Lithium there are two main chemistry types - Lithium Ion and Lithium Polymer; for Nickel, there are also two: Nickel Cadmium (Ni-Cad) and Nickel Metal Hydride (NiMh).

LiPoly is what is used mostly today in the hobby, with NiMh running a close second (mainly because LiPoly can easily become dangerous under certain conditions - mainly overcharging and damage - causes fires and such - NiMh is much safer, but heavier and has less current output capacity - so you have a tradeoff).

LiPoly cells each output about 3.7 volts; NiMh outputs about 1.2 volts. "S" means "cells" (don't ask me how that happened).

So: 1-2s LiPoly means a battery pack with 1 to 2 cells (or 3.7 to 7.4 volts); and 3-8 NiMh means a battery pack with 3 to 8 cells (or 3.6 to 9.6 volts). Likely 9.6 volts is the max amount of voltage the ESC can tolerate - so you can only go so far under LiPoly - whereas you can go further with NiMh.

Them's the basics, anyhow.

if you need reverse a relay would probably work. use it to switch any two of the leads and the motor should spin the opposite direction, yay 3 phase.

Now I've gotten my hands on some ESCs and hooked everything up and it's working. However, the motors feel very powerless and I can't seem to get them to spin with any torque (other than just spinning the wheels).

The ESCs I bought are these:

They are hooked up to the motors, one wire for each coil and takes power from the 18V 2,0 Ah battery, directly connected. I have then connected the signal wire of each ESC to the Arduino (pin 9 and 10) and GND to ground and then uploaded this code to the board.

#include <Servo.h>

Servo leftMotor;
Servo rightMotor;

void setup()
{
  // Init serial
  Serial.begin(9600);
  
  // Configure motors
  leftMotor.attach(9);
  rightMotor.attach(10);
  
  // Arm the motors
  configureMotor();

  // Run
  delay(2000);
  leftMotor.writeMicroseconds(2000);
  rightMotor.writeMicroseconds(2000);
}

void loop()
{
  
}

void configureMotor()
{
  Serial.println("Calibrating the ESCs");
  leftMotor.writeMicroseconds(2500);
  rightMotor.writeMicroseconds(2500);

  delay(2000);

  leftMotor.writeMicroseconds(1000);
  rightMotor.writeMicroseconds(1000);
}

Have I missed something?

If you calibrate to 2500, then only run the motors at 2000, they would be expected to run at
less than full power.

I would recomment playing with the ESC/motor combination via a servo tester to see what
performance is possible.

I would be wary of sending an ESC sudden changes in drive, always ramp the level up and down
since ESCs are designed to fail-safe. Give them unexpected inputs and they may elect to drop
down to a low power level for safety considerations. Remember these devices are designed solely
to fly RC aircraft and RC signals can drop out and experience interference, which an ESC should
do its best to defend against. Suddenly changing drive level from 1000 to 2500 is not something
an ESC would expect in normal use for instance. Ramping up over 1/2 a second is more
plausible.

Alternatively you might want to investigate reflashing the ESCs with firmware of known behaviour
(this is normally done for using ESCs in multi-rotors for instance).

Thanks!

I've rewritten the code to ramp up the speed, however I can't seem to see any difference in the behaviour. Although it's hard to know when 43 r/min is reached :slight_smile:

I can also see that one of the ESCs starts the motor a few microseconds after the other one, is it normal or have I not calibrated them correctly?

I'm not sure if these are reflashable since I can't find any form of manual for them, have requested that from HobbyKing but haven't heard anything yet.

ESCs are not precision instruments, they are cheap-as-chips commodity items. To expect identical
behaviour from two of them is unrealistic.

Quadcopter forums will have a lot more information on ESC firmwares available.

Normally a 2A motor wouldn't be the slightest problem for an ESC (which handle much higher
currents), so I don't understand a lack of torque unless the motors are the wrong ones?

I've now done some more testing and guessing that the motors might be broken?

I've attached a ACS712 5A to measure the current drawn by each motor and it's steadily around 1.65 - 1.8 A and even though I attach friction to the motor, the current usage doesn't go up. What happens is that the motor starts to go unsmooth and the ESCs starts to beep.

I've tried to have the robot run across the lawn and it doesn't have the power to do that. Just stops and the ESCs (or the motors) starts beeping..

Is the battery not capable of delivering the current needed or have I gotten my hands on some bad ESCs maybe?

EDIT: Or do I need to attach the black + red wires (guessing +/- for the motor... 5V?) from the motor as well to get full usage of the motor? I was thinking that that two pins was for the Hall sensors.

I have now read up a bit more and figured that I need to have a sensored controller instead of the basic sensorless ESCs used in R/C cars, quads etc.

Have looked for a ESC to suit my goals but I think I'll end up having to build my own controller. Looking at other threads I believe I need to use FAN7888 and a 6-n channel MOSFET in order to use the built in Hall sensors to get better torque at low speeds, right?

Anyone having found a ready-to-use solution for sensored brushless DC motors or am I going to have to create one on my own?

Electric bikes use sensored motors. One of those controllers may be suitable.

The FAN7888 and 6 FETs is one solution - if you're happy with surface mount. Its not
easy to find any pre-built reasonably priced 3-phase bridges like this alas, but relatively
simple to make (programming a bit more complex).

For experimentation at low current you can combine one and a half H-bridge chips(*)... Just
be sure you have full control of the switches since trapezoidal drive requires this. Alternatively
sinusoidal drive is simpler (each half-H-bridge is either switched HIGH or LOW, never open),
but you need to drive some timers in synchrony to generate the 3-phase PWM signals.

(*) the L293D and L298 cannot be used, they don't allow independent control of high and low
switches.