Arduino的PWM应用:舵机控制

目录

概述

1 认识舵机

1.1 舵机分类

1.2 舵机结构

1.3 舵机工作原理

1.4 舵机控制原理

1.5 舵机工作参数介绍

1.5.1 基本参数

1.5.2 舵机扭矩

2 系统硬件

2.1 硬件模块介绍

2.1.1  SG90 9G 360°舵机

2.1.2  SG90 9G 180°舵机

2.1.3 Arduino UNO 主板 

2.2 整体结构

3 软件设计

3.1 功能介绍

3.1.1 舵机控制分析

3.1.2 实现要求

3.2 代码实现

3.2.1 开发环境编写代码

3.2.2 详细代码

4 测试


概述

       本文主要介绍舵机的实现原理,控制方法,并使用Arduino UNO板卡设计一个案例,控制舵机按照预定的规则工作。

1 认识舵机

      舵机可以在程序的控制下,在一定范围内连续改变输出轴角度并且可以保持住。 其最早被用在航模和船模等遥控模型中,控制各种舵面的转动。现在这种电机大量的运用在各种机器人、机械臂的关节以及智能小车的转向机构中。

   

1.1 舵机分类

1)按照舵机的控制电路可以分为:模拟舵机和数字舵机。模拟舵机和数字舵机的机械结构可以说是完全相同的, 模拟舵机的控制电路为纯模拟电路,需要一直发送目标信号,才能转到指定的位置,响应速度较慢,无反应区较大; 数字舵机内部控制电路则加上了微控制器,只需要发送一次目标信号,即可到达指定位置,速度比模拟舵机更快,无反应区也更小。

2)按照使用对象的不同,可以分为:航模舵机、车模舵机、船模舵机和机器人舵机。航模舵机一般要求速度快、精度高, 而车模和船模用的舵机一般要求具有大扭矩和防水性好。

3)按照内部机械材质,又可分成:塑料齿舵机和金属齿舵机。塑料齿舵机内部的传动齿轮是塑料的,重量轻价格便宜, 但是扭矩一般较小无法做大;金属齿舵机的扭矩更大,舵机更结实耐用,但是相比塑料齿更重也更贵。

4)按照外部接口和舵机的控制方式,又可分为:PWM舵机和串行总线舵机。

1.2 舵机结构

       舵机主要由以下几个部分组成:外壳、舵盘、直流电机、减速齿轮组、角度传感器、控制驱动电路和接口线缆等。常见的舵机内部结构如下图所示。

      角度传感器负责舵机的位置反馈,直接装在舵机的主输出轴上,将轴旋转后产生的角度变化变成电压信号发回控制电路,当前轴角度; 控制驱动电路用来接收外部接口传来的信号和角度传感器反馈的电压值,以及驱动直流电机旋转; 减速齿轮组则是降低直流电机的转速并且放大扭矩。

1.3 舵机工作原理

        以模拟舵机为例介绍舵机工作原理:模拟舵机内部的控制驱动电路板从外界接收控制信号, 经过处理后变为一个直流偏置电压,在控制板内部有一个基准电压,这个基准电压由电位器产生并反馈到控制板。将外部获得的直流偏置电压与电位器的电压进行比较获得电压差, 并输出到电机驱动芯片驱动电机,电压差的正负决定电机的正反转,大小决定旋转的角度,电压差为0时,电机停止转动。大致原理框图如下图所示。

1.4 舵机控制原理

舵机pin引脚介绍:

中间的红色线:电源正极

咖啡色线: 电源负极

橙色线: 控制线号线

        舵机的控制通常采用PWM信号,例如需要一个周期为20ms的脉冲宽度调制(PWM), 脉冲宽度部分一般为0.5ms-2.5ms范围内的角度控制脉冲部分,总间隔为2ms。 当脉冲宽度为1.5ms时,舵机旋转至中间角度,大于1.5ms时 舵机旋转角度增大,小于1.5ms时舵机旋转角度减小。舵机分90°、180°、270°和360°舵机。 以180°的舵机为例来看看脉冲宽度与角度的关系:

        舵机是一种位置伺服的驱动器,适用于那些需要角度不断变化并可以保持的控制系统。其工作原理是:控制信号由接收机的通道进入信号调制芯片,获得直流偏置电压。它内部有一个基准电路,产生周期为20ms,宽度为1.5ms的基准信号,将获得的直流偏置电压与电位器的电压比较,获得电压差输出。最后,电压差的正负输出到电机驱动芯片决定电机的正反转。当电机转速一定时,通过级联减速齿轮带动电位器旋转,使得电压差为0,电机停止转动。

