Advanced and secure stepper motor control across a wide range of applications, from robotics to precision machinery
A
A
Hardware Overview
How does it work?
Stepper 13 Click is based on the MP6500, a dual full-bridge motor driver from MPS. This IC's internal structure is symmetrical. It features two MOSFET H-bridges used to drive two coils of a bipolar step motor in both directions. The MP6500 uses a wide input voltage range - from 4.5V to 35V. This is the voltage used to energize the motor coils. A jumper (JP3) is used to select whether to use an external power supply or to obtain the power supply from the mikroBUS™ +5V rail. The MP6500 has two PHASE inputs that control the direction of current flow through H-bridges and, thus, the motor coils. It also allows controlling the step motor in both full-step and half-step modes by toggling states on MS1 and MS1 pins. The bipolar step motor coils can be connected to the onboard screw terminals. There are two terminals used to connect each of the step motor coils. The third connector connects an external voltage, ranging from 4.5V to 35V,
depending on the used motor voltage requirements. It should be noted that without a valid external voltage connected to this terminal, the motor will not work. Also, 40V is the absolute maximum voltage allowed as per the datasheet. Thus, the overtemperature protection might be activated when driving heavier loads. The recommended maximum voltage should not exceed 35V, as stated on the silkscreen layer of the PCB. All of the MP6500 control lines are routed to the second IC on the Stepper 13 Click, which is the PCA9538A, a well-known 8bit I/O expander with a serial interface, used on many of the mikroelektronika's designs for its simplicity and reliability. It allows the control lines of the MP6500 IC to be driven via the I2C and the few pins it uses - reducing the required pin count of the Stepper 13 click. This also allows for sending compact I2C messages instead of toggling several pins at once - which can introduce
problems with timing sometimes, especially when those pins belong to different MCU ports. Changing the states of the six control pins makes it possible to drive the step motor in full- and half-step modes. However, provided MikroElektronika libraries contain simple and intuitive functions to control the bipolar step motor fully, connected to Stepper 13 Click. Their usage is demonstrated in the included example application, which can be used as a reference for a custom design. The motor power supply can be connected to the input terminal labeled as VIN and should be within the range of 4.5V to 35V. Stepper motor coils can be connected to A1, B2, B1, and A2 terminals. The Click board™ supports an optional external power supply for the motor. However, it also requires 5V from the mikroBUS™ rail.
Features overview
Development board
Curiosity PIC32 MZ EF development board is a fully integrated 32-bit development platform featuring the high-performance PIC32MZ EF Series (PIC32MZ2048EFM) that has a 2MB Flash, 512KB RAM, integrated FPU, Crypto accelerator, and excellent connectivity options. It includes an integrated programmer and debugger, requiring no additional hardware. Users can expand
functionality through MIKROE mikroBUS™ Click™ adapter boards, add Ethernet connectivity with the Microchip PHY daughter board, add WiFi connectivity capability using the Microchip expansions boards, and add audio input and output capability with Microchip audio daughter boards. These boards are fully integrated into PIC32’s powerful software framework, MPLAB Harmony,
which provides a flexible and modular interface to application development a rich set of inter-operable software stacks (TCP-IP, USB), and easy-to-use features. The Curiosity PIC32 MZ EF development board offers expansion capabilities making it an excellent choice for a rapid prototyping board in Connectivity, IOT, and general-purpose applications.
Microcontroller Overview
MCU Card / MCU

Architecture
PIC32
MCU Memory (KB)
2048
Silicon Vendor
Microchip
Pin count
100
RAM (Bytes)
524288
You complete me!
Accessories
The 28BYJ-48 is an adaptable 5VDC stepper motor with a compact design, ideal for various applications. It features four phases, a speed variation ratio of 1/64, and a stride angle of 5.625°/64 steps, allowing precise control. The motor operates at a frequency of 100Hz and has a DC resistance of 50Ω ±7% at 25°C. It boasts an idle in-traction frequency greater than 600Hz and an idle out-traction frequency exceeding 1000Hz, ensuring reliability in different scenarios. With a self-positioning torque and in-traction torque both exceeding 34.3mN.m at 120Hz, the 28BYJ-48 offers robust performance. Its friction torque ranges from 600 to 1200 gf.cm, while the pull-in torque is 300 gf.cm. This motor makes a reliable and efficient choice for your stepper motor needs.
Used MCU Pins
mikroBUS™ mapper
Take a closer look
Click board™ Schematic

Step by step
Project assembly
Track your results in real time
Application Output
1. Application Output - In Debug mode, the 'Application Output' window enables real-time data monitoring, offering direct insight into execution results. Ensure proper data display by configuring the environment correctly using the provided tutorial.

