顶,我也用的这个驱动器驱动步进电机,驱动器的电源是20V锂电池,锂电池负极没有和arduino end相连接,但是也正常转了,但是我想控制两个步进电机同时按不同的速度转动,不知道要怎么实现,
循环里的X电机和Y电机分别设置了脉冲,但是2个电机只会按照速度慢的脉冲同速走,不会差别转动
//小车每次按键持续行走,如需换向需要按9中断才能换向,不能连续:行走-换向-行走
//手机蓝牙 HC-06遥控2轮小车, NEMA28步进电机配工业步进驱动器DM430
//步进电机由18V锂电池单独供电,驱动器共阳极接法
//需下载Accelstepper库,DIR+PUL+接控制板5V,PUL-接49引脚 DIR-接58引脚
//利用HC-06蓝牙模块控制,HC-06 RX引脚需使用分压电路确保信号电压为3.3V
//需先将此程序上传到UNO后,再将HC-06连接在UNO开发板上,需断电连接
//1前进,2后退,3左转,4右转,9停止
//#include <AccelStepper.h> //好像不需要**
const int xdirPin = 5; // 左前轮电机方向引脚
const int xstepPin = 4; // 左前轮电机步进速度引脚
const int ydirPin = 8; // 右前轮电机方向引脚
const int ystepPin = 9; // 右前轮电机步进速度引脚
char seria1Data; //建立字符型变量:seria1Data
//AccelStepper stepper1(1,xstepPin,xdirPin); //创建左前轮电机对象,好像不需要**
//AccelStepper stepper2(1,ystepPin,ydirPin); //创建右前轮电机对象,好像不需要**
void setup(){
Serial.begin(9600); //启动串口通信,波特率:9600
pinMode(xstepPin,OUTPUT); // 左前轮速度引脚为输出模式
pinMode(xdirPin,OUTPUT); // 左前轮方向引脚为输出模式
pinMode(ystepPin,OUTPUT); // 右前轮速度引脚为输出模式
pinMode(ydirPin,OUTPUT); // 右前轮方向引脚为输出模式
}
void loop(){
//if(Serial.available()>0){ //判断串口有无接收到数据 ,好像不需要**
seria1Data= Serial.read();//如有,则通过Serial.read函数读入字符变量中
if(seria1Data == '1' ){while(1){ //if判断串口是否1,while循环判断是否成立
if(seria1Data=='9'){break;}else{ //while循环内判断是否接收9,如是则break跳出
digitalWrite(xdirPin,LOW); //如不是则往下循环,输出脉冲,控制轮子转动
digitalWrite(xstepPin,HIGH); //左前轮输出高电平,配合下面低电平产生脉冲
delayMicroseconds(1200); //延迟2毫秒
digitalWrite(xstepPin,LOW); //左前轮输出低电平
delayMicroseconds(1200); //延迟2毫秒
digitalWrite(ydirPin,HIGH);
digitalWrite(ystepPin,HIGH); //右前轮输出高电平
delayMicroseconds(200); //延迟2毫秒
digitalWrite(ystepPin,LOW); //右前轮输出低电平
delayMicroseconds(200); //延迟2毫秒
seria1Data= Serial.read(); }} //while循环内设置接收串口,如9则配合跳出循环
}else if(seria1Data == '2' ){while(1){ //以下相同,按串口信息控制方向
if(seria1Data=='9'){break;}else{
digitalWrite(xdirPin,HIGH); //左前轮正转
digitalWrite(xstepPin,HIGH); //左前轮输出高电平,配合下面低电平产生脉冲
delayMicroseconds(200); //延迟2毫秒
digitalWrite(xstepPin,LOW); //左前轮输出低电平
delayMicroseconds(200); //延迟2毫秒
digitalWrite(ydirPin,LOW); //右前轮正转
digitalWrite(ystepPin,HIGH); //右前轮输出高电平
delayMicroseconds(200); //延迟2毫秒
digitalWrite(ystepPin,LOW); //右前轮输出低电平
delayMicroseconds(200);
seria1Data= Serial.read(); }}//延迟2毫秒
}else if(seria1Data == '3' ){while(1){
if(seria1Data=='9'){break;}else{
digitalWrite(xdirPin,HIGH);
digitalWrite(xstepPin,HIGH); //左前轮输出高电平,配合下面低电平产生脉冲
delayMicroseconds(400); //延迟2毫秒
digitalWrite(xstepPin,LOW); //左前轮输出低电平
delayMicroseconds(400); //延迟2毫秒
digitalWrite(ydirPin,HIGH);
digitalWrite(ystepPin,HIGH); //右前轮输出高电平
delayMicroseconds(400); //延迟2毫秒
digitalWrite(ystepPin,LOW); //右前轮输出低电平
delayMicroseconds(400);
seria1Data= Serial.read(); }}//延迟2毫秒
}else if(seria1Data == '4' ){while(1){
if(seria1Data=='9'){break;}else{
digitalWrite(xdirPin,LOW);
digitalWrite(xstepPin,HIGH); //左前轮输出高电平,配合下面低电平产生脉冲
delayMicroseconds(400); //延迟2毫秒
digitalWrite(xstepPin,LOW); //左前轮输出低电平
delayMicroseconds(400); //延迟2毫秒
digitalWrite(ydirPin,LOW);
digitalWrite(ystepPin,HIGH); //右前轮输出高电平
delayMicroseconds(400); //延迟2毫秒
digitalWrite(ystepPin,LOW); //右前轮输出低电平
delayMicroseconds(400);
seria1Data= Serial.read(); }}//延迟2毫秒
}} |