Modify a 20A DC PWM Motor Speed Controller with an Arduino

Modify a 20A DC PWM Motor Speed Controller with an Arduino

In this tutorial, we will learn how to modify a 20A DC PWM motor speed controller to work seamlessly with an Arduino. This modification allows for precise speed control of a motor using either a potentiometer or direct commands from the Arduino. The result is a more versatile motor control system that can be integrated into various projects.

20A DC PWM Motor Speed Controller: Left-side front view
20A DC PWM Motor Speed Controller: Left Side front view

For this project, we will connect the PWM controller to the Arduino and use code to manage the motor speed based on user input. This setup can be advantageous in applications requiring variable speed control, such as robotics or automated systems. For additional clarity, you can refer to the video accompanying this tutorial (in video at 00:00).

Hardware Explained

The main components of this project include the Arduino board, the 20A DC PWM motor speed controller, and a potentiometer. The Arduino serves as the brain of the system, sending PWM signals to the motor controller to adjust the motor speed. The motor speed controller itself utilizes a 555 timer IC to generate PWM signals, which control the gate of a MOSFET that regulates the motor's power.

20A DC PWM Motor Speed Controller: Dimensions
20A DC PWM Motor Speed Controller: Dimensions

The potentiometer acts as an input device, allowing users to manually set the desired speed. By rotating the potentiometer, the resistance changes, sending a corresponding voltage to the Arduino. The Arduino reads this voltage and adjusts the PWM signal sent to the motor controller accordingly.

Datasheet Details

Manufacturer Unknown
Part number 20A DC PWM Motor Speed Controller
Logic/IO voltage 5 V
Supply voltage 10–60 V
Output current (per channel) 20 A
Peak current (per channel) 40 A
PWM frequency guidance Typically 1 kHz
Input logic thresholds 0.2 V (low), 2.0 V (high)
Voltage drop / RDS(on) / saturation 0.1 V
Thermal limits Up to 85°C
Package Standard PCB
Notes / variants Various models available

 

  • Ensure proper heat sinking for high current applications.
  • Check the wiring for correct polarity before powering the system.
  • Use decoupling capacitors across the power supply terminals.
  • Maintain PWM frequency around 1 kHz for optimal performance.
  • Be mindful of the input voltage limits (10–60 V).
20A DC PWM Motor Speed Controller: Potentiometer (variable resistor)
20A DC PWM Motor Speed Controller: Potentiometer (variable resistor)

Wiring Instructions

To wire the 20A DC PWM motor speed controller to the Arduino, begin by connecting the power supply. The positive terminal of the power supply should connect to the V+ input of the motor controller, while the negative terminal connects to the ground (GND) of the controller. Next, connect the motor to the output terminals of the controller, ensuring correct polarity for desired rotation.

For the PWM signal, identify the PWM output pin on the controller, which we will connect to the designated PWM pin on the Arduino (in this case, pin 5). Additionally, connect the ground of the Arduino to the ground of the motor controller to ensure a common reference. Finally, if using a potentiometer, connect one end to the 5V pin on the Arduino, the middle pin to an analog pin (like A0), and the last pin to ground.

Code Examples & Walkthrough

The code begins by defining the PWM output pin and the control pin for the potentiometer. The setup() function initializes the PWM pin as an output and starts serial communication for debugging.

#define pwmPin 5
#define controlPin A0

void setup() {
  pinMode(pwmPin, OUTPUT);
  Serial.begin(9600);
}

In the loop() function, we read the value from the potentiometer and map it to a PWM range suitable for the motor controller. This value is then written to the PWM pin, which controls the motor speed.

void loop() {
  int potValue = analogRead(controlPin);
  int pwm = map(potValue, 0, 1023, 0, 255);
  analogWrite(pwmPin, pwm);
  Serial.print("PWM:");
  Serial.println(pwm);
  delay(500);
}

Lastly, functions are defined to convert the PWM value to a percentage, allowing for easier understanding of the motor speed based on user input. The full code loads below the article (in video at 00:00).

Demonstration / What to Expect

Once everything is wired up and the code is uploaded, you can expect the motor to respond to the potentiometer's position. Rotating the potentiometer will increase or decrease the speed of the motor according to the PWM signal sent from the Arduino. Ensure that the power supply is within the required voltage range and that the motor can handle the applied voltage.

Common pitfalls include incorrect wiring, which might lead to reversed motor rotation or failure to start. Always double-check connections and ensure the Arduino and motor controller grounds are tied together (in video at 04:30).

Video Timestamps

  • 00:00 Start
  • 00:40 Introduction
  • 04:07 Preparing for wiring(modifying it)
  • 06:55 Wiring explained
  • 08:40 Code explained
  • 13:15 Demonstration

Изображения

20A DC PWM Motor Speed Controller: Main
20A DC PWM Motor Speed Controller: main
20A DC PWM Motor Speed Controller: Top View
20A DC PWM Motor Speed Controller: top view
20A DC PWM Motor Speed Controller: Dimensions
20A DC PWM Motor Speed Controller: Dimensions
20A DC PWM Motor Speed Controller: Potentiometer (variable resistor)
20A DC PWM Motor Speed Controller: Potentiometer (variable resistor)
20A DC PWM Motor Speed Controller: Front View
20A DC PWM Motor Speed Controller: Front view
20A DC PWM Motor Speed Controller: Right-side front view
20A DC PWM Motor Speed Controller: Right Side front view
20A DC PWM Motor Speed Controller: Left-side front view
20A DC PWM Motor Speed Controller: Left Side front view
20A DC PWM Motor Speed Controller: Bottom PCB view
20A DC PWM Motor Speed Controller:Bottom PCB view
20A DC PWM Motor Speed Controller: Positive line common
20A DC PWM Motor Speed Controller:Positive line common
222-Hack: Control a 20A DC Motor with an Arduino using 20A DC 10-60V PWM
Язык: C++
Скопировано!

Вещи, которые могут вам понадобиться

Файлы📁

Нет доступных файлов.