0%

驱动步进电机

闲来无事准备搞个硬件玩,然后为了让步进电机动一下买了一堆东西。
本文档将演示 arduino 树莓派 51单片机 驱动步进电机。

本来我是想直接用树莓派驱动步进电机的,可是我没有搜索到树莓派的接线图。然而我刚好有一个闲置了好多年 Arduino。所以先用 Arduino 驱动了步进电机然后参考 Arduino 的接线,替换成树莓派。

使用到的材料

硬件 名称
步进电机 42步进电机 扭矩1.28N.m 步距角1.8 电流1.5A
步进电机驱动器 普菲德TB6600
电源 变压电源
脉冲发生器 raspberryPi Arduino c51

这里特别说明一下,电源的话开关电源就可以。开关电源的 220V 接线口是裸露在外边的,我害怕所以就买了变压电源。
我的步进电机的电流1.5A ,步进电机驱动器建议电压是 24V,所以我的电源应当选择 24V 12A 我用的变压电源直接调到这个范围就好了。
除了上述的材料可能你号需要准备一堆杜邦线,我是以前没事干买了一堆。

驱动器设置

驱动器的 1 2 3 还开关设置微步,这这里我选择的是 8 个电脉冲运行一步,1600 个电脉冲运行一周 所以拨下 2 号开关即可。
器的 4 5 6 开关设置步进电机的电流水平,我使用的的步进电机电流是 1.5A,所以播下 4 5 号开关即可。

步进电机开关设置

驱动器上的 DIR 控制电机的旋转方向,PUL 控制运行速度,脉冲越快速度越快。

Arduino 驱动步进电机

我先搞的 Arduino 驱动步进电机,所以先演示 Arduino
首先参考下图进行接线
接线图

我的实物接线图

Arduino实物接线图

然后向 Arduino 上传下列代码即可,让步进电机逆时针一直运行

const int DIRPin = 2;  // 驱动器的 DIR 正极连接到 2 号 io
const int PULPin = 3;  // 驱动器的 PUL 正极连接到 3 号 io

void setup() {
  // 将使用到的引脚初始化为输出模式
  pinMode(DIRPin, OUTPUT);
  pinMode(PULPin, OUTPUT);

  // 设置旋转方向为逆时针旋转,不设置或者设置为 LOW 为顺时针
  digitalWrite(DIRPin, HIGH);
}

void loop() {
  // 产生一个电脉冲
  digitalWrite(PULPin, HIGH);
  delayMicroseconds(500);
  digitalWrite(PULPin, LOW);
  delayMicroseconds(500);
}

树莓派驱动步进电机

树莓派的电机和驱动器的接线图与 Arduino 完全一致,可以参考上面的 Arduino 接线图,区别就是 DIR+ 连接到 11,PUL+ 连接到 12。DIR- PUL- 连接到 9。
实物接图如下
树莓派实物接线图

运行以下代码即可驱动电机逆时针运行一周,代码是参考的 Arduino 代码修改的

#! /usr/bin/env python3

import RPi.GPIO as gpio
import time

DIRPin = 11 # DIR 连接到 11 号引脚
PULPin = 12 # PUL 连接到 12 号引脚

gpio.setmode(gpio.BOARD) # 设置 gpio 为 BOARD
gpio.setup([DIRPin, PULPin], gpio.OUT) # 设置引脚为删除模式

gpio.output(DIRPin, gpio.HIGH) # 设置步进电机逆向运行

usleep = lambda x: time.sleep(x/1000000.0) # 以微妙为延迟单位 功能类似于 Arduino 的 delayMicroseconds 函数

for i in range(1600): # 运行一周需要的脉冲数
    # 产生一个电脉冲
    gpio.output(PULPin, gpio.HIGH)
    usleep(200)
    gpio.output(PULPin, gpio.LOW)
    usleep(200)

gpio.cleanup() # 退出运行前清理掉 gpio 的设定,没有这一步的话下次使用 gpio 时会显示警告

51 单片机驱动步进电机

51 单片机我使用的是 STC89C52RC 开发板,接线方式与上面两种有一些细小的区别。
51 单片机使用共阳极接线法,上面两种使用的是共阴极接线法。
接线方式我是使用万用表(万用表也是为了玩步进电机专门买的)测出来的,大家可以参考一下。
使用 c51 驱动步进步进电机,至少需要你使用 51开发板点亮过一颗 LED 灯,51 单片机的详细使用方式我这里就不演示了。
驱动器的上的 DIR+ PUL+ 连接到 5V, PIR- 连接到 P20 PUL- 连接到 P21
c51实物接线图

向 51 单片机写入以下代码既可让步进电机一直逆时针旋转,因是共阳极接线,所以逻辑和上面两个是反的,0 是导通,1是不导通

#include <INTRINS.H>
#include <REGX52.H>

void Delay200us()  //@11.0592MHz
{
  unsigned char i;

  _nop_();
  i = 89;
  while (--i);
}

void main() {
  P2_0 = 0;  // DIR

  // 生成脉冲
  while (1) {
    P2_1 = ~P2_1;  // PUL
    Delay200us();
  }
}

参考资料

https://www.makerguides.com/tb6600-stepper-motor-driver-arduino-tutorial/