Written by SOLO Team
03/06/2020
What is a Closed-loop control?
A closed loop control comes in contrast with open loop control, and what it truly means, is a controller which commands and checks later the behaviour of the system under control based on the command sent. In another word a closed-loop controller keeps monitoring the system all the time and tries to force the system ( here an electrical motor ) to follow what it has been asked, the engineering terms for each of these actions are:
The reference or the set-point: This is our desired goal, the actual value that we hope our system reaches into, you can put it like your desired speed of the rotation of your motor, or the desired temperature of a room or even the desired position of a robot arm.
The Feedback: this is what comes back from the system under control as a measurement to the controller, it can be the real measured speed or torque value of a motor, and this parameter tells to the controller how far the controller needs to push the system to reach the desired value known as the reference.
The Error: this is the difference between the feedback and the reference. This shows how good the feedback is following the reference or in another word how far they are from each other, in an ideal controller, after a finite time the Error should become ZERO!
What is Sensorless Control?
What is nested torque-speed loops control methodology?
This term stands for those methodologies of control in which they control both torque and speed together. The torque loop which in practice controls the current, comes as the inner loop with a very fast sampling rate ( normally above 10kHz), to keep track of the current of the motor and controlling it.The speed loop though, comes behind the torque loop and it’s a much slower loop (sampling rate normally around 1-2kHz) controlling the speed of the motor. These types of control methods are rather advanced and using these methods enables the motor controllers to avoid any unwanted inrush current in the beginning of the operation of the Motors plus numerous other advantages like better performance, safety of the whole system and so on.
The steps of setting up and using SOLO alongside with ARDUINO
0) Turn off the system
Make sure you have disconnected the power supply connected to SOLO or any other peripheral which is in contact with SOLO.1) Apply the Wiring
To start with SOLO first you need to provide the Wiring of SOLO to ARDUINO as following:

As you can see SOLO is also capable of supplying ARDUINO Directly through its 5V output and as a result you will not need to have ARDUINO connected to any other devices like a PC to provide you the power.
Warning: make sure you don’t supply the ARDUINO both from your PC using USB or any other supply and Then the 5V from SOLO at the same time, you should use only one of the supplies especially in ARDUINO UNO models where they can’t switch the supplies and this might cause issue for the system
– The “DIR” Pin is a 3.3V input, and it’s NOT 5v tolerant, to apply a 5V input you MUST use a resistor with a value between 1kΩ to 2.2kΩ, as can be seen in the diagram above.
2) Select the Motor type using Piano Switch

3) Reset the Kp and Ki potentiometers
Just rotate the two blue potentiometers shown below all the way in Clockwise direction into the blocking point ( please treat them gently! ) , so their value becomes zero.

4) Turn On the system
Now you can turn on the main supply connected to SOLO’s power input (8-58V) and SOLO will immediately boot up with a blinking “E2” LED while “E1” LED is off which is the indication of a safe startup with no errors or malfunctions ( like over current, over voltage, … )
5) Put SOLO into speed control Mode

6) Put SOLO into closed-loop mode