2. UART Terminal - Use the UART Terminal to monitor data transmission via a USB to UART converter, allowing direct communication between the Click board™ and your development system. Configure the baud rate and other serial settings according to your project's requirements to ensure proper functionality. For step-by-step setup instructions, refer to the provided tutorial.

3. Plot Output - The Plot feature offers a powerful way to visualize real-time sensor data, enabling trend analysis, debugging, and comparison of multiple data points. To set it up correctly, follow the provided tutorial, which includes a step-by-step example of using the Plot feature to display Click board™ readings. To use the Plot feature in your code, use the function: plot(*insert_graph_name*, variable_name);. This is a general format, and it is up to the user to replace 'insert_graph_name' with the actual graph name and 'variable_name' with the parameter to be displayed.

Software Support
Library Description
This library contains API for Stepper 13 Click driver.
Key functions:
stepper13_set_direction
- This function sets the motor direction by setting the DIR pin logic statestepper13_set_step_mode
- This function sets the step mode resolution settingsstepper13_drive_motor
- This function drives the motor for the specific number of steps at the selected speed
Open Source
Code example
The complete application code and a ready-to-use project are available through the NECTO Studio Package Manager for direct installation in the NECTO Studio. The application code can also be found on the MIKROE GitHub account.
/*!
* @file main.c
* @brief Stepper 13 Click example
*
* # Description
* This example demonstrates the use of the Stepper 13 click board by driving the
* motor in both directions for a desired number of steps.
*
* The demo application is composed of two sections :
*
* ## Application Init
* Initializes the driver and performs the click default configuration.
*
* ## Application Task
* Drives the motor clockwise for 200 full steps and then counter-clockwise for 200 half
* steps and 400 quarter steps with 2 seconds delay on driving mode change. All data is
* being logged on the USB UART where you can track the program flow.
*
* @author Stefan Filipovic
*
*/
#include "board.h"
#include "log.h"
#include "stepper13.h"
static stepper13_t stepper13;
static log_t logger;
void application_init ( void )
{
log_cfg_t log_cfg; /**< Logger config object. */
stepper13_cfg_t stepper13_cfg; /**< Click config object. */
/**
* Logger initialization.
* Default baud rate: 115200
* Default log level: LOG_LEVEL_DEBUG
* @note If USB_UART_RX and USB_UART_TX
* are defined as HAL_PIN_NC, you will
* need to define them manually for log to work.
* See @b LOG_MAP_USB_UART macro definition for detailed explanation.
*/
LOG_MAP_USB_UART( log_cfg );
log_init( &logger, &log_cfg );
log_info( &logger, " Application Init " );
// Click initialization.
stepper13_cfg_setup( &stepper13_cfg );
STEPPER13_MAP_MIKROBUS( stepper13_cfg, MIKROBUS_1 );
if ( I2C_MASTER_ERROR == stepper13_init( &stepper13, &stepper13_cfg ) )
{
log_error( &logger, " Communication init." );
for ( ; ; );
}
if ( STEPPER13_ERROR == stepper13_default_cfg ( &stepper13 ) )
{
log_error( &logger, " Default configuration." );
for ( ; ; );
}
log_info( &logger, " Application Task " );
}
void application_task ( void )
{
log_printf ( &logger, " Move 200 full steps clockwise, speed: slow\r\n\n" );
stepper13_set_direction ( &stepper13, STEPPER13_DIR_CW );
stepper13_set_step_mode ( &stepper13, STEPPER13_MODE_FULL_STEP );
stepper13_drive_motor ( &stepper13, 200, STEPPER13_SPEED_SLOW );
Delay_ms ( 2000 );
log_printf ( &logger, " Move 200 half steps counter-clockwise, speed: medium\r\n\n" );
stepper13_set_direction ( &stepper13, STEPPER13_DIR_CCW );
stepper13_set_step_mode ( &stepper13, STEPPER13_MODE_HALF_STEP );
stepper13_drive_motor ( &stepper13, 200, STEPPER13_SPEED_MEDIUM );
Delay_ms ( 2000 );
log_printf ( &logger, " Move 400 quarter steps counter-clockwise, speed: fast\r\n\n" );
stepper13_set_direction ( &stepper13, STEPPER13_DIR_CCW );
stepper13_set_step_mode ( &stepper13, STEPPER13_MODE_QUARTER_STEP );
stepper13_drive_motor ( &stepper13, 400, STEPPER13_SPEED_FAST );
Delay_ms ( 2000 );
}
int main ( void )
{
application_init( );
for ( ; ; )
{
application_task( );
}
return 0;
}
// ------------------------------------------------------------------------ END