working with Stepper motor
INTRODUCTION
A stepper motor divides full rotation into number of equal steps. It finds great application in the fields of Robotics. Today I will explain you how to interface stepper motor with STM32.
Check out the Video to see the working..
Stepper motors generally comes along with an IC ULN2003. This IC is used to drive motor because microcontroller pins are unable to provide sufficient current to drive these motors. There are three different types of stepping modes used for stepper motors:-
- Wave Drive
- Full Drive
- Half Drive
Wave Drive
In this mode only one stator electromagnet is energized at a time. It has the same number of steps as the full step drive.
Full Drive
In this mode two stator electromagnets are energized at a time and the motor runs at full torque.
Half drive
In this stepping mode, one and two phases are energized alternatively. This mode is used to increase the angular resolution of the motor but the torque is reduced.
CONNECTIONS
PA0 —-> IN1
PA1 —-> IN2
PA4 —-> IN3
PB0 —-> IN4
WORKING
Wave drive is the simplest way to drive the motor and to explain the working of the stepper motor. So I am going to use wave drive to explain how this motor works and how to program it.
According to the figure above (wave drive), we can see that in order to rotate motor we need to turn one pin HIGH at a time. This is called a step. And the combination of those 4 steps is called a sequence. For the motor to complete a full 360 degree rotation, 2048 steps are required in Wave drive and Full drive. That means we need to give 2048/4 = 512 sequences.
However in Half drive, the motor require 4096 steps. But the sequence have 8 steps now (shown in the fig above) so we need to give 4096/8 = 512 sequences.
Here is the code for wave drive
while (1)
{
for (int i=0; i<512; i++) // for 360 deg rotation
{
HAL_GPIO_WritePin (GPIOA, GPIO_PIN_0, GPIO_PIN_SET); // IN1 HIGH
HAL_GPIO_WritePin (GPIOA, GPIO_PIN_1, GPIO_PIN_RESET);
HAL_GPIO_WritePin (GPIOA, GPIO_PIN_4, GPIO_PIN_RESET);
HAL_GPIO_WritePin (GPIOB, GPIO_PIN_0, GPIO_PIN_RESET);
HAL_Delay (2);
HAL_GPIO_WritePin (GPIOA, GPIO_PIN_0, GPIO_PIN_RESET);
HAL_GPIO_WritePin (GPIOA, GPIO_PIN_1, GPIO_PIN_SET); // IN2 HIGH
HAL_GPIO_WritePin (GPIOA, GPIO_PIN_4, GPIO_PIN_RESET);
HAL_GPIO_WritePin (GPIOB, GPIO_PIN_0, GPIO_PIN_RESET);
HAL_Delay (2);
HAL_GPIO_WritePin (GPIOA, GPIO_PIN_0, GPIO_PIN_RESET);
HAL_GPIO_WritePin (GPIOA, GPIO_PIN_1, GPIO_PIN_RESET);
HAL_GPIO_WritePin (GPIOA, GPIO_PIN_4, GPIO_PIN_SET); // IN3 HIGH
HAL_GPIO_WritePin (GPIOB, GPIO_PIN_0, GPIO_PIN_RESET);
HAL_Delay (2);
HAL_GPIO_WritePin (GPIOA, GPIO_PIN_0, GPIO_PIN_RESET);
HAL_GPIO_WritePin (GPIOA, GPIO_PIN_1, GPIO_PIN_RESET);
HAL_GPIO_WritePin (GPIOA, GPIO_PIN_4, GPIO_PIN_RESET);
HAL_GPIO_WritePin (GPIOB, GPIO_PIN_0, GPIO_PIN_SET); // IN4 HIGH
HAL_Delay (2);
}
HAL_Delay (1000);
}
This was for one complete rotation. Now let’s say we want to rotate the motor by a particular angle i.e 10 deg. All you need to do is math so for 10 deg rotation, we need (10/(360/512)) sequences i.e 14 sequences.
Also if you want to vary the RPM, you need to change the time delay between steps.
TO DOWNLOAD THE CODE, VISIT
CHECK OUT THE VIDEO BELOW
working with Stepper motor
Reviewed by Controllerstech
on
July 08, 2018
Rating:
No comments: