OpenMV:22电机扩展板控制直流电机


今天为大家讲解下 OpenMV配套的电机扩展板

我们需要自己焊接插针

在使用电机扩展板时,我们的电机扩展板需要外接一个6V~12V的电源,来为电机供电;电机扩展板同时会使用LDO为OpenMV进行供电

对于每个电机,电机驱动芯片需要两个引脚来设置其内部H桥的方向(这个方向可以控制我们电机的正反转)

同时我们需要一个额外的引脚来进行PWM的控制,这样可以进行我们电机速度的控制

我们的电机扩展板使用了P0、P1、P2、P3四个引脚来进行电机方向的控制P7、P8来进行PWM速度的控制,所以我们的电机拓展板和PCA9685舵机拓展板是可以同时使用的,因为他们的引脚并不冲突


电机拓展板产品介绍

打开星瞳科技官网,点击产品,找到电机扩展板
在这里插入图片描述
我们可以使用同一块电池来为两个小于2A的低功率电机进行供电

我们的电机扩展板有三个需要外接引脚的地方
在这里插入图片描述
左边的两个分别是两个直流电机的接口,我们将电机接到这两个引脚上即可

第三个是用来接电源的接口(上面标注了GND和VBAT电池正极)

在这里插入图片描述


代码

# 电机驱动板输出PWM例程
#
# A为左轮 B为右轮
#
# 此示例显示如何控制OpenMV Cam上的电机扩展板。 
# 通过使用PYB模块控制电机扩展板,可以通过PWM控制速度并设置数字I/O引脚状态。 
# 电机扩展板需要6个I/O引脚用于两个电机。

import pyb  # 导入pyb模块(pyb 模块包含与插件相关的特定函数)

# 初始化4个引脚
    # 这些引脚控制我们的方向,而下面的其他PWN引脚控制速度。 
    # 每个电机的方向由H桥设置,其中A0/1是一个H桥驱动器的两侧。 B0/1是另一个H桥。
pinADir0 = pyb.Pin('P3', pyb.Pin.OUT_PP, pyb.Pin.PULL_NONE)
pinADir1 = pyb.Pin('P2', pyb.Pin.OUT_PP, pyb.Pin.PULL_NONE)
                                                           # 每两个引脚控制其中一个电机的方向(是由电机驱动板的芯片决定的)
pinBDir0 = pyb.Pin('P1', pyb.Pin.OUT_PP, pyb.Pin.PULL_NONE)
pinBDir1 = pyb.Pin('P0', pyb.Pin.OUT_PP, pyb.Pin.PULL_NONE)

# 控制电机的方向
    # 对于向前或向后操作:Dir0/1必须彼此不相等。如果它们相等则那就是刹车操作。 
    # 如果它们不相等,则电机将以另一个方式旋转,这取决于它的连接和dir 0的值。
pinADir0.value(0)   # 把P3引脚设置为低电平
pinADir1.value(1)   # 把P2引脚设置为高电平       控制其中一个轮子正转(如果是1 0 就是轮子反转;如果是0 0 就是停止不动)

    # 对于向前或向后操作,Dir0/1必须彼此不相等。如果它们相等则那就是刹车操作。 
    # 如果它们不相等,则电机将以另一个方式旋转,这取决于它的连接和dir 0的值。
pinBDir0.value(0)
pinBDir1.value(1)                   # 控制两个电机的另一个正转

# 设置一个定时器
    # 创建一个以1KHz运行的定时器对象,它将为我们的OpenMV Cam上的PWM输出供电。 
    # 只需要创建一次。
tim = pyb.Timer(4, freq=1000)

# 通过定时器来控制PWM信号
    # 使用timer对象在OpenMV Cam上创建两个PWM输出。这些定时器控制电机的速度。 
    # 您将在循环中重复设置这些定时器的PWM百分比。
    
    
# chA为左轮    chB为右轮
chA = tim.channel(1, pyb.Timer.PWM, pin=pyb.Pin("P7"))
chB = tim.channel(2, pyb.Timer.PWM, pin=pyb.Pin("P8"))      # 通过定时器来控制两个PWM信号,来控制电机速度

while (True):

    for i in range(100):# i从0-99增加
        pyb.delay(100)
        chA.pulse_width_percent(i)      # 第一个电机的占空比从0-99 ——> 速度越来越快
        chB.pulse_width_percent(99-i)   # 第二个电机的占空比从99-0 ——> 速度越来越慢

    for i in range(100):# 这是相反的
        pyb.delay(100)
        chA.pulse_width_percent(99-i)   # 第一个电机的占空比从99-0 ——> 速度越来越慢
        chB.pulse_width_percent(i)      # 第二个电机的占空比从0-99 ——> 速度越来越快



# 如果只控制单个电机
#while (True):
#    chA.pulse_width_percent(20) # 左轮
#    #chB.pulse_width_percent(20) # 右轮

猜你喜欢

转载自blog.csdn.net/m0_59466249/article/details/125379985