用一个按钮给步进电机调速,按钮按下得到高电平1,让步进电机持续加速,按钮松开得到低电平0,让步进电机持续减速,设置步进驱动器的最高速和最低速,问题是如果不要在串口监视器中显示速度信息的话,按下按钮就能正常换向和调速,如果把代码中最后两行被注释掉的恢复的话就没法调速,电机始终以一个低速转动,按下按钮只能换向不能调速
int dir = 5; // 步进电机方向引脚
int stepp = 4; // 步进电机速度脉冲引脚
int anniu = 8; //定义按钮端口8
int val;//定义存储按钮状态(高电平,低电平)变量
int led; //步进电机速度变量
void setup() {
pinMode(anniu, INPUT); //定义按钮端口为输入模式(接收信号)
pinMode(stepp, OUTPUT); // 速度引脚为输出模式
pinMode(dir, OUTPUT); // 方向引脚为输出模式
Serial.begin(9600);// 定义串口波特率(通信速率)
}
void loop() {
val = digitalRead(anniu); //用函数digitalRead读取端口8数字信号(高,低电平)并存入val
if (val == 1) {//如果按下按钮(高电平=1,低电平=0)
led = led - 1; //步进电机速度逐渐提高:脉冲时间越短,频率越高,速度越快
digitalWrite(dir, LOW); //改变步进电机旋转方向
}
if (val == 0) {//如果松开按钮(高电平=1,低电平=0)
led = led + 1; //步进电机速度逐渐降低:脉冲时间越长,频率越低,速度越慢
digitalWrite(dir, HIGH); //改变步进电机旋转方向
}
if (led > 2000) {//设置步进电机最慢速度
led = 2000;
}
if (led < 120) {//设置步进电机最快速度
led = 120;
}
digitalWrite(stepp, HIGH); //电机驱动器输出高脉冲
delayMicroseconds(led); //脉冲频率为按钮控制的加-减速
digitalWrite(stepp, LOW); //电机驱动器输出低脉冲
delayMicroseconds(led); //脉冲频率为按钮控制的加-减速
//Serial.print("电机速度=");//串口监视器输出提示字符:电机速度=
//Serial.println(led);//串口监视器输出电机速度值
}
|