【雕爷学编程】Arduino动手做(83)---模拟SG90舵机模块2

news2024/12/23 5:33:05

37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手尝试系列实验,不管成功(程序走通)与否,都会记录下来—小小的进步或是搞不掂的问题,希望能够抛砖引玉。

【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验八十三:180度SG90舵机模块(模拟9G)

在这里插入图片描述
尝试拆解一个9g的舵机,四个螺丝挺长的,拆开是这样的

在这里插入图片描述
一部分是齿轮组
在这里插入图片描述

还有就是一只小电动机和一小片电路板

在这里插入图片描述
在这里插入图片描述
看到电路板背面有个芯片,型号是KC5188

在这里插入图片描述
芯片介绍——
KC5188与外围PNP晶体管可组成一个直流脉宽调制电路。当控制输入端PIN2(IN)输入一个周期为20ms,脉宽为1.0-2.0ms的可变脉冲时,对应的桥式PWM电路可输出一个正向-负向可逆的驱动电压。当输入脉宽为1.5ms时为零点,此时桥式电路的晶体管输出一个2.5V左右的对称电压,从而使负载上的平均电压为零。当输入脉冲宽度增大(减小)时,桥式电路的一侧(或另一侧)开始导通。导通时间与输入脉宽与零点(1.5ms)之差成正比。当脉宽为2.0ms时负载上的电压接近为+Vcc。而脉宽为1.0ms时,负载上电压接近-Vcc。当输入脉宽为零点值(1.5ms)时,如输出不为零点,可调整PIN11脚的电位,使其恢复零点。利用这一特性,可用桥式电路驱动一个机械位置传感器(电位器),形成位置闭环,从而组成一个位置控制器。

在这里插入图片描述

功能特性——
(1)死区设置简单
(2)优越的电源与温度特性
(3)容易与CMOS电路接口
(4)内置持续高电平保护电路
(5)电源电压范围:3.4~7.0V,典型工作电压4.8V
(6)静态电流较小,典型值为4.3mA(当输出开路时)
功能框图——

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

应用电路

在这里插入图片描述

舵机的工作原理
舵机内部的控制电路,电位计(可变电阻器)和电机均被连接到电路板上,如内部结构图的右边部分。控制电路通过电位计可监控舵机的当前角度。
如果轴的位置与控制信号相符,那么电机就会关闭。如果控制电路发现这个角度不正确,它就会控制马达转动,直到它达到指定的角度。舵机角度根据制造商的不同而有所不同。比如,一个180度的舵机,它可以在0度至180度之间运动。由于限位装置被安装在主输出装置上,超出这个范围机械结构就不能再转动了。
舵机的输出功率与它所需要转动的距离成正比。如果输出轴需要转动很长的距离,马达就会全速运转,如果它只需要短距离转动,马达就会以较慢的速度运行,这叫做速度比例控制。

在这里插入图片描述

如何让舵机转到指定角度?
控制线用于传输角度控制信号。这个角度是由控制信号脉冲的持续时间决定的,这叫做脉冲编码调制(PCM)。舵机的控制一般需要一个20ms左右的时基脉冲,该脉冲的高电平部分一般为0.5ms-2.5ms范围,总间隔为2ms。脉冲的宽度将决定马达转动的距离。例如:1.5毫秒的脉冲,电机将转向90度的位置(通常称为中立位置,对于180°舵机来说,就是90°位置)。如果脉冲宽度小于1.5毫秒,那么电机轴向朝向0度方向。如果脉冲宽度大于1.5毫秒,轴向就朝向180度方向。

以180度舵机为例,对应的控制关系是这样的:
0.5ms————-0度;
1.0ms————45度;
1.5ms————90度;
2.0ms———–135度;
2.5ms———–180度;

伺服电机时序图

在这里插入图片描述

舵机的简易测试(推荐方式)
1、简易舵机测试仪的主要参数——
(1)输出:≤15mA (5.0)
(2)输入:DC 4.2-6.0v
(3)输出信号:1.5ms±0.5ms
(4)尺寸:463217MM
(5)重量:8g
(6)调节方式:手动,自动,中位。

在这里插入图片描述