1.5 舵机工作参数介绍

1.5.1 基本参数

 1)舵机速度的单位:sec/60°,就是舵机转过60°需要的时间。

 2)和控制脉冲关系:变化宽度大,变化速度快, 舵机就有可能在一次脉冲的变化过程中还没有转到目标  角度时,而脉冲就再次发生了变化, 舵机的转动速度一般有0.16sec/60°、0.12sec/60°等,0.16sec/60°就是舵机转动60°需要0.16秒的时间。

3)和工作电压关系:在允许的电压范围内,电压越大速度越快,反之亦然。

1.5.2 舵机扭矩

       舵机扭矩的单位是KG*CM,这是一个扭矩的单位,可以理解为在舵盘上距离舵机轴中心水平距离1CM处, 舵机能够带动的物体重量,如下图所示。

2 系统硬件

2.1 硬件模块介绍

2.1.1  SG90 9G 360°舵机

本系统使用的舵机型号为SG90,其具体参数如下:

注意:

1) 360°舵机只能控制正转、停止、反转,不能控制其转到具体角度

2)0~90° 顺时针旋转, 90° 停止转动, 90~180 逆时针旋转

2.1.2  SG90 9G 180°舵机

180°舵机,可以自由控制角度,角度范围: 0~180°,具体操作方法如下:

2.1.3 Arduino UNO 主板 

系统使用Arduino UNO作为主控板,舵机信号引脚和有PWM功能的引脚相连。

2.2 整体结构

舵机和Arduino UNO 主板关系图

模块引脚Arduino UNO引脚注释
舵机-信号引脚-IOpin-3控制舵机转角

3 软件设计

3.1 功能介绍

3.1.1 舵机控制分析

     舵机的控制一般需要一个20ms左右的时基脉冲,该脉冲的高电平部分一般为0.5ms~2.5ms,在该该电平范围角度控制脉冲部分。以180度角度伺服为例,其对应的控制关系如下:

   0.5ms--------------0度;

   1.0ms------------45度;

   1.5ms------------90度;

   2.0ms-----------135度;

   2.5ms-----------180度;

3.1.2 实现要求

应用舵机,使其旋转的角度分别为: 45°,90°,135°,180°,225°,270°,360°。

3.2 代码实现

3.2.1 开发环境编写代码

3.2.2 详细代码

#include <Servo.h>  //调用舵机库
Servo myservo;      // 定义舵机对象

void setup()
{
     myservo.attach(3);  // 设置舵机控制针脚接数字7引脚
}

void loop()
{
      myservo.write(45);  
      delay(3000); //占空比为1.0ms的PWM信号旋转约3秒时间
      
      myservo.write(90);  
      delay(1000); //占空比为1.5ms的PWM信号停止1秒
      
      myservo.write(0);   
      delay(3000); //占空比为0.5ms的PWM信号旋转约3秒时间
      myservo.write(90); 
        delay(1000); //占空比为1.5ms的PWM信号停止1秒
      
      myservo.write(135);
        delay(3000); //占空比为2.0ms的PWM信号旋转约3秒时间
      myservo.write(90);  
      delay(1000); //占空比为1.5ms的PWM信号停止1秒
      
      myservo.write(180); 
      delay(3000); //占空比为2.5ms的PWM信号旋转约3秒时间
      myservo.write(90);  
      delay(1000); //占空比为1.5ms的PWM信号停止1秒
      
  }

4 测试

旋转90°

旋转18°

旋转45°

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/394694.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

19. 【Linux教程】nano 编辑器

