更新(03 / 12 / 2024): 我们所有产品都有大量库存,也可以在    立即购买

将不同的电机连接到您的 SBC

在本教程中,我们将了解如何将最常见的电机类型连接到 SBC. 我们还将通过一些示例向您展示如何处理它们。 最常见的发动机类型有:

  • 直流电机便宜且易于控制,只需要一个功率输出,并且可以通过 PWM 信号激活。

  • 伺服电机类似于直流电机,但它们包括小型电子设备和内部电位器以形成一个闭环控制回路,从而可以控制旋转角度。 控制也是通过 PWM 进行的,但在这种情况下,控制信号是低功率的,并且功率级集成在伺服电机本身中。

  • 步进电机有几个绕组,需要控制一个序列,但作为回报,它们提供了很高的精度,因为它们每次绕组的极性反转时都会逐步前进。

1.直流电机

为了控制直流电机,我们将其连接到 SBC,如下图所示:

我们需要知道我们电机的一些参数,特别是施加电压与电机速度或 Kv 之间的关系。

Dc_Motor 类代表直流电机,由 50Hz 的 PWM 控制。可以看出,必须提供一些参数,例如电源电压和Kv常数,以及要使用的引脚。作为回报,我们得到两个函数:set_Voltage 和 set_speed。

 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
 直流电机: 频率_赫兹 = 50
    DEF __init__( , 针脚, vm, kv ):
        .vm = vm
        .kv = kv
        .=.嘟嘟 = SBC.输出()
        .嘟嘟.设置_PWM( .别针, .频率_Hz, 0 )
        .设置电压( 0 )
    
    DEF 设置电压( , v): 脉冲百分比 = 100 *v/.vm
        .嘟嘟.设置_PWM( .别针, .频率_Hz, 100-脉冲百分比)
    
    DEF 设置速度( , 转数):
        .设置电压(转/.千伏)

使用示例如下:

>>> 进口时间
>>> 导入 sbc_mtr
>>> 电机 = sbc_mtr.Dc_Motor(“DOUT3”,vm=12,kv=0.5)
>>> print("电压控制")
电压控制
>>> motor.set_voltage(6)
>>> 时间.sleep(1)
>>> motor.set_voltage(0)
>>> print("速度控制")
速度控制
>>> motor.set_speed(100)
>>> 时间.sleep(1)
>>> motor.set_speed(0)

2.伺服电机

伺服电机使用单个控制引脚来控制电机的旋转角度。

 Servo_Motor 类的代码:

 1 2 3 4 5 6 7 8 9 10 11 12 13 14
 伺服电机: 频率_赫兹 = 50
    DUTY_MIN_ms = 0.5
    DUTY_MAX_ms = 2.5
    
    DEF __init__( , 别针 ):
        .=.嘟嘟 = SBC.输出()
        .嘟嘟.设置_PWM( .别针, .频率_Hz, 0 )
        
    DEF 设置角度( , 角度_度): duty_ms = .DUTY_MIN_ms + (.DUTY_MAX_ms-.DUTY_MIN_ms)*角度_度/ 180
        脉冲百分比 = .频率_赫兹*值班时间/ 10
        .嘟嘟.设置_PWM( .别针, .频率_Hz, 100-脉冲百分比)

以及一个使用示例:

>>> 进口时间
>>> 导入 sbc_mtr
>>> 电机 = sbc_mtr.Servo_Motor(“DOUT3”)
>>> print("设置角度为 90 度")
将角度设置为 90 度
>>> motor.set_angle(90)
>>> 时间.sleep(1)
>>> print("设置角度为 0 度")
将角度设置为 0 度
>>> motor.set_angle(0)

3.步进电机

要连接步进电机,我们将遵循类似于图中的方案:

Stepper_Motor 类代码基本上是一个实现上表的状态机。

 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
 步进电机:
   
    DEF __init__( ,引脚):
        .射梢类 = 射梢类
        .嘟嘟 = SBC.输出()
        .= 0
        .步骤 = 0
        .DIR = 1
        .计时器 =  .定时器( -1 )
    
    DEF ( , 方向 ):
        if( .== 0 ):
            .嘟嘟.写( .引脚[0], 1 )
            .嘟嘟.写( .引脚[1], 1 )
            .嘟嘟.写( .引脚[2], 0 )
            .嘟嘟.写( .引脚[3], 0 )
        ELIF( .== 1 ):
            .嘟嘟.写( .引脚[0], 0 )
            .嘟嘟.写( .引脚[1], 1 )
            .嘟嘟.写( .引脚[2], 1 )
            .嘟嘟.写( .引脚[3], 0 )
        ELIF( .== 2 ):
            .嘟嘟.写( .引脚[0], 0 )
            .嘟嘟.写( .引脚[1], 0 )
            .嘟嘟.写( .引脚[2], 1 )
            .嘟嘟.写( .引脚[3], 1 )
        ELIF( .== 3 ):
            .嘟嘟.写( .引脚[0], 1 )
            .嘟嘟.写( .引脚[1], 0 )
            .嘟嘟.写( .引脚[2], 0 )
            .嘟嘟.写( .引脚[3], 1 )
        .步骤 += 方向
        .= (.+ 方向) & 0x03
    
    DEF 设置速度( ,steps_s,方向):
        if(步骤_s  方向 ):
            .计时器.初始化(期间=INT(1000 /step_s), 模式= .定时器.定期,回调=拉姆达 回复: .步骤(方向))
        其他:
            .计时器.初始化()

最后,一个使用示例:

>>> 进口时间
>>> 导入 sbc_mtr
>>> 电机 = sbc_mtr.Stepper_Motor([“DOUT1”,“DOUT2”,“DOUT3”,“DOUT4”])
>>> print("一步一步")
一步一个脚印
>>> 对于范围内的 i(100):
... motor.step(1)
... 时间.sleep_ms( 10 )
>>> 打印(“连续”)
持续
>>> motor.set_speed(100,-1)
>>> 时间.sleep(1)
>>> motor.set_speed(0, 0)

如果你喜欢这个内容,你可以关注我们 Twitter, YouTube, Facebook or LinkedIn 保持更新这样的内容。

有任何问题或要求吗?
联系我们!我们将在 24 小时内回复!

图标
联系我们 ArduSimple
关闭

想了解更多关于 GPS/RTK 的信息吗?

1. 我们的工程团队会联系您解决任何问题
2.我们会及时通知您促销和新产品发布
3.只有当我们有重要新闻时您才会收到我们的消息,我们不会向您发送垃圾邮件