树莓派的舵机

古月金真

1.舵机的分类

分为数字舵机和模拟舵机。数字舵机,又称伺服电机。

2.舵机的简介

伺服电机也叫舵机,英文servo,是由直流电机、减速齿轮组、电位器和控制电路组成,并封装在一个便于安装的外壳里的伺服单位,能够根据输入信号比较准确的转动到给定的角度,典型的伺服电机及其组成如下图所示。

在这里插入图片描述
舵机的基本工作原理:1、控制电路接收来自信号源的控制信号,并驱动直流电机转动;2、减速齿轮组按倍数降低直流电机转速,并将直流电机的输出扭矩放大到相应倍数,然后输出;3、电位器和减速齿轮组一起转动,测量舵机轴转动角度;4、控制电路检测并根据电位器判断舵机转动角度,然后控制舵机转动到目标角度或保持在目标角度。
在这里插入图片描述

  • 舵机的接线图如下:
    在这里插入图片描述

3.舵机的规格

  • 1.角度
    伺服电机不像普通直流电机只能机械的转圈,它可以根据指令在旋转到一定的角度后停下来,常见的旋转范围有 0-90度、0-180度、 0-270度 、 0-360度。
  • 2.转矩
    转矩也就是伺服电机的力量大小,能够带动多重的物体,单位为kg.cm如9g.cm15kg.cm、20kg.cm等。
  • 3.转速
    转速是指伺服电机在空载的情况下转过60度角所需的时间,常见伺服电机的速度一般在0.11s/60度~ 0.21s/60度。
  • 4.电压
    伺服电机的工作电压对性能有重大的影响,较高的电压可以提高伺服电机的转矩和转速,一般的推荐电压为4.8V和6V。
  • 5.尺寸、重量
    尺寸、重量也是伺服电机选型时需要考虑的一个重要指标。一般来说,伺服电机的功率与其尺寸、重量成正比,功率大的,尺寸、重量也相对较大。
  • 6.材质
    伺服电机的外壳一般是塑料的,也有金属的。金属外壳的散热性更好,伺服电机内的直流电机功率可以更高,以输出更高的扭矩。
      减速齿轮的材质有塑料、金属和混合等3种。塑料齿轮的成本低、噪音小,其强度也较低,在超出极限负载时塑料齿轮可能会崩齿。金属齿轮强度高、成本也高,在装配精度一般的情况下噪声会很大,金属齿轮可以长时间超负载而不会损坏,但会导致直流电机过热损坏或外壳变形,且无法修复。

4.舵机控制原理

舵机有地线、电源线和控制线(信号线)3条连接线,中间的一条线通常为电源线。通过控制线发送一个脉冲宽度调制(PWM)信号可以控制舵机转动到一个角度,这个PWM信号必须周期性发送,否则舵机就会转到一个任意的角度。通常,控制舵电机的PWM信号周期为20ms(50HZ),宽度在0.5ms-2.5ms之间(对应最小角度和最大角度)。
以0-180度的舵机为例,,我已经知道了舵机的pwm周期为20ms,然后是这样的
0.5ms--------------0度;
1.0ms------------45度;
1.5ms------------90度;
2.0ms-----------135度;
2.5ms-----------180度;
在这里插入图片描述
在这里插入图片描述
舵机转速速控制
对于180度舵机:
舵机的转动速度取决于起始角度和目标角度的差,差别越大转得越快,当接近时就放慢角度。所以没有专门的函数控制转速。但在大角度转动时,你可以用程序把它设成几个小角度递进,这样可以放慢速度。
对于360度舵机:
write()或者writeMicroseconds()的参数决定舵机的速度,但也可以通过delay()或者delayMicroseconds()来减速。

也通过delay进行慢速,但快速的话只有加高电压了 。

5.占空比和角度之间的换算

假设direction为角度,duty为占空比,很明显角度和占空比之间存在一次函数关系duty=k∗direction+b(k,b是常数,k≠0) duty=kdirection+b(k,b是常数,k≠0)duty=k∗direction+b(k,b是常数,k 不等于0。如下图所示,当舵机的旋转角度为 0-180度 时,可计算出k=1/18,b=2.5,即duty=1/18∗direction+2.5 duty=1/18direction+2.5duty=1/18∗direction+2.5。

在这里插入图片描述
对于其它旋转角度的伺服电机的角度-占空比转换可以依次类推。从本质上讲,树莓派控制树莓派实际上是对PWM信号占空比的控制。

6.电路接线

实验的电路原理图如图8.6所示。控制线与GPIO26引脚串联了一个1kΩ的电阻,可以防止伺服电机发生故障时,控制信号的瞬间高强电流对GPIO引脚造成损害,但这不是必不可少的。这里使用的伺服电机的电压仅4.8V,因此可以直接从树莓派上取电,如果使用伺服电机的电压较高,那就需要采用外置电源为其供电。
在这里插入图片描述

7.程序及运行结果

import RPi.GPIO as GPIO                 # 引入GPIO模块

if __name__ == '__main__':
    ServoPin = 26
    PWMFreq = 50                        # PWM信号频率

    GPIO.setmode(GPIO.BCM)              # 使用BCM编号方式
    GPIO.setup(ServoPin, GPIO.OUT)      # 将GPIO19设置为输出模式
    pwm = GPIO.PWM(ServoPin, PWMFreq)   # 创建PWM对象,并设置频率为50
    pwm.start(0)                        # 启动PWM,并设置初始占空比0

    try:
        while True:
            # 等待输入一个0到180的角度
            direction = float(input("Pleas input the direction: "))
            if direction < 0 or direction > 180:
                print("Please input a direction between 0 an 180.")
                continue

            duty = (1/18) * direction + 2.5   # 将角度转换为占空比
            pwm.ChangeDutyCycle(duty)         # 改变PWM占空比
    finally:
        pwm.stop()                      # 停止PWM
        GPIO.cleanup()                  # 清理释放GPIO资源,将GPIO复位 

当程序运行时,当我输入0度时,舵机转到0度的位置,当我输入180度时电机转到180度的位置,其他依次类推。
在这里插入图片描述

  • 15
    点赞
  • 65
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值