技术经验解读:【雕爷学编程】Arduino动手做(83)

简介: 技术经验解读:【雕爷学编程】Arduino动手做(83)

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.0//代码效果参考:http://www.jhylw.com.cn/153525593.html

ms———–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):


?1234567891011121314151//代码效果参考:http://www.jhylw.com.cn/370324505.html

6171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091/ 【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程) 程序六:使用旋转编码器模块控制伺服电机SG-90 / //使用舵机库 #include //定义引脚连接 #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、实验串口返回情况


实验场景图


实验视频


使用三轴ADXL345模块控制9G舵机


(1)实验开源仿真编程(Linkboy V4.63)


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


实验串口绘图器返回情况


(3)实验场景图


(4)实验的视频记录


附录:模型舵机故障的判断与修理


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

相关文章
|
存储 网络协议 Linux
嵌入式技术知识体系问答(找工作笔试面试可能有用)
嵌入式技术知识体系问答(找工作笔试面试可能有用)
166 0
|
3月前
|
前端开发 搜索推荐 程序员
发现一个程序员最强外设,助你高效开发早日摸鱼!
【8月更文挑战第24天】日常写bug中,副屏是我们每个程序员必备的一个工具,我们都希望拥有一个强大好用的显示器。这篇文章我将介绍:如何将一块优秀的副屏与实际工作结合,发挥其最大价值,实现高效开发、快速摸鱼!
62 2
发现一个程序员最强外设,助你高效开发早日摸鱼!
|
Oracle Java 关系型数据库
神级程序员都在用什么工具?
神级程序员都在用什么工具?
108 0
|
6月前
|
存储 缓存 IDE
嵌入式开发中的几个有用的经验!
嵌入式开发中的几个有用的经验!
49 0
|
6月前
|
算法 机器人 程序员
嵌入式软件开发有没有捷径
嵌入式软件开发有没有捷径
42 0
|
6月前
|
算法 Linux C语言
嵌入式软件开发学习路线精心总结
嵌入式软件开发学习路线精心总结
133 0
|
11月前
|
Java Linux C语言
小白对嵌入式系统的认知
小白对嵌入式系统的认知
35 0
|
11月前
|
编译器 程序员 Linux
嵌入式软件开发第一讲笔记
嵌入式软件开发第一讲笔记
54 0
|
机器学习/深度学习 人工智能 算法
【如何入门编程】编程升级通关绝招
【如何入门编程】编程升级通关绝招
54 0