• 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) # 右轮
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
  • 相关阅读:
    030-第三代软件开发-密码输入框
    ocr表格识别(四)——文本检测DBnet原理及其实现
    融合注意力机制和Bi-LSTM的旅游评价情感分析模型
    2609. 最长平衡子字符串 --力扣 --JAVA
    HCNP Routing&Switching之ARP安全
    第四章 核心概念
    iPhone手机分辨率整理
    在线流程图和思维导图开发技术详解(五)
    利用h5py加速数据集读取
    Kotlin学习笔记(六)作用域函数run,with, apply,also,let,takeIf,takeUnless,repeat
  • 原文地址:https://blog.csdn.net/m0_59466249/article/details/125379985