前面小节介绍了如何使用 vim 编辑器&#xff0c;相比于 vim 编辑器&#xff0c;nano 编辑器就比较简单了。nano 是 UNIX 系统中的一个文本编辑器&#xff0c;大部分 Linux 发行版本默认都安装了 nano 文本编辑器。 和 vim 编辑器相比&#xff0c;nano 编辑器就没有那么强大&am…

Unix I/O 模型及Java I/O 模型详解

在Unix Socket的输入操作中&#xff0c;可以将其分为以下几个阶段&#xff1a; 等待数据就绪(内核空间)&#xff1a; 在这个阶段&#xff0c;应用程序通过调用阻塞式的读取函数&#xff08;如recv&#xff09;或非阻塞式的读取函数&#xff08;如recv、recvfrom&#xff09;等待…

Opencv实战(1)读取与图像操作

Opencv 文章目录 Opencv一、读取图片1.imshow2.namedWindow3.imshow4.效果图 二、像素操作(1).访问像素1. at()2.Mat_ (2).遍历像素1.指针遍历2.迭代器遍历 (3).threshold(4).通道分离1.split2.merge (5)Gamma矫正 三、深浅拷贝 一、读取图片 1.imshow Mat imread(const stri…

数据库所在服务器磁盘满了怎么办?

大家好&#xff0c;我是G探险者。 给大家拜个晚年哈&#xff0c;节后上班第一天&#xff0c;打开电脑&#xff0c;发现数据库服务器连不上了。 幸亏&#xff0c;节后第一天上班的人不太多&#xff0c;领导还没来&#xff0c;我一番鼓捣解决了这个问题。 所以做个总结&#xff0…

面试redis篇-02缓存穿透

原理 例&#xff1a; 一个get请求&#xff1a;api/news/getById/1 缓存穿透&#xff1a;查询一个不存在的数据&#xff0c;mysql查询不到数据也不会直接写入缓存&#xff0c;就会导致每次请求都查数据库 解决方案一 缓存空数据&#xff0c;查询返回的数据为空&#xff0c;仍把…

Visual Studio Code安装Oracle SQL Developer插件

Visual Studio Code&#xff0c;简称VS Code&#xff0c;是最流行的IDE之一。SQL Developer作为面向 Oracle 数据库专业人员的查询、开发和管理工具&#xff0c;现已可作为插件&#xff08;Extension&#xff09;在VS Code中安装。无需安装 Java, .NET, 和Oracle Client 。 数…

多线程——

一、为什么要有多线程&#xff1f; 1、线程与进程 进程&#xff1a;进程是程序的基本执行实体 举例&#xff1a;在任务管理器中&#xff0c;一个软件运行之后&#xff0c;它就是一个进程 线程&#xff1a;&#xff08;简单理解&#xff0c;线程就说应用软件中互相独立&…

Positive SSL 证书介绍

Positive SSL 是一种受欢迎的 SSL 证书&#xff0c;提供了卓越的安全性、性价比和品牌信任。以下是对 Positive SSL 在这些方面的简要介绍&#xff1a; 1. 安全性&#xff1a; Positive SSL 证书采用强大的加密技术&#xff0c;确保网站和用户之间的数据传输是安全的。它使用…

PyCharm 取消所有断点

PyCharm 取消所有断点 1. Run -> View Breakpoints...2. Python Line Breakpoint3. Remove - DoneReferences 1. Run -> View Breakpoints… 2. Python Line Breakpoint ​​​ 3. Remove - Done References [1] Yongqiang Cheng, https://yongqiang.blog.csdn.net/

spring boot自动装配及自动装配条件判断

第一步需要在pom.xml文件指定需要导入的坐标 要是没有自动提示需要检查maven有没有 实现代码 /*springboot第三方自动配置实现方法 * 什么是自动配置 自动配置就是springboot启动自动加载的类不需要在手动的控制反转自动的加入bean中 * * *//*第一种方案包扫描 不推荐因为繁琐…

第三篇【传奇开心果系列】Python的文本和语音相互转换库技术点案例示例:pyttsx3实现语音助手经典案例

传奇开心果短博文系列 系列短博文目录Python的文本和语音相互转换库技术点案例示例系列 短博文目录一、项目背景和目标二、雏形示例代码三、扩展思路介绍四、与其他库和API集成示例代码五、自定义语音示例代码六、多语言支持示例代码七、语音控制应用程序示例代码八、文本转语音…

WouoUI-PageVersion 一个用于快速构建具有丝滑OLED_UI动画的项目

WouoUI-PageVersion 写在前面 简介&致谢 Air001的TestUI例子的b站的演示视频 Air001的LittleClock例子的b站演示视频: https://www.bilibili.com/video/BV1J6421g7H1/ Stm32的TestUI例子的b站演示视频: https://www.bilibili.com/video/BV1mS421P7CZ/ 所有演示的工程文…

黑马程序员微信小程序学习总结9.插槽(slot)、父子组件中的通信的3种方式和自定义组件behaviors

目录 自定义组件中&#xff1a;插槽&#xff08;slot&#xff09;自定义组件中&#xff1a;父子组件中的通信的3种方式属性绑定&#xff08;总结7讲过&#xff09;事件绑定&#xff08;子向父传参&#xff09;获取组件实例 自定义组件behaviors同名字段的覆盖和组合规则&#x…

Kotlin基础——泛型

泛型类型参数 编译器一般可以推导出类型实参 若创建空的list&#xff0c;则需要显示指定类型实参&#xff0c;可以用如下两种方式 val name: MutableList<String> mutableListOf()val name2 mutableListOf<String>()泛型函数 public fun <T> List<T&…

宝塔安装MySQL、设置MySQL密码、设置navicat连接

1、登录宝塔面板进行安装 2、设置MySQL连接密码 3、安装好了设置navicat连接 登录MySQL [roothecs-394544 ~]# mysql -uroot -p Enter password: 切换到MySQL数据 mysql> use mysql Database changed mysql> 查询用户信息 mysql> select host,user from user; ---…

生信学院|02月23日《ECAD数据到MCAD模型》

课程主题&#xff1a;ECAD数据到MCAD模型 课程时间&#xff1a;2024年02月23日 14:00-14:30 主讲人&#xff1a;陈冬冬 生信科技 售后服务工程师 CircuitWorks概述CircuitWorks工具栏&#xff1b;零部件库和属性信息&#xff1b;对ECAD数据的基本操作&#xff1b;将装配体输…

绝地求生:pubg全年活动整理

2023年整理&#xff0c;2024展望。2023年1月是4神兽&#xff0c;24年2月是西游&#xff0c;25年1月呢&#xff1f; 2023新3月4神兽结束后是AUG黑箱和6周年。 2024年3月也会出成长型武器黑箱和7周年。 4月&#xff1a;新通行证、战队联名、服装套装。 5月&#xff1a;是一些套装…

学习Android的第十六天

目录 Android 自定义 Adapter Adapter 接口 SpinnerAdapter ListAdapter BaseAdapter 自定义 BaseAdapter 参考文档 Android ListView 列表控件 ListView 的属性和方法 表头表尾分割线的设置 列表从底部开始显示 android:stackFromBottom 设置点击颜色 cacheColorH…

基于Java SSM框架实现精准扶贫管理系统项目【项目源码】计算机毕业设计

基于java的SSM框架实现精准扶贫管理系统演示 JSP技术介绍 JSP技术本身是一种脚本语言&#xff0c;但它的功能是十分强大的&#xff0c;因为它可以使用所有的JAVA类。当它与JavaBeans 类进行结合时&#xff0c;它可以使显示逻辑和内容分开&#xff0c;这就极大的方便了用户的需…

【HarmonyOS】鸿蒙开发之Slider组件——第3.5章

组件应用场景: 设备音量大小&#xff0c;调节屏幕亮度等需求 slider组件内options属性简介 value&#xff1a;滑动条当前进度值。 min&#xff1a;设置滑动条设置最小值。 max&#xff1a;设置滑动条设置最大值&#xff0c;默认为 100 。 step&#xff1a;设置滑动条滑动跳动…
最新文章