在本教程中,我们将了解如何将最常见的电机类型连接到 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)
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)
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)