2、简易舵机测试仪的功能特点——
(1)可连接两组舵机或电调;
(2)能够很方便的检测和设定伺服器的虚位,抖动和中位;
(3)单片机控制,稳定性好、精度高。旋转旋钮,即可检测舵机;
(4)它相当于一个“手动接收机”的功能,通过旋钮模拟发射机打舵;
(6)如果连接电子调速器(有刷或无刷均可),即可摆脱遥控设备进行手动调速,用于测试调速器或马达性能非常实用,不用再繁琐地连接遥控器和接收机了。
3、简易舵机测试仪的使用说明——
参照下面图片,左边接舵机,分上中下3组,可接3个舵机;右边单排插针接电源,靠近边上为负极(可看标识符号),接电池负极,千万注意不可接反,若电源接反将烧掉IC;S标识符对应的针脚,不用理会。接通电源,蓝色灯会同时亮,然后只亮左边第一个,为手动调节电位器测试,按按键,中间灯亮,为归中测试;第三个灯亮,自动测试。测试电调的接法和接舵机一样,但是就输入端就不要再接电源了,测试马达需先接电调,跟测电调一样!

在这里插入图片描述
在这里插入图片描述

程序六:使用旋转编码器模块控制伺服电机SG-90
1、SG-90 伺服电机是一款低成本、高输出功率的伺服电机。它最多可旋转 180 度,每步最大可旋转 90 度。此外,它足够小,可以轻松融入您的机器人 ARM 或避障机器人项目。最重要的是,它只需要一个输出脉冲信号来控制它的运动。SG90伺服电机的引脚图,它仅由三个引脚组成,例如 PWM、接地和 Vcc 引脚。棕色、橙色和红色线分别是 GND、Vcc 和 PWM 引脚。

在这里插入图片描述

2、实验接线示意图

在这里插入图片描述

3、参考开源代码(Arduino):

/*

 【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)

 程序六:使用旋转编码器模块控制伺服电机SG-90

*/

//使用舵机库

#include <Servo.h>

//定义引脚连接

#define CLK 2

#define DT 3

Servo servo; // 创建一个伺服对象

int count = 0;

int current_stateCLK;

int last_stateCLK;

void setup() {

 pinMode(CLK, INPUT);  // 将编码器引脚设置为输入

 pinMode(DT, INPUT);   // 将编码器引脚设置为输入

 Serial.begin(115200);// 初始化串行通信在115200bps

 //将引脚7上的伺服附加到伺服对象

 servo.attach(7);

 servo.write(count);

 // 读取inputCLK的初始状态

 // 赋值给 previousStateCLK 变量

 last_stateCLK = digitalRead(CLK);

}

void loop() {

 current_stateCLK = digitalRead(CLK); //读取CLK的当前状态

 // 如果CLK 的先前状态和当前状态不同,则发生脉冲

 if (current_stateCLK != last_stateCLK && current_stateCLK == 1) {

  // 如果 inputDT 状态与 inputCLK 状态不同,则

  // 编码器逆时针旋转

  if (digitalRead(DT) != current_stateCLK) {

   count --;

   if (count < 0)

    count = 0;

  } else {

   // 编码器顺时针旋转

   count ++;

   if (count > 179)

    count = 179;

  }

  servo.write(count);  // 移动舵机

  Serial.print("角度位置: ");

  Serial.println(count);

 }

 last_stateCLK = current_stateCLK; // 用当前状态更新 last_stateCLK

}

4、实验串口返回情况

在这里插入图片描述

实验场景图

在这里插入图片描述

实验视频

https://v.youku.com/v_show/id_XNTg0NjU0MDE0OA==

使用三轴ADXL345模块控制9G舵机
(1)实验开源仿真编程(Linkboy V4.63)

在这里插入图片描述

(2)打开Linkboy——各种常用小工具——串口绘图器,查看实验波形
实验串口绘图器返回情况

在这里插入图片描述

(3)实验场景图

在这里插入图片描述

(4)实验的视频记录
https://v.youku.com/v_show/id_XNTg2ODk1ODk0MA==.html

