本帖最后由 bgsdd 于 2021-12-24 09:34 编辑
现在有新的问题,听别人说用这个驱动器接arduino控制板的话,需要把驱动器电源20v锂电池的负极和arduino控制板END连接,但是我这个没连接好像也能用?还有一个就是想在小车转向的时候2个电机转速不同,外边块内边慢,在程序里分别写了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循环判断是否成立,1是前进
if(seria1Data=='9'){break;}else{ //while循环内判断是否接收9,如是则break跳出
digitalWrite(xdirPin,LOW); //如不是则往下循环,输出脉冲,控制轮子转动
digitalWrite(xstepPin,HIGH); //左前轮输出高电平,配合下面低电平产生脉冲
delayMicroseconds(200); //延迟2毫秒
digitalWrite(xstepPin,LOW); //左前轮输出低电平
delayMicroseconds(200); //延迟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){ //以下相同,按串口信息控制方向 2是后退
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){ //3是左转,两个轮子设置不同速度,左慢右快,但是实际2轮按慢的一起走
if(seria1Data=='9'){break;}else{
digitalWrite(xdirPin,HIGH);
digitalWrite(xstepPin,HIGH); //左前轮输出高电平,配合下面低电平产生脉冲
delayMicroseconds(800); //延迟2毫秒,左轮脉冲慢
digitalWrite(xstepPin,LOW); //左前轮输出低电平
delayMicroseconds(800); //延迟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){ //4是右转,2个轮子设置不同速度,左快右慢,但是实际2轮按慢的一起走
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(800); //延迟2毫秒
digitalWrite(ystepPin,LOW); //右前轮输出低电平
delayMicroseconds(800);
seria1Data= Serial.read(); }}//延迟2毫秒
}}
|