【DigiKey好物畅享】Arduino ABX00087开发板使用STSPIN220驱动步进电机

本次你晒单,我买单活动所选物料之一为来自Arduino的UNO R4 WiFi开发板,SKU为ABX00087。曾经风靡创客圈长达十年的UNO R3,在23年迎来了其迭代版本UNO R4,其板载瑞萨的RA4M1 32bit MCU,相较于UNO R3上的8bit MCU,性能有了大幅度提升,也越来越迎合物联网的趋势。
目前Arduino采用RA4M1当作MCU的开发板主要有三种,分别是Nano R4、UNO R4 Minima、UNO R4 WiFi。从外形来看,UNO R4 Minima和UNO R4 WiFi保留了UNO R3的外形和引脚排列,可以在不改动硬件的情况下无痛升级;Nano R4采用双列直插排针形式,更加注重nano和小尺寸。从电路原理图来看,Nano R4和UNO R4 Minima属于基于RA4M1的最小系统板;UNO R4 WiFi在最小系统板的基础上,外加了ESP32-S3模组,可以进行无线连接和通信,还有LED矩阵,功能更加全面。
本次设计主要使用UNO R4 WiFi开发板和STSPIN220步进电机驱动模块来实现控制步进电机正反转的功能。
设计中主要用到的硬件设备包括UNO R4 WiFi开发板、STSPIN220步进电机驱动模块(来自Adafruit,SKU为6353)、步进电机(来自雷赛智能,型号为42CM08)、支持1.8V到10V输出的电源(主要原因为STSPIN20工作电压为1.8V-10V,超过这个范围的电压会造成STSPIN20损坏)。具体实物如下图。

STSPIN20的最大工作电压为10V,最大输出电流为1.3A(输出电流可通过模块上的电位器进行调节),因此设置电源的输出电压为10V,输出电流为2A,接到螺钉式接线端子的±引脚上。所使用的电机为两相四线步进电机,步距角1.8°,旋转一圈需要200步。电机黑线为A+,接到螺钉式接线端子的1A;电机绿线为A-,接到螺钉式接线端子的2A;电机蓝线为B-,接到螺钉式接线端子的2B;电机红线为B+,接到螺钉式接线端子的1B。
排针端,VDD为逻辑电源输入,接到UNO R4 WiFi上的3V3;GND为电源地和逻辑地,接到UNO R4 WiFi上的GND;DIR为方向控制引脚,接到UNO R4 WiFi上D2;STEP为步进控制引脚,接到UNO R4 WiFi上的D3;MS1和MS2为步进模式选择引脚,分别接到UNO R4 WiFi上的D4和D5;EN为使能引脚,接到UNO R4 WiFi上的D6;RST为复位引脚,接到UNO R4 WiFi上的D7。具体连接原理图如下。

软件设计上,DIR引脚为高时,步进电机正转;DIR引脚为低时,步进电机反转。STEP引脚到达一次脉冲,步进电机根据步进模式旋转一步。EN引脚为高时,STSPIN20模块使能;EN引脚为低时,STSPIN20模块失能。为了使用方便,Adafruit针对这个模块设计了一个Adafruit_STSPIN库,在Arduino IDE中安装这个库后即可使用。下面为具体代码。

#include <Adafruit_STSPIN220.h>

// Define the number of steps per revolution for your stepper motor
// Most steppers are 200 steps per revolution (1.8 degrees per step)
const int stepsPerRevolution = 200;

const int DIR_PIN = 2; // Direction pin
const int STEP_PIN = 3; // Step clock pin
const int MODE1_PIN = 4; // Mode 1 pin (optional, but will let you set microstep mode)
const int MODE2_PIN = 5; // Mode 2 pin (optional, but will let you set microstep mode)
const int EN_FAULT_PIN = 6; // Enable/Fault pin (optional)
const int STBY_RESET_PIN = 7; // Standby/Reset pin (optional, but will let you set microstep mode)

// Create stepper object with full pin configuration
Adafruit_STSPIN220 myStepper(stepsPerRevolution, STEP_PIN, DIR_PIN,
MODE1_PIN, MODE2_PIN, EN_FAULT_PIN, STBY_RESET_PIN);

void setup() {
Serial.begin(115200);
while (!Serial) {
delay(10); // Wait for serial port to connect
}

Serial.println(“STSPIN220 Stepper Motor Start..”);delay(100);

myStepper.setSpeed(300);
Serial.println(“Set speed”); delay(100);

myStepper.setStepMode(STSPIN220_STEP_1_256);

Serial.println(“Setup complete. Starting motor test…”);delay(100);
}

void loop() {
// Calculate total microsteps for one full revolution
int32_t totalMicrosteps = stepsPerRevolution * myStepper.microstepsPerStep();

Serial.print(“Stepping forward one revolution (”);
Serial.print(totalMicrosteps);
Serial.println(" microsteps)…");
myStepper.step(totalMicrosteps);

delay(1000);

Serial.print(“Stepping backward one revolution (”);
Serial.print(totalMicrosteps);
Serial.println(" microsteps)…");
myStepper.step(-totalMicrosteps);
delay(1000);
}

程序运行后,首先初始化串口用于打印调试信息。接着设置步进电机的速度为300,并设置步进模式为1/256,即每来一个脉冲,步进电机旋转1.8°/256。步进精度越高,电机旋转起来看着越丝滑。在loop循环里面实现电机正反转控制。实际测试效果如下。

总结:Arduino ABX00087开发板在保留经典UNO外形的基础下,性能得到了大幅提示,板载MCU由8位升级为32位,同时新增了wifi和蓝牙功能,是物联网应用的不二之选。