since the control type we are using here is among the closed-loop controls, you need to push the Piano switch number 5 down, when you do that, SOLO in less than a second will identify your motor parameters and it will store them on it’s non-volatile memory, during this time if the shaft of the motor is free, you might witness some little vibrations which are totally normal. So as long as the Piano Switch number 5 is down, the last saved parameters will be used, even if you turn off the whole system and turn it back on again, the parameters will remain safe until re-identify them by pushing down and pulling up the same pin in the piano switch. In General Under the following conditions you need to pull up and pull down again the piano switch number 5 :
- In case of changing the Motor
- In case of changing the wiring of the motor ( not mandatory but better to be done)
- The very first time you run SOLO and you put it into closed-loop ( after receiving the factory made module )
7) Tune The Kp and Ki gains
Turn a little bit the “Kp” potentiometer( like 5 degrees in counter clockwise direction ) and for a very small amount “Ki” ( much less than Kp, around 1 or 2 degrees), the best is you watch the video up there to master this. In general these two potentiometer are like some gains and in a simple language they can be defined as:
Kp: defines for you how fast your motor should react and reach the speed you asked, so if you increase this value, your motor will be more reactive, but too much of this gain might make vibrations, so you need to tune it enough. Also another effect of this gain will be how “harshly” the controller ( here SOLO ) should react to the variation of the load on the shaft of the motor to keep the speed constant, so in case of using this functionality in a mobile robot as an instance, if you increase Kp of SOLO, and the robot reaches to some ramps, it will adjust it’s speed faster but also it might make your robot too fast. So it’s not always good to increase this gain, it totally depends on your system.
Ki: defines how good your motor during time should reach the goal, so by increasing this value your motor might reach the goal slower but more consistent. Also by increasing this gain too much your motor might get unstable. So you need to tune this similar to Kp with patience and accuracy.
In general the first time you tune these two gains, as long as you are using the same Motor in the same system you won’t need to touch them, it’s only the matter of the first time.
8) Send PWM pulses from ARDUINO to SOLO
one of the methods of commanding SOLO is using pulse width modulation ( PWM) method, in this method you will send some digital pulses which their high-state is 5V and their low-state is 0V. These pulses should have any frequency above 5kHz ( the higher the frequency the better the resolution). Now by varying the duty cycle of these pulses you can increase or decrease the speed of your motor from zero speed( 0% duty cycle ) to the nominal speed( 100% duty cycle).

9) Limit The amount of current fed into your motor:
You can limit the amount of current fed to your motor using the connection shown in the wiring section to “P/F” input of SOLO. Again here, you can use PWM pulses with any frequency above 5kHz, and by changing their duty-cycle the value of the current limit will change based on the following formula:
The current Limit value = ((100 – duty cycle of PWM at P/F input)/100) * 32
For example if we put the duty cycle at 80% on “P/F” input, the maximum current allowed into the motor will become 6.4 Amps: ((100-80)/100)*32
As you see, this input works in reverse, so if you leave it open, the maximum allowed current into your motor will be the default value of 32A and if you apply a 100% duty-cycle PWM into “P/F” input, the current limit will be set at 0 (no current allowed into the motor). If you don’t want to use this feature you can leave this input unconnected.
You can limit the amount of current fed to your motor using the connection shown in the wiring section to “P/F” input of SOLO. Again here, you can use PWM pulses with any frequency above 5kHz, and by changing their duty-cycle the value of the current limit will change based on the following formula:
The current Limit value = ((100 – duty cycle of PWM at P/F input)/100) * 32
For example if we put the duty cycle at 80%, the maximum current allowed into the motor will become 6.4 Amps: ((100-80)/100)*32
As you see, this input works in reverse, so if you leave it open, the maximum allowed current into your motor will be the default value of 32A and if you apply a 100% duty-cycle PWM into “P/F” input, the current limit will be set at 0 (no current allowed into the motor). If you don’t want to use this feature you can leave this input unconnected.
Results
As you can see in the image below which is a real time plot of Torque-Speed of a DC brushed motor controlled by SOLO in closed-loop sensorless speed control mode. As you can see, the speed of the DC motor ( green track) remained constant even at those moments where a load applied to the shaft of the motor, you can find the moments that the load has been applied from the Torque (the red track) , because whenever a load has been applied on the motor, SOLO automatically increases the Torque of the DC motor to overcome the load and keep the speed constant.

Read more about SOLO ARDUINO Environment Here .
Related Articles
Speed and Torque Control of a Brushless Motor with Hall sensors using Arduino and SOLO [+ Arduino Code]
In this article we are going to talk about how to control Torque and then Speed of a Brushless motor of any kind from BLDC, PMSM or Coreless EC brushless motors using Hall sensors as their rotor position feedback precisely and efficiently, we are also going to use a...
Position control of a Brushless Motor with Arduino and SOLO [+ Arduino Code]
In this article we are going to control the position of a Brushless DC or Permanent Magnet Synchronous Motor using SOLO with Arduino and more specifically using SOLO’s Arduino Library , in another word, we are turning SOLO into a precise servo drive to interface and...
How to connect Hall Sensors to SOLO for controlling Speed or Torque of a Brushless motor
In this article the goal is to set up and calibrate properly the Hall sensors to SOLO for controlling Speed or Torque of your 3-phase motors specially BLDC or PMSM motors. These types of sensors come with 3 wires as each of these wires are representing a digital hall...
0 Comments