I am currently working on a project to build a robotic controlled lawnmower, but I am having difficulty getting the motor to rotate in an anti-clockwise direction using PWM on the Arduino. The motor works fine going forwards and at various speeds. The Basic components of my project are:
- WORX Landroid Chasis with wheels,
- 3 phase BLDC sensor-less motors – (see pic)
- Arduino UNO
- A BLDC controller (see pic)
- 20V Worx battery
My question what is the correct method of connecting the controller board to the Arduino to make the motor forward and backwards when suing the Arduino and PWM to control the motor?
The connections on the low voltage side of the controller are:
5V
Signal
Z/F
VR
GND
From the documentation that comes with the controller the Z/F pin controls the direction of the motor but I‘ve had not luck with trying to connect to it. The controller does not have a hall sensor.
Any ideas of what I need to do, or, what I am doing wrong ? Has anyone done a similar robotic lawnmower project? Any code snippets, etc.
I have read some of the related post on the site (AngeloB), I have also seen project that use a ESC or, a controller with a hall sensor, but not with a sensor-less controller.
AngeloB reference for anyone interested.
https://forum.dronebotworkshop.com/new-content/brushless-dc-motors/
I have no experience with brushless motors myself and have none to play with.
I see online that they say swapping any two of the three wires will reverse the direction of the motor.
If that is the case you just need a circuit that can swap two wires electronically to reverse the motor.
I see examples of using the Arduino to control the speed of brushless motors.
There is this project?
https://hackaday.io/project/6717-project-landlord
Thank you for responding to my message.
As I indicated in my original request, I have looked at the post provided by AngeloB and others, I have also seen a number of BLDC motors reverse rotation by using an ESC, hall sensor and I can reverse the motor by swapping wires also. I can also get the motor to switch direction by using a potentiometer. My problem is getting the motor change direction using the Arduino, PWM and the BLDC controller shown in the picture.
I don't think I known enough electronics to build a circuit to achieve this electronically. However I will look at the links you have provided.
Thanks, Spike
Hi robotBuilder
thanks for the link provided below, but the project is about Reverse Engineering the Mainboard of the WORX Landroid to provide additional functionality to the robot. Not reversing the BLDC motor, however thanks for providing the link.
regards
@spikemjv I think you need what is c alled an H bridge. See this https://en.wikipedia.org/wiki/H-bridg e" target="_blank" rel="noopener">link, also see Bill's videos here and here
First computer 1959. Retired from my own computer company 2004.
Hardware - Expert in 1401, and 360, fairly knowledge in PC plus numerous MPU's and MCU's
Major Languages - Machine language, 360 Macro Assembler, Intel Assembler, PL/I and PL1, Pascal, Basic, C plus numerous job control and scripting languages.
My personal scorecard is now 1 PC hardware fix (circa 1982), 1 open source fix (at age 82), and 2 zero day bugs in a major OS.
Use of an acronym is always risky assuming the reader know what it stands for.
Electronic Speed Controller (ESC)
Ok I have read a bit more about these motors. Haven't had time to work it all out to give a definitive suggestion but this seems to explain them well.
https://howtomechatronics.com/how-it-works/how-brushless-motor-and-esc-work/
https://howtomechatronics.com/tutorials/arduino/arduino-brushless-motor-control-tutorial-esc-bldc/
https://www.integrasources.com/blog/bldc-motor-controller-design-principles/
From the documentation that comes with the controller the Z/F pin controls the direction of the motor but I‘ve had not luck with trying to connect to it.
Then is should work just a matter of figuring out why it isn't working. How do you "connect to it"? Connect what to it? A switch?
Although I haven't been any help so far it has certainly been an education for me researching brushless motors 🙂 Would be easier to actually have the hardware to play with. It has put me off ever using such motors in a robot base.
This shows a circuit to control a sensorless brushless motor but doesn't seem to have a reverse mode,
https://simple-circuit.com/arduino-sensorless-bldc-motor-controller-esc/
Another hits involving an Arduino which also shows how to make a ESC very educational,
https://www.instructables.com/BLDC-Motor-Control-with-Arduino-salvaged-HD-motor/
Let us know how you progress.
@spikemjv H bridge
First computer 1959. Retired from my own computer company 2004.
Hardware - Expert in 1401, and 360, fairly knowledge in PC plus numerous MPU's and MCU's
Major Languages - Machine language, 360 Macro Assembler, Intel Assembler, PL/I and PL1, Pascal, Basic, C plus numerous job control and scripting languages.
My personal scorecard is now 1 PC hardware fix (circa 1982), 1 open source fix (at age 82), and 2 zero day bugs in a major OS.
@spikemjv H bridge
Which are probably in the controller. If the reverse pin is there then surely it should work?
https://www.digikey.com/en/articles/how-to-power-and-control-brushless-dc-motors
Hi robotBuilder, thanks for your responses and link, so far (apologies for the use of acronyms...still learning here). I have previously visited some of the sites you suggested and they provide very good explanations. However, I am currently not looking for solutions that use the Electronic Speed Controller (ESC), or Hbridge. I currently use an H bridge to control brushed DC motors.
I am really looking for a solution that use the controller in my original post.
Thanks
Re: How I am connecting to the Z/F pin.
As I understand it , a Pulse Width Modulation (PWM) signal from the Arduino can be used to send a LOW or HIGH pulse to the Z/F pin (to mimic an ON/OFF switch )..... so I connect the Z/F pin from the controller board to a PWM pin on the Arduino. I set this pin on the Arduino to 'OUTPUT' then do a digitalWrite to the pin (LOW or HIGH) to try and change the direction of the motor.
It works if I include a potentiometer in the circuit and flick the forward/reverse switch between running the program but I want everything to be controlled by the Arduino... without having to flick switches...
Don't use a PWM signal to the Z/F pin, try using a regular pin and set it to 5V or GND.
Anything seems possible when you don't know what you're talking about.
(apologies for the use of acronyms...still learning here)
That is just me others do it all the time I just always forget what they stand for 🙂
I am really looking for a solution that use the controller in my original post.
And it should work and from your post you say it sort of does.
It works if I include a potentiometer in the circuit and flick the forward/reverse switch between running the program but I want everything to be controlled by the Arduino... without having to flick switches...
From what you just wrote I assume one output of the Arduino is pwm to some pin on the controller?
And that there is a Z/F pin on the controller to which you have attached a mechanical switch to change its direction? If so you need another Arduino output pin to that Z/F pin as per wills post.
Or is there no Arduino just a pot and switch connected to the controller?
A circuit showing the connections would probably make it clear.
To enlarge image, right click image and choose Open link in new window.
This link given earlier only shows an Arduino pwm connection to control speed determined by the pot setting but I assume you need another Arduino output pin to the direction pin on the controller as pointed out by @will ?
https://howtomechatronics.com/tutorials/arduino/arduino-brushless-motor-control-tutorial-esc-bldc/
I guess it is difficult to explain clearly without seeing the project in front of you...
I can already get the motor to spin anticlockwise using the following methods:
a) by switching any 2 wires'
b) by using a pot on its own,
c) by using a combination of the pot and the Arduino
what I can't seem to do is to get it to change rotation by using the Arduino and the brushless controller in my original post.
The robotic lawnmower which I am trying to build must be autonomous .... no POT or switches.... just Arduino, PWM, the controller and the relevant Arduino Sketch.....
.