MicroPython TPYBoard v102 驱动28BYJ-48步进电机

TPYBoard v102 驱动28BYJ-48步进电机

实验目的

    了解步进电机的工作原理

    学习步进电机的驱动方法

实验器材

    TPYBoard v102 1块

    微型步进电机(28BYJ-48) 1个

    步进电机驱动板(ULN2003APG) 1块

    micro USB数据线 1条

    杜邦线 若干

步进电机的介绍

本次实验采用的是28BYJ-48 四相八拍电机,电压DC5V~12V。

24BYJ48名称的含义:

24:电机外径24mm

B:步进电机中步字的拼音首字母

Y:永磁中永字的拼音首字母

J:减速的减字拼音首字母

48:四相8步

实物图

工作原理

       步进电机是将电脉冲信号转变为角位移或线位移的开环控制电机,是现代数字程序控制系统中的主要执行元件,应用极为广泛。在非超载的情况下,电机的转速、停止的位置只取决于脉冲信号的频率和脉冲数,而不受负载变化的影响,当步进驱动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度,称为“步距角”,它的旋转是以固定的角度一步一步运行的。可以通过控制脉冲个数来控制角位移量,从而达到准确定位的目的;同时可以通过控制脉冲频率来控制电机转动的速度和加速度,从而达到调速的目的。

28BYJ-48 步进电机参数表

上表中启动频率≥550 P.P.S(每秒脉冲数),意思是要想正常启动,需要单片机每秒至少给出550个步进脉冲。那么每一节拍需要持续的时间就是1S/550≈1.8ms,所以控制节拍刷新的速率应大约1.8ms。

驱动原理

当连续不断的给电机发送控制脉冲时,电机就会不断的转动。每一个脉冲信号对应步进电机的某一相或两相绕组的通电状态改变一次,对应转子就会转过一定的角度(步距角)。当通电状态的改变完成一个循环时,转子转过一个齿距。

四相步进电机可以在不同的通电方式下运行,常见的通电方式:

       四拍(单相绕组通电):A-B-C-D-A…

       双四拍(双相绕组通电):AB-BC-CD-DA-AB-...

       八拍: A-AB-B-BC-C-CD-D-DA-A…

模拟效果图

硬件连接

将步进电机白色接头插到驱动板对应的座子上即可。

TPYBoard v102驱动板与驱动板的接线图,如下:

TPYBoard v102

ULN2003APG驱动板

X1

IN1

X2

IN2

X3

IN3

X4

IN4

VIN

5V正极

GND

负极

 

程序源码如下:

# main.py -- put your code here!
import pyb
from pyb import Pin

Pin_All=[Pin(p,Pin.OUT_PP) for p in ['X1','X2','X3','X4']]

#转速(ms) 数值越大转速越慢 最小值1.8ms
speed=2

STEPER_ROUND=512 #转动一圈(360度)的周期
ANGLE_PER_ROUND=STEPER_ROUND/360 #转动1度的周期
print('ANGLE_PER_ROUND:',ANGLE_PER_ROUND)

def SteperWriteData(data):
    count=0
    for i in data:
        Pin_All[count].value(i)
        count+=1
def SteperFrontTurn():
    global speed
    
    SteperWriteData([1,1,0,0])
    pyb.delay(speed)

    SteperWriteData([0,1,1,0])
    pyb.delay(speed)

    SteperWriteData([0,0,1,1])
    pyb.delay(speed)
    
    SteperWriteData([1,0,0,1])   
    pyb.delay(speed)
    
def SteperBackTurn():
    global speed
    
    SteperWriteData([1,1,0,0])
    pyb.delay(speed)
    
    SteperWriteData([1,0,0,1])   
    pyb.delay(speed)
    
    SteperWriteData([0,0,1,1])
    pyb.delay(speed)

    SteperWriteData([0,1,1,0])
    pyb.delay(speed)


def SteperStop():
    SteperWriteData([0,0,0,0])
    
def SteperRun(angle):
    global ANGLE_PER_ROUND
    
    val=ANGLE_PER_ROUND*abs(angle)
    if(angle>0):
        for i in range(0,val):
            SteperFrontTurn()
    else:
        for i in range(0,val):
            SteperBackTurn()
    angle = 0
    SteperStop()

if __name__=='__main__':
    SteperRun(180)
    SteperRun(-180)

 

转载于:https://my.oschina.net/micropython/blog/1593086

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,关于Java实现CAN通信,我可以为您提供一些思路和建议。首先需要了解的是,Java本身并不支持CAN通信,因此需要使用第三方库来实现CAN通信功能。常用的Java CAN通信库有以下几个: 1. jCAN:一个开源的Java CAN通信库,支持Windows和Linux操作系统。 2. can4java:另一个开源的Java CAN通信库,支持Windows和Linux操作系统。 3. SocketCAN:一个基于Socket的CAN通信库,可以在Linux下使用。 您可以根据自己的需求选择其中一个库进行使用。下面简单介绍一下使用jCAN进行CAN通信的步骤: 1. 下载并安装jCAN库,可以从官方网站(https://sourceforge.net/projects/jcan/)下载。 2. 编写Java程序,引入jCAN库,并创建CAN通信对象。 3. 打开CAN通信通道,设置CAN通信参数,如波特率等。 4. 发送CAN数据帧。 5. 接收CAN数据帧。 下面是一个简单的示例代码: ```java import com.sun.jna.Native; import com.sun.jna.Pointer; public class CanTest { public static void main(String[] args) { // 加载动态库 Native.loadLibrary("canlib32", Canlib.class); // 打开CAN通信通道 int channel = 0; int handle = Canlib.canOpenChannel(channel, Canlib.canOPEN_ACCEPT_VIRTUAL); // 设置CAN通信参数 Canlib.canSetBusParams(handle, Canlib.canBITRATE_250K, 0, 0, 0, 0, 0); // 发送CAN数据帧 Canlib.canWrite(handle, 0x123, new byte[] {0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08}, 8, 0); // 接收CAN数据帧 Canlib.canReadWait(handle, msg, null); } } // jCAN库的接口定义 interface Canlib extends com.sun.jna.Library { int canOpenChannel(int channel, int flags); int canSetBusParams(int handle, int bitrate, int tseg1, int tseg2, int sjw, int noSamp, int syncmode); int canWrite(int handle, int id, byte[] msg, int dlc, int flags); int canReadWait(int handle, CanMessage msg, Pointer timeout); } ``` 需要注意的是,以上代码仅为示例,具体的CAN通信细节需要根据具体情况进行调整。另外,jCAN库还提供了许多其他的CAN通信相关接口,您可以根据需要进行调用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值