Arduino(2560)控制两个步进电机通过控制器

Arduino 2560控制两个步进电机

用arduino和步进电机控制器驱动两个步进电机,具体的接线过程和怎样连接都在图片上。

准备工具:

两个步进电机(我用的是J42):

Arduino板(我用的是2560):

步进电机控制器:

电源适配器:

一 储备知识

1.步进电机的绕组

A+:黑

A-:绿

B+:红

B-:蓝

(这个问题就查了好久..)

2.细分:

步进电机每200(360÷1.8)脉冲转一圈,1.8是步进电机1脉冲走的度数(步进电机背面显示的。200就是1细分,那么2细分就是400(400脉冲转一圈,4细分就是800脉冲转一圈。所以可以通过调节细分来控制步进电机转动的速度。

二 步进电机与步进电机控制器相连

按照上面说的黑绿红蓝连接步进电机的A+A-B+B-

三控制器与电源适配器相连


四控制器和arduino连接


1.输入信号有三种

①    步进脉冲信号PUL+,PUL-;

②    方向电平信号DIR+ ,DIR-

③      脱机信号EN+,EN-。

2. 采用共阴极接法:

PUL-,DIR-,EN-连arduino的地

EN+:脱机信号,接地或者不接,接口4

DIR+:控制转动方向,高电平正转,接口 5

PUL+:控制脉冲,接口 6

3. 第二个步进电机接法同理:

PUL-,DIR-,EN-连arduino的地

EN+:脱机信号,接地或者不接,接口7

DIR+:控制转动方向,高电平正转,接口 8

PUL+:控制脉冲,接口 9

 

五代码:

#define CLK 9
#define CW 8
#define EN 7
#define CLK2 6
#define CW2 5
#define EN2 4
void setup() {
pinMode(CLK,OUTPUT);
pinMode(CW,OUTPUT);
pinMode(EN,OUTPUT);
pinMode(CLK2,OUTPUT);
pinMode(CW2,OUTPUT);
pinMode(EN2,OUTPUT);
Serial.begin(9600);
}
void loop() {
digitalWrite(CW,HIGH);   //正转
digitalWrite(CW2,HIGH);   //正转
//digitalWrite(EN, LOW);   //脱机
for(int i=0;i<200;++i)
{
digitalWrite(CLK,HIGH);//逆时针(正转),无细分,半流,200脉冲/转,步距角1.8度,500KHZ
digitalWrite(CLK2,HIGH);//
delayMicroseconds(1000);
digitalWrite(CLK,LOW);
digitalWrite(CLK2,LOW);
delayMicroseconds(1000);
}
}

六 延伸

学长提了个问题,怎样让步进电机触摸时,能明显的感受到转动每一步,也就是说每一步与每一步之间都有时间暂停,然后在循环往复的转动。

解决方法:在学长的提示下,因为脉冲信号呈时序状,让高频脉冲的时间短,低频持续的时间长,这样在转动的时候就能明显的感受到每一步的转动。

#define CLK 9
#define CW 8
#define EN 7
int steps=50; //角度
/*
 * steps=16.667   旋转30
 * steps=33.334   旋转60
 * steps=50       旋转90
 * steps=100      旋转180
 * steps=200      旋转360
 */
void setup() 
{
  pinMode(CLK, OUTPUT);
  pinMode(CW, OUTPUT);
  pinMode(EN, OUTPUT);
  Serial.begin(9600);  //通信接口
}
/*
 * 速度:通过脉冲时间间隔来控制速度/控制细分?
 * 方向:控制脉冲次数来控制一次能过转多少度
 */
void loop() 
{
  digitalWrite(CW, HIGH);  //正转
  //digitalWrite(EN, LOW);   //脱机
  
  for (int i = 0; i < steps; ++i)
  {
    digitalWrite(CLK, HIGH); //逆时针(正转),无细分,半流,200脉冲/转,步距角1.8度,500KHZ
    delayMicroseconds(10);  //微秒400以上左右好用,所以周期T=800us,所以f=1/T=1250HZ
    digitalWrite(CLK, LOW);
    delayMicroseconds(15000);
    
  }
  //delay(500); //毫秒
}
学长又又提出了一个问题(-_-),假如让步进电机转动90度,怎样在前45度速度逐渐加快,怎样在后45度速度逐渐减慢?因为时间挤不出,一直没去想,等有时间看看能不能解决
控制两个42步进电机,需要使用一个电机驱动板和一个Arduino控制器。 步骤如下: 1. 连接电机驱动板和Arduino控制器。将驱动板上的脚针插入Arduino的数字引脚,并将GND引脚连接到Arduino的GND引脚。 2. 连接步进电机。将两个步进电机的四个线连接到驱动板的两个输出端口上。 3. 编写代码。使用Arduino IDE编写代码,控制步进电机的旋转方向和速度。以下是示例代码: ``` #include <AccelStepper.h> #define motorPin1 8 #define motorPin2 9 #define motorPin3 10 #define motorPin4 11 AccelStepper motor1(AccelStepper::FULL4WIRE, motorPin1, motorPin2, motorPin3, motorPin4); #define motorPin5 4 #define motorPin6 5 #define motorPin7 6 #define motorPin8 7 AccelStepper motor2(AccelStepper::FULL4WIRE, motorPin5, motorPin6, motorPin7, motorPin8); void setup() { motor1.setMaxSpeed(1000); motor1.setAcceleration(100); motor2.setMaxSpeed(1000); motor2.setAcceleration(100); } void loop() { motor1.moveTo(1000); motor1.run(); motor2.moveTo(-1000); motor2.run(); } ``` 在这个示例代码中,我们使用了AccelStepper库来控制步进电机的旋转。我们定义了两个步进电机对象motor1和motor2,并设置了它们的最大速度和加速度。在循环中,我们让motor1向正方向旋转1000步,让motor2向负方向旋转1000步。 4. 上传代码。将代码上传到Arduino控制器,让它开始控制步进电机的旋转。 注意:在使用步进电机时,需要注意它们的额定电流和电压,以免损坏电机或驱动板。同时,步进电机的旋转会产生较大的噪音和震动,需要注意安全和稳定性。
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值