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

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、不能长时间快速正反转,这样会造成电流过大,发热量大,烧毁舵机。

猜你喜欢

转载自blog.csdn.net/weixin_41659040/article/details/131758166