首页 > 编程知识 正文

步进电机和直流电机的区别

时间:2023-11-20 10:14:21 阅读:289801 作者:IEJG

步进电机和直流电机是工业界常见的驱动器件,二者虽然都可以用于电机驱动,但有很多区别,具体如下:

一、电机转动方式

步进电机的转动是一步一步的,也就是每给定一个脉冲,电机就会顺时针或逆时针转动一个固定的角度,所以步进电机精度高,能够控制转动角度。而直流电机是通过正反转控制来实现电机转动的,转动速度较快,但控制精度低。

二、电机控制方式

步进电机在控制方面有两种控制方式:全/半步控制和微步控制。全/半步控制是指通过不同的脉冲信号来控制电机转动角度,精度相对较低,但控制成本低、传动可靠;微步控制则是通过精密电子控制器精确控制电机的旋转角度,输出功率时可以实现平滑精确的控制,精度高但同时也成本更高。直流电机则是通过改变电机电压和电流来控制转速和转向。

三、电源

步进电机一般需要使用直流电源,并且电源电压要相对稳定,而直流电机直接使用交流电源。

四、适用场景

步进电机主要用于需要精确定位的场景,例如机器人、打印机、科学仪器等;而直流电机则通常用于需要高速运行的场景,例如风扇、电动工具、电动玩具等。

示例代码:

以Python为例,下面分别是在Raspberry Pi上控制步进电机和直流电机的示例代码。

步进电机示例代码:

import RPi.GPIO as GPIO
import time
 
GPIO.setmode(GPIO.BCM)
 
# 定义引脚
StepPins = [17,22,23,24]
 
# 设置所有引脚为输出
for pin in StepPins:
  GPIO.setup(pin, GPIO.OUT)
  GPIO.output(pin, False)
 
# 定义旋转角度,电机型号及步进角度
RotateDeg = 360
MotorType = "28BYJ-48"
StepAngle = 5.625 / 64
 
# 计算需要旋转的步数
RotateStep = int(RotateDeg / StepAngle)
 
# 定义正转顺序
Seq = [[1,0,0,1],
       [1,0,0,0],
       [1,1,0,0],
       [0,1,0,0],
       [0,1,1,0],
       [0,0,1,0],
       [0,0,1,1],
       [0,0,0,1]]
 
StepCount = len(Seq)
StepDir = 1
StepCounter = 0
 
for i in range(RotateStep):
  for pin in range(4):
    xpin = StepPins[pin]
    if Seq[StepCounter][pin]!=0:
      GPIO.output(xpin, True)
    else:
      GPIO.output(xpin, False)
 
  StepCounter += StepDir
 
  # 如果到了指定步数的控制点,就改变方向
  if (StepCounter>=StepCount):
    StepCounter = 0
  if (StepCounter<0):
    StepCounter = StepCount + StepDir
    
  time.sleep(0.001)
 
# 停止旋转
for pin in StepPins:
  GPIO.output(pin, False)
 
GPIO.cleanup()

直流电机示例代码:

import RPi.GPIO as GPIO
import time
 
GPIO.setmode(GPIO.BCM)
 
# 定义引脚
MotorPin1   = 18
MotorPin2   = 23
MotorEnable = 24
 
# 设置所有引脚为输出
GPIO.setup(MotorPin1, GPIO.OUT)
GPIO.setup(MotorPin2, GPIO.OUT)
GPIO.setup(MotorEnable, GPIO.OUT)
 
# 设置电机转动
def motor_run(motor_pin1, motor_pin2, motor_enable):
  GPIO.output(motor_pin1, GPIO.HIGH)
  GPIO.output(motor_pin2, GPIO.LOW)
  GPIO.output(motor_enable, GPIO.HIGH)
 
# 设置电机停止
def motor_stop(motor_enable):
  GPIO.output(motor_enable, GPIO.LOW)
  
# 开始转动
motor_run(MotorPin1, MotorPin2, MotorEnable)
 
time.sleep(5)
 
# 停止
motor_stop(MotorEnable)
 
GPIO.cleanup()

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。