在arduino中控制电机的基础可以查看该博主的博客讲解十分详细同时也可以进行更好的理解工作原理和控制器功能的使用
#include <math.h>
const int dirPinX = 4; // X轴方向引脚
const int stepPinX = 7; // X轴脉冲引脚
const int dirPinY = 9; // Y轴方向引脚
const int stepPinY = 8; // Y轴脉冲引脚
const float radius = 50.0; // 圆的半径(步数)
const int numSteps = 360; // 圆周上的点数
void setup() {
pinMode(dirPinX, OUTPUT);
pinMode(stepPinX, OUTPUT);
pinMode(dirPinY, OUTPUT);
pinMode(stepPinY, OUTPUT);
}
void moveMotor(int dirPin, int stepPin, bool dir, int steps) {
digitalWrite(dirPin, dir);
for (int i = 0; i < steps; i++) {
digitalWrite(stepPin, HIGH);
delayMicroseconds(500); // 设置脉冲信号持续时间
digitalWrite(stepPin, LOW);
delayMicroseconds(500); // 设置脉冲信号间隔时间
}
}
void loop() {
for (int i = 0; i <= numSteps; i++) {
float theta = 2.0 * PI * i / numSteps; // 计算当前角度
float x = radius * cos(theta); // 计算 X 坐标
float y = radius * sin(theta); // 计算 Y 坐标
// 计算 X 轴步数
int stepsX = round(x);
// 计算 Y 轴步数
int stepsY = round(y);
// 控制 X 轴步进电机运动
if (stepsX > 0) {
moveMotor(dirPinX, stepPinX, HIGH, stepsX);
} else if (stepsX < 0) {
moveMotor(dirPinX, stepPinX, LOW, -stepsX);
}
// 控制 Y 轴步进电机运动
if (stepsY > 0) {
moveMotor(dirPinY, stepPinY, HIGH, stepsY);
} else if (stepsY < 0) {
moveMotor(dirPinY, stepPinY, LOW, -stepsY);
}
// 延迟以观察效果
}
}