当前位置: 首页 > news >正文

树莓派——舵机

树莓派——舵机

舵机

介绍

舵机是一种位置(角度)伺服的驱动器,适用于那些需要角度不断变化并可以保持的控制系统。
舵机是一种俗称,其实是一种伺服马达。可以旋转到 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 <stdio.h>
#include <string.h>
#include <wiringPi.h>
#include <wiringSerial.h>

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);

    }
}

SG90

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

MG90S

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

相关文章:

  • 边缘计算卸载分配优化的论文
  • Linux操作文件命令
  • 前端培训丁鹿学堂:es7,es8常用新特性总结(一)
  • redis中springboot的redisTemplate简单的增删查
  • 猿创征文|Axios的介绍与作用 - 大白话
  • 【概率论基础进阶】随机事件和概率-随机事件、事件间的关系与运算
  • Bingo学习--redis
  • Vue学习第19天——vue脚手架配置代理
  • day13学习总结
  • K8s基础知识总结及常用基本关键命令
  • 内创业革命
  • 【番外篇】如何制作慕斯蛋糕
  • ps2022 - add text
  • 刷题记录:NC208813求逆序数
  • 遗传算法GA求解连续函数问题
  • 【JavaScript】通过闭包创建具有私有属性的实例对象
  • 【划重点】MySQL技术内幕:InnoDB存储引擎
  • Android 初级面试者拾遗(前台界面篇)之 Activity 和 Fragment
  • javascript数组去重/查找/插入/删除
  • Markdown 语法简单说明
  • 解决jsp引用其他项目时出现的 cannot be resolved to a type错误
  • 线性表及其算法(java实现)
  • 一文看透浏览器架构
  • 译米田引理
  • # 执行时间 统计mysql_一文说尽 MySQL 优化原理
  • #1015 : KMP算法
  • #mysql 8.0 踩坑日记
  • (AngularJS)Angular 控制器之间通信初探
  • (C++)八皇后问题
  • (NO.00004)iOS实现打砖块游戏(十二):伸缩自如,我是如意金箍棒(上)!
  • (pojstep1.1.1)poj 1298(直叙式模拟)
  • (附源码)php新闻发布平台 毕业设计 141646
  • (黑马C++)L06 重载与继承
  • (免费领源码)python#django#mysql校园校园宿舍管理系统84831-计算机毕业设计项目选题推荐
  • (七)c52学习之旅-中断
  • (区间dp) (经典例题) 石子合并
  • (三) prometheus + grafana + alertmanager 配置Redis监控
  • (十六)串口UART
  • (转)利用ant在Mac 下自动化打包签名Android程序
  • (最简单,详细,直接上手)uniapp/vue中英文多语言切换
  • .net 4.0发布后不能正常显示图片问题
  • .NET开源项目介绍及资源推荐:数据持久层 (微软MVP写作)
  • .NET面试题(二)
  • /proc/interrupts 和 /proc/stat 查看中断的情况
  • @EventListener注解使用说明
  • [ 云计算 | AWS ] 对比分析:Amazon SNS 与 SQS 消息服务的异同与选择
  • [].shift.call( arguments ) 和 [].slice.call( arguments )
  • [1181]linux两台服务器之间传输文件和文件夹
  • [2019/05/17]解决springboot测试List接口时JSON传参异常
  • [AX]AX2012 AIF(四):文档服务应用实例
  • [ChromeApp]指南!让你的谷歌浏览器好用十倍!
  • [IE编程] 打开/关闭IE8的光标浏览模式(Caret Browsing)
  • [LeetCode]--61. Rotate List
  • [LeetCode]—Permutations II 求全排列(有重复值)
  • [Linux]文件基础-如何管理文件