附录:模型舵机故障的判断与修理
1、模型炸机后舵机电机狂转、舵盘摇臂不受控制、摇臂打滑,可以断定:齿轮扫齿了,换齿轮。
2、模型炸机后舵机一致性锐减,现象是炸坏的舵机反应迟钝,发热严重,但是可以随着控的指令运行,但是舵量很小很慢,基本断定:舵机电机过流了,拆下电机后发现电机空载电流很大(>150MA),失去完好的性能(完好电机空载电流≤60-90MA),换舵机电机。
3、模型炸机后舵机打舵后无任何反应,基本确定舵机电子回路断路、接触不良或舵机的电机、电路板的驱动部分烧毁导致的,先检查线路,包括插头,电机引线和舵机引线是否有断路现象,如果没有的话,就进行逐一排除,先将电机卸下测试空载电流,如果空载电流小于90MA,则说明电机是好的,那问题绝对是舵机驱动烧坏了,9-13克微型舵机电路板上面就有2个或四个小贴片三极管,换掉就可以了,有2个三极管的那肯定是用Y2或IY直接代换,也就是SS8550,如果是有四个三极管的H桥电路,则直接用2个Y1(SS8050)和2个(SS8550)直接代换,65MG的UYR 用Y 1(SS8050 IC=1.5A); UXR------用Y2(SS8550,IC=1.5A)直接代换。
4、舵机故障是摇臂只能一边转动,另外一边不动的话,判断:舵机电机是好的,主要检查驱动部分,有可能烧了一边的驱动三极管,按照(3)维修即可。
5、维修好舵机后通电,发现舵机向一个方向转动后就卡住不动了,舵机吱吱地响,说明舵机电机的正负极或电位器的端线接错了,电机的两个接线倒个方向就可以了。
6、崭新的舵机买回来后,通电发现舵机狂抖,但用一下控的摇臂后,舵机一切正常,说明舵机在出厂的时候装配不当或齿轮精度不够,这个故障一般发生在金属舵机上面,如果不想退货或者更换的话,自行解决的方法:卸下舵机后盖,将舵机电机与舵机减速齿轮分离后,在齿轮之间挤点牙膏,上好舵机齿轮顶盖,上好减速箱螺丝后,安上舵机摇臂,用手反复旋转摇臂碾磨金属舵机齿轮,直至齿轮运转顺滑、齿轮摩擦噪音减小后,将舵机齿轮卸下汽油清洗后,装齿轮上硅油组装好舵机,即可解决舵机故障。
7、有一种故障舵机表现很古怪:摇动控的遥感,舵机有正常的反应,但是固定控的遥感某一位置后,故障舵机摇臂还在慢慢的运行,或者摇臂动作拖泥带水,并来回动作,经过多次维修后发现问题所在:应该紧密卡在舵机末级齿轮中电位器的金属转柄,与舵机摇臂大齿轮(末级)结合不紧,甚至发生打滑现象,导致舵机无法正确寻找控发出的位置指令,反馈不准,不停寻找导致的,解决了电位器与摇臂齿轮的紧密结合后,故障可以排除。按照改方法检修后故障仍旧存在的话,也有可能是舵机电机的问题或电位器的问题,需要综合分析逐一排查!
8、故障舵机不停的抖舵,排除无线电干扰,动控摇臂仍旧抖动的话,电位器老化,换之,或直接报废掉,当配件!

舵机使用注意事项
1、舵机在工作时的电流一般都比较大,给舵机供电的电源一定要保证电流足够,否则舵机可能工作不正常或者不工作(本例实验使用单只SG90 9g小型舵机,不用另接电源)。
2、电源正负极不能接错,舵机的供电电压有高有低,需要询问舵机的卖家得到具体的供电电压。如果电压不在正确范围内,舵机会烧坏或者无法正常工作。
3、一定记得开发板的GND要和舵机的负极连接在一起,称之为共地。因为PWM信号本质上说是一个电压信号,这个电压信号是相对开发板的GND给出的电压信号,舵机输入的也是一个电压信号,这个电压信号是相对舵机的负极电压来说的信号,因此要保证开发板GND的电压和舵机负极电压一致。
4、舵机舵盘安装一定要注意,在一些机器人套件中使用,往往有角度要求,需要电路板烧写初始化固件后,上电后,等待舵机轴转动到某一个位置后,再以舵盘与舵机成90°来安装。(具体根据套件)
5、舵机使用注意避免0或者180度这些极限位置,一般设置小一点的角度,因为这种9g舵机便宜,但是质量只能说一般,角度一致性不会太好,角度比较极限时,舵机会有抖动的现象。
6、舵机使用时,不应该超出舵机的最大扭矩,这个很好判断,如果给舵机的摇臂施加力后,舵机一直处于吱吱的抖动,说明已经超出舵机的最大极限力度了。这时候你应该减小负载。或者更换扭矩更大的舵机。
7、设置舵机转动角度时,需要注意保证舵机的角度是以转的,防止舵机堵转后烧坏舵机,一般都是这个问题导致舵机损坏。
8、不能长时间堵转,这样会造成电流过大,发热量大,烧毁舵机。
9、不能长时间快速正反转,这样会造成电流过大,发热量大,烧毁舵机。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

