• 树莓派——舵机


    树莓派——舵机

    舵机

    介绍

    舵机是一种位置(角度)伺服的驱动器,适用于那些需要角度不断变化并可以保持的控制系统。
    舵机是一种俗称,其实是一种伺服马达。可以旋转到 0 到 180 度之间的任何角度,然后根据您的指令精确停止,因此适用于需要角度变化和保持的控制系统。舵机是一个不专业的名称,实际上它是一种伺服电机,一套自动控制装置,由直流电机,减速齿轮组,传感器和控制电路组成。 什么是自动控制? 所谓的自动控制 - 通过使用闭环反馈控制电路不断调整输出偏差 - 使系统输出恒定。
    舵机是一种伺服马达,在0到180度之间进行旋转。英文名为micro servo。

    工作原理

    舵机控制信号由接收机的通道进入信号调制芯片,获得直流偏置电压。它内部有一个基准电路,产生周期为 20ms,宽度为 1.5ms 的基准信号,将获得的直流偏置电压与电位器的电压比较,获得电压差输出。最后,电压差的正负输出到电机驱动芯片决定电机的正反转。当电机转速一定时,通过级联减速齿轮带动电位器旋转,使得电压差为 0,电机停止转动。舵机具有最大旋转角度,中间位置是指从该位置到最小角度的体积,并且最大角度完全相同。 最重要的部分,最大旋转角度随着不同的转向齿轮而变化,但中间位置的带宽是确定的,即 1.5 毫秒。
    有一个基准电路,产生周期为 20ms,宽度为 1.5ms 的基准信号,与输入信号进行对比,正负决定正反转。

    控制

    舵机的控制一般需要一个 20ms 左右的时基脉冲,该脉冲的高电平部分一般为 0.5ms~2.5ms 范围内的角度控制脉冲部分。以 180 度角度伺服为例,那么对应的控制关系是这样的:
    ⚫ 0.5ms--------------0 度;
    ⚫ 1.0ms------------45 度;
    ⚫ 1.5ms------------90 度;
    ⚫ 2.0ms-----------135 度;
    ⚫ 2.5ms-----------180 度

    旋转角度由来自控制线的连续脉冲产生。 该方法称为脉冲调制。 脉冲长度决定了转向器的旋转角度。
    在这里插入图片描述
    当舵机接收到小于 1.5ms 的脉冲时,输出轴将作为标准中间位置,逆时针旋转一定角度; 当接收
    脉冲大于 1.5ms 时,输出轴顺时针旋转。 不同品牌的转向器,甚至同一品牌的不同转向器,最大值和最小值可能不同。
    在这里插入图片描述
    舵机的旋转由脉冲来控制。对于数字和模拟的舵机来说,其控制方式还有些区别

    树莓派使用

    一般来说,舵机由三根线进行控制,电源线,地线,信号线,实际上舵机的只由信号线进行控制。
    红色线是电源线,棕色线是底线,橙色线是信号线。

    IO模拟使用(使用GPIO模拟pwm控制舵机旋转)

    接线方式如下:
    在这里插入图片描述
    代码:
    其实就是使用io空输出一个0.5ms到2.5ms的周期为20ms的脉冲,但是总感觉控制不太准确,可能是io模拟的原因。
    映射关系:

    时间(ms)角度(°)
    0.50
    1.045
    1.590
    2.0135
    2.5180
    
    #include 
    #include 
    #include 
    #include 
    
    int cyc = 20000;
    int pwmPin = 28;
    int value;
    
    /**
     * @brief 将0~180°映射到0.5ms到2.5ms的一次脉冲(周期为20ms)
     * 
     * @param temp 
     */
    void pwm_fun(int temp)
    {
        digitalWrite(pwmPin, HIGH);
        delayMicroseconds(500 + temp * 500 / 45);
        digitalWrite(pwmPin, 0);
        delayMicroseconds((cyc - (500 + temp * 500 / 45)));
    }
    int main()
    {
        wiringPiSetup();
        pinMode(pwmPin, OUTPUT);
        for (int i = 0; i <= 180; i += 10)
        {
            pwm_fun(i);
        }
    
        int angle;
        while (1)
        {
            printf("Please the angle of spin [0,180]:\n");
            scanf("%d",&angle);
            printf("The angle is %d\n",angle);
            pwm_fun(angle);
    
        }
    }
    
    
    • 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

    SG90

    我手中的这个SG90是模拟的、360°的,只能控制它的旋转速度和方向。也就是说在工作范围内(0.5-2.5),当脉冲在中间值1.5ms的时候是停止的,中间值两边旋转的方向不一样,和中间值的差值越大,旋转速度越快(或者说一次脉冲的旋转方向越大)。
    在这里插入图片描述

    MG90S

    还有一个数字的mg90s,是180°的,这个时侯的脉冲相当于直接控制舵机的角度,如0.5ms的脉冲控制舵机转到0°位置,2.5ms的脉冲控制舵机转到180°位置,这个数字的只需要一次脉冲就可以。
    在这里插入图片描述

  • 相关阅读:
    数组常用的几种排序方式
    给定任意字符串,反转字符串中的单词
    时间序列与 statsmodels:预测所需的基本概念(2)
    [AIGC] Java序列化利器 gson
    【算法】位运算算法——消失的两个数字(困难)
    axure9.0 工具使用思考
    HCIP(第十四天)
    cmd通过文件名和大小匹配替换
    哈希
    Docker 持久化存储和数据共享_Volume
  • 原文地址:https://blog.csdn.net/weixin_45090728/article/details/126665715