Today we are going to use the L298N motor driver with 8051 microcontrollers to control a DC Motor. This motor control system is specially for robotic 2-wheel differential drive car. Or could be used with any other use case where we need to drive one or two motors with the push buttons.
The program which we are demonstrating in this post is 4 push button interfaced with 8051 microcontroller. We read the button states continuously in our main loop and wait for any button to be pressed. Once any button is pressed, we jump to the respective action. We take 4 actions based on the push button. One action is for driving motor in forward direction. Which is achieved by moving both motors in similar forward direction. Second is reverse direction which is achieved by moving both motors in reverse direction. For turning right and left we move one respective motor in forward direction.
Understanding the L298N Motor Driver
he L298N is a popular H-bridge motor driver IC capable of driving two DC motors. It provides a simple and efficient way to control motor direction and speed. We will not touch the speed control part in this post as we will only be focusing on directional control with the help of L298N motor driver.
L298N Pin | Function |
IN1 | Input for Motor A, direction control |
IN2 | Input for Motor A, direction control |
IN3 | Input for Motor B, direction control |
IN4 | Input for Motor B, direction control |
ENA | Enable input for Motor A |
ENB | Enable input for Motor B |
OUT1 | Output to Motor A, high-side |
OUT2 | Output to Motor A, low-side |
OUT3 | Output to Motor B, high-side |
OUT4 | Output to Motor B, low-side |
VSS | Ground |
VDD | Power supply |
Hardware Setup
The system comprises several essential components. The 8051 microcontroller acts as the system’s brain, processing instructions and controlling the overall operation. An L298N motor driver is employed to regulate the motor’s behavior based on signals received from the microcontroller. The DC motor, the system’s actuator, converts electrical energy into mechanical motion. A power supply provides the necessary electrical energy for both the microcontroller and the motor driver.
Software Implementation
Here we will discuss the Assembly language code for controlling the motor direction with the help of 8051 microcontroller. First of all, we have to define the pins which we are using for our switches and L298N motor driver direction control. Remember we pulled the ENA and ENB pins to 5 volt giving full speed to the motors.
OUT1 BIT P2.0
OUT2 BIT P2.1
OUT3 BIT P2.2
OUT4 BIT P2.3
SW1 BIT P0.0
SW2 BIT P0.1
SW3 BIT P0.2
SW4 BIT P0.3
Code language: AVR Assembler (avrasm)
These lines define the bit addresses for motor control outputs and switch inputs.
Now coming to our main loop it looks like this.
ORG 00H
MAIN:
SETB OUT1
SETB OUT2
SETB OUT3
SETB OUT4
AGAIN:
JNB SW1,ACTION1
JNB SW2,ACTION2
JNB SW3,ACTION3
JNB SW4,ACTION4
ACALL DELAY1
SJMP AGAIN
The main section initializes all motor outputs to high, effectively stopping the motor. The Again loop continuously checks the state of the switches and jumps to the corresponding action if a switch is pressed.
The delay function is pretty much similar to all our previous posts.
DELAY1:
MOV R7,#255
DJNZ R7,$
RET
DELAY3:
MOV R7,#3
D3L2: MOV R6,#255
D3L1: MOV R5,#255
DJNZ R5,$
DJNZ R6,D3L1
DJNZ R7,D3L2
RET
END
Code language: PHP (php)
our subroutines for driving motors forward, reverse, right, left and stopping the motors looks like following. .
FWD:
CLR OUT1
SETB OUT2
ACALL DELAY1
RET
REV:
SETB OUT1
CLR OUT2
ACALL DELAY1
RET
RIGHT:
CLR OUT3
SETB OUT4
ACALL DELAY1
RET
LEFT:
SETB OUT3
CLR OUT4
ACALL DELAY1
RET
STOP1:
SETB OUT1
SETB OUT2
ACALL DELAY1
RET
STOP2:
SETB OUT3
SETB OUT4
ACALL DELAY1
RET
Code language: ARM Assembly (armasm)
Finally our 4 actions are as follows.
ACTION1:
ACALL FWD
ACALL DELAY3
ACALL STOP1
SJMP AGAIN
ACTION2:
ACALL REV
ACALL DELAY3
ACALL STOP1
SJMP AGAIN
ACTION3:
ACALL RIGHT
ACALL DELAY3
ACALL STOP2
SJMP AGAIN
ACTION4:
ACALL LEFT
ACALL DELAY3
ACALL STOP2
SJMP AGAIN
Code language: HTTP (http)
Additional Considerations
Ensure the motor power supply is sufficient to meet the motor’s demands. Given its capability to generate heat, especially when driving high-current motors, consider using a heat sink for the L298N motor driver. Optimizing the code for efficiency and performance is crucial. Implementing error handling mechanisms can detect issues like motor stalls or overcurrent, enhancing system robustness. Finally, incorporating sensors such as encoders or current sensors can provide valuable feedback for advanced motor control applications.