一个Spring Session JDBC例子

Spring Session JDBC是Spring Session项目的一部分&#xff0c;它提供了一种将会话数据存储在关系型数据库中的方法。Spring Session是一个用于在分布式环境中管理和共享会话的解决方案&#xff0c;它允许您通过不同的会话存储后端&#xff08;如内存、关系型数据库、NoSQL数据…

使用torch.nn包来构建神经网络

神经网络 可以使用torch.nn包来构建神经网络. 我们已经介绍了autograd包&#xff0c;nn包则依赖于autograd包来定义模型并对它们求导。一个nn.Module包含各个层和一个forward(input)方法&#xff0c;该方法返回output。 例如&#xff0c;下面这个神经网络可以对数字进行分类…

xss跨站脚本攻击总结

XSS(跨站脚本攻击) 跨站脚本攻击&#xff08;Cross Site Scripting&#xff09;&#xff0c;为了不和层叠样式表&#xff08;Cascading Style Sheets &#xff09;CSS的缩写混淆&#xff0c;故将跨站脚本攻击缩写为XSS。恶意攻击者往Web页面里插入恶意Script代码&#xff0c;当…

047、TiDB特性_TopSQL

TopSQL 之前 之前没有办法找单个TiKV Server的语句。只能查找整个集群的慢语句。 TopSQL之后 指定TiDB及TiKV实例正在执行的SQL语句CPU开销最多的Top 5 SQL每秒请求数、平均延迟等信息 TopSQL 使用 选择需要观察负载的具体TiDB Server或TiKV实例 观察Top 5 类SQL 查看某…

Linux 自动化构建工具(make/Makefile)

绪论 拼着一切代价&#xff0c;奔你的前程。——巴尔扎克. 本章继续学习Linux常用的工具&#xff0c;make是可以帮我们解决一些重复使用相同指令的冗杂的自动化构建工具。 话不多说安全带系好&#xff0c;发车啦&#xff08;建议电脑观看&#xff09;。 附&#xff1a;红色&…

TortoiseGit 入门指南08:浏览引用以及在引用间切换

在上一节 创建分支 中&#xff0c;我们学会了在分支上开发新功能&#xff0c;那么随之而来的问题是&#xff1a;如何查看项目又多少分支&#xff1f;如何再切换到主分支&#xff1f;这节来解决这些问题。 在回答之前&#xff0c;需要先了解一个 Git 术语&#xff1a;引用&…

学无止境·MySQL⑨(MongoDB)

MongoDB的安装及使用 MongoDB1、MongoDB的安装与启动2、创建一个数据库 名字grade3、数据库中创建一个集合名字 class4、集合中插入若干数据文档格式如下5、查找查看班级所有人信息查看班级中年龄为8岁的学生信息查看年龄大于10岁的学生信息查看年龄在 4---8岁之间的学生信息找…

接口测试之基于SaaS平台的iHRM项目的前端部署配置(踩坑版)

基于SaaS平台的iHRM项目的前端部署配置 下载安装node.js3.从Git上下载项目安装依赖包的改进方法 关于的部署可以参考基于SaaS平台的iHRM项目的前端部署教程博客 但本人在参考配置的过程中遇到了很多问题…于是写下这篇博客 下载安装node.js 可以访问https://nodejs.org/en下载…

利用Python绘制直方图和散点图

