【NANO PI M1】【bluebanboom】06. NanoPi M1驱动28BYJ-48步进电机

  • 步进电机
  • bluebanboom
  • LV4工程师
  • |      2016-07-23 19:26:11
  • 浏览量 1502
  • 回复:3
本帖最后由 bluebanboom 于 2016-7-23 19:27 编辑 步进电机用的是28BYJ-48,电机驱动板芯片是ULN2003。如下图所示: 通过驱动板驱动步进电机很容易,顺时针旋转的时候以IN4-IN3-IN2-IN1的顺序依次高电平,其它引脚低电平。 逆时针旋转的时候以IN1-IN2-IN3-IN4顺序依次高电平,其它引脚低电平。 完成这个顺序,步进电机就会旋转一定角度,如果要持续旋转就持续执行这个顺序。 按照这样的思路,我们先定义好顺时针和逆时针的时序输出,如下所示: 这里我们用的是M1的11,13,15,16号引脚分别与驱动板的IN1,IN2,IN3,IN4连接。 驱动版的VCC连接M1的2号,VND连接M1的9号。 注意我们用的是5V电压,驱动板的VM要和它旁边的VCC用跳线帽短接。 这样,我们的线路就搭建完成了。 我们来讲解一下顺时针旋转的函数。 主要是两个循环,外层的循环是完成转多少step,既然叫做步进电机(Step Monitor),那么这个“step(步)”就是电机最小的旋转角度。具体多少我们就不关心了。总之,很小的。跟人一步一步走路一样,假设我们走来迈一步的距离是固定的比如是1米,那么要走10米,就需要走十步。如果要走0.5米,那么我们办不到。 内层循环就是让步进电机迈出一步去,也就是完成一次IN4-IN3-IN2-IN1的输出。这个内循环在逆时针旋转的函数中是完成IN1-IN2-IN3-IN4的输出。 然后再来看一下write_pins函数。 又是一个循环,这个循环是依次向M1的引脚输出,也就是输出Clockwise和Anticlockwise中定义好的引脚输出值。usleep是给电机一个响应时间,否则太快的话电机还没来得及响应,导致电机无法转动。同样的在run_clockwise中也有一个usleep,也是为了给电机一点响应时间,这个时间还可以作为电机的速度控制,比如想电机转的慢一点,这个值可以大一些,想要快一点,这个值可以小一些。但是不能太小,也不能太大,太小的话容易导致电机无法响应,太大电机就转的太慢了。大家可以设置一下值体验一下。usleep的参数是微秒,所以1000表示等待1毫秒。 main函数中的流程是先初始化gpio,然后设置各个引脚的模式。 接着顺时针旋转200,释放线圈,然后等待,然后逆时针旋转200,OK结束。 释放线圈是为了让步进电机的线圈不导通,因为步进电机在不旋转的时候也是需要通电保持位置,释放线圈可以省电,但同时电机也无法保持位置了。 另外,我还写了一个Go语言版本的驱动。由于多数人还是对C熟悉,这里就不多说Go版本了。但是在Go版本里实现了速度控制,也就是之前提到的usleep。 附上全部代码。 C语言版本用如下命令编译执行:
gcc stepper.c gpio.c -std=gnu99 -o stepper

sudo ./stepper
Go语言版本用如下命令执行:
sudo go run stepper.go
  • 0
  • 收藏
  • 举报
  • 分享
我来回复

登录后可评论,请 登录注册

所有回答 数量:1
灵澈 2016-07-25
最后点击转了么?
0   回复
举报
发布
bluebanboom 回复 2016-07-25
当然转了……
0   回复
举报
x
收藏成功!点击 我的收藏 查看收藏的全部帖子