本帖最后由 bgsdd 于 2022-3-27 23:04 编辑
新手换个问题,UNO板,工业42步进电机,配专用驱动器,设置200个脉冲转一圈。 想用串口监视器来调速,折腾了半天,不用FOR循环的话电机不会一直转,只会在串口监视器里输一个数字动一下。用了FOR循环只是把动 一下变成了动一圈或几圈,200是转 一圈,2000就是转10圈,,想让电机一直转,输入数字控制脉冲频率来调速,不知道这个方法为什么不行
//串口监视器控制步进电机调速,UNO控制板,28步进电机
#include <AccelStepper.h> // 引用步进电机库
const int dir = 8; // 步进电机方向引脚
const int stepp = 9; // 步进电机速度脉冲引脚
int ser; //建立整数型变量:ser
void setup() {
Serial.begin(115200); //启动串口通信,波特率:115200
pinMode(stepp, OUTPUT); // 速度引脚为输出模式
pinMode(dir, OUTPUT); // 方向引脚为输出模式
digitalWrite(dir, HIGH); //步进电机旋转方向
}
void loop() {
if (Serial.available() > 0) { //判断串口有无接收到数据
ser = Serial.read(); //如有,则通过Serial.read函数读入变量:ser
for (int x = 0; x < 200; x++) { //步进驱动器设置旋转一圈所需脉冲数:200
digitalWrite(stepp, HIGH); //电机驱动器输出高脉冲
delayMicroseconds(ser); //脉冲频率为串口输入数值
digitalWrite(stepp, LOW); //电机驱动器输出低脉冲
delayMicroseconds(ser); //脉冲频率为串口输入数值
}
}
}
|