1 问题 利用python如何绘制直方图和散点图。 2 方法 # ------ 直方图import matplotlib.pyplot as pltimport numpy as npimport matplotlib# 设置matplotlib正常显示中文和负号matplotlib.rcParams[font.sans-serif] [SimHei] # 用黑体显示中文matplotlib.rcParams[axes.unic…

前端学习记录~2023.7.3~CSS杂记 Day4

前言一、溢出1. 默认情况2. overflow属性3. BFC 二、CSS 的值与单位1. 长度&#xff08;1&#xff09;绝对长度单位&#xff08;2&#xff09;相对长度单位 2、百分比3、数字4、颜色&#xff08;1&#xff09;颜色关键字&#xff08;2&#xff09;十六进制 RGB 值&#xff08;3…

单片机第一季:零基础7——定时器和计时器

目录 1&#xff0c;单片机定时器原理 2&#xff0c;51单片机定时器/计数器结构 3&#xff0c;定时器配置 4&#xff0c;示例代码-通过定时器控制LED灯间隔1s闪烁 51 单片机有两组定时器/计数器&#xff0c;因为既可以定时&#xff0c;又可以计数&#xff0c;故称之为定时…

JPA实现多对多关系

本文已收录于专栏 《Java》 目录 概念说明优势利弊实现方式通过两个ManyToMany注解实现类图代码 通过OneToMany和ManyToOne注解实现类图代码 总结提升 概念说明 多对多关系是指两个实体之间存在多对多的关联关系。在数据库中&#xff0c;多对多关系无法直接表示&#xff0c;需要…

javascript截取两个符号之间的字符串(2):lastIndexOf匹配和正则表达式匹配

lastIndexOf匹配和正则表达式匹配 项目需求1.规范的字符串2.不规范的字符串3-1.万能封装3-2.ChatGPT的优化写法4.正则表达式的用法5.补充知识&#xff1a;lastIndexOf的用法 项目需求 javascript中截取字符串中最后一个“/”和“?”之间的内容。 1.规范的字符串 https://tes…

100天精通Python(可视化篇)——第96天:Pyecharts绘制多种炫酷箱形图参数说明+代码实战

文章目录 专栏导读1. 箱形图介绍1&#xff09;箱形图介绍2&#xff09;怎么看箱型图&#xff1f;3&#xff09;解释说明 2. 普通箱型图3. 水平箱型图4. 群组箱型图5. 带异常点的箱型图 专栏导读 &#x1f525;&#x1f525;本文已收录于《100天精通Python从入门到就业》&#…

Docker实战总结

Docker 官方文档地址:https://www.docker.com/get-started 中文参考手册:https://docker_practice.gitee.io/zh-cn/ 1.什么是 Docker 1.1 官方定义 最新官网首页 # 1.官方介绍 - We have a complete container solution for you - no matter who you are and where you are…

线性回归--波士顿房屋价格预测

一、波士顿房屋价格预测代码 import sysimport pandas as pd import numpy as np from sklearn.linear_model import LinearRegression import matplotlib.pyplot as plt import matplotlib as mpt from sklearn.model_selection import train_test_split##加载数据 datapd.re…

Druid工作原理

Druid工作原理-连接池初始化流程 标题 Druid工作原理-获取连接流程&#xff1a; 连接回收:

类定义练习

运行代码&#xff1a; //类定义练习 #include"std_lib_facilities.h" #include"GUI/Simple_window.h" #include"GUI/GUI.h" #include"GUI/Graph.h" #include"GUI/Point.h" //定义类 class Person { private:string first_n…

直流有刷驱动板电流电压采集

直流有刷驱动板电流电压采集 电流采集会涉及到电流环的使用。 #include "./adc/bsp_adc.h" #include ".\motor_control\bsp_motor_control.h" #include "./led/bsp_led.h" #include "./usart/bsp_debug_usart.h"__IO uint16_t…

vue-element-admin深入系列-数据Mock

本文介绍 vue-element-admin 如何使用 MockJS 实现数据Mock,毕竟对于一个合格的前端来讲,自己能Mock数据是必须的: 自给自足,不用依赖服务端接口。毕竟环境问题是个大问题,更何况环境不稳定是常态,再加上偶尔服务端的数据格式变化,问题就更复杂。 数据复杂,页面复杂时。…