hahabear 发表于 2013-5-9 16:40:51

树莓派控制步进电机

本帖最后由 hahabear 于 2013-5-9 16:40 编辑

一、拿到树莓派爬墙N天,终于能控制步进电机,代码也是根据他的修改的
      参考帖子 http://www.shumeipai.net/thread-540-1-1.html
二、关于GPIO口的说明
      参考地址:http://elinux.org/RPi_Low-level_peripherals#Introduction
三、步进电机使用说明
   见附件:“步进电机_28BYJ-48介绍和驱动及c编程.doc”和“28BYJ48电机详细使用说明.pdf”
四、硬件连接
      需要步进电机驱动板,拿出已经满是灰尘的51单片机的开发板,上面有ULN2003模块。GPIO23、GPIO24、GPIO25、GPIO22分别控制步进电机的A橙、B黄、C粉、D蓝四根信号线。步进电机电源取自单片机开发板电机驱动电路VCC/5V

五、代码
求教,如果把去掉会提示GPIO口已经在使用。貌似只有GPIO23口是这样。#!/usr/bin/env python

import RPi.GPIO as GPIO
import time

# 设置GIPO口的标号方式
GPIO.setmode(GPIO.BCM)               
GPIO.setwarnings(False)               
#使用GPIO23,GPIO24,GPIO25,GPIO22
StepPins =

#将选择的GPIO口设置为输出
for pin in StepPins:
      print('SET PINs OUT')
      GPIO.setup(pin, GPIO.OUT)
      GPIO.output(pin, False)

#设置反转表
Seq_reversal = []
Seq_reversal = range(0,4)
Seq_reversal =
Seq_reversal =
Seq_reversal =
Seq_reversal =
#设置正转表
Seq_forward = []
Seq_forward = range(0,4)
Seq_forward =
Seq_forward =
Seq_forward =
Seq_forward =

#反转
def Reversal():
      global stepcounter
      for pin in range(0,4):
                xpin = StepPins
                if Seq_reversal == 1:
                        GPIO.output(xpin, True)
                else:
                        GPIO.output(xpin, False)
      stepcounter += 1

      if stepcounter >=4 :
                stepcounter = 0
      if stepcounter < 0:
                stepcounter = 4
      time.sleep(0.005)

#正转
def Forward():
      global stepcounter
      for pin in range(0,4):
                xpin = StepPins
                if Seq_forward == 1:
                        GPIO.output(xpin, True)
                else:
                        GPIO.output(xpin, False)
      stepcounter += 1

      if stepcounter >=4 :
                stepcounter = 0
      time.sleep(0.005)

if __name__ == '__main__':
      print('Begin')
      stepcounter = 0
      num = 0
      #反转一圈后,正转一圈,一直循环
      while True:
                if num < 2048:
                        print('Reserval')
                        print(num)
                        Reversal()
                        num += 1
                elif num >= 2048 and num < 4096:
                        print('Forward')
                        print(num)
                        Forward()
                        num += 1
                elif num >= 4096:
                        num = 0步进电机减速比为32.旋转一圈需要360/(5.625/32)=2048.


lawme 发表于 2013-5-9 17:19:49

请教一下,如果有多个电机,如何控制?

比如,操作航模,至少需要方向舵和升降舵。

多维度的操作控制,是比较有实用意义的问题。

hahabear 发表于 2013-5-9 17:30:08

lawme 发表于 2013-5-9 17:19 static/image/common/back.gif
请教一下,如果有多个电机,如何控制?

比如,操作航模,至少需要方向舵和升降舵。


我是刚接触树莓派,还在学习中。你也是玩航模的?固定翼还是直升机?

lawme 发表于 2013-5-9 17:37:07

我玩的是“空手道”,只说不练,呵呵。

我对航模有兴趣,但不知如何下手。

lawme 发表于 2013-5-9 18:14:59

本帖最后由 lawme 于 2013-5-9 18:16 编辑

上网找些资料看,感觉比较容易制作的是“四旋翼直升机”。

它不需要固定翼飞机的气动学知识,和复杂的技术工艺。

比较难办的是对四台电动机转速的遥控。


269569205 发表于 2013-5-10 11:25:18

不能直接接在电机上么
是供电不足?

269569205 发表于 2013-5-10 11:26:00

不能直接 接在电机上么?
供电不足?

hahabear 发表于 2013-5-14 14:32:22

lawme 发表于 2013-5-9 18:14 static/image/common/back.gif
上网找些资料看,感觉比较容易制作的是“四旋翼直升机”。

它不需要固定翼飞机的气动学知识,和复杂的技 ...

没有接触过四旋翼,认真学习树莓派。

hahabear 发表于 2013-5-14 14:32:58

269569205 发表于 2013-5-10 11:25 static/image/common/back.gif
不能直接接在电机上么
是供电不足?

看帖子说是供电电流不够,我没有试过

solomon 发表于 2013-5-16 15:50:05

马克!以后慢慢学习
页: [1] 2
查看完整版本: 树莓派控制步进电机