舵机详解

原文地址:http://www.geek-workshop.com/thread-70-1-1.html

舵机(英文叫Servo):它由直流电机减速齿轮组传感器控制电路组成的一套自动控制系统。通过发送信号,指定输出轴旋转角度。舵机一般而言都有最大旋转角度(比如180度。)与普通直流电机的区别主要在,直流电机是一圈圈转动的,舵机只能在一定角度内转动,不能一圈圈转(数字舵机可以在舵机模式和电机模式中切换,没有这个问题)。普通直流电机无法反馈转动的角度信息,而舵机可以。用途也不同,普通直流电机一般是整圈转动做动力用,舵机是控制某物体转动一定角度用(比如机器人的关节)。

舵机的形状和大小多的让人眼花缭乱,大致可以分为下面这几种(如图所示)


sgxl5e.jpg 

最右边的是常见的标准舵机,中间两个小的是微型舵机,左边魁梧的那个是大扭力舵机。图上这几种舵机都是三线控制。

制作机器人常用的舵机有下面几种,而且每种的固定方式也不同,如果从一个型号换成一个型号,整个机械结构都需要重新设计。

第一种是MG995,优点是价格便宜,金属齿轮,耐用度也不错。缺点是扭力比较小,所以负载不能太大,如果做双足机器人之类的这款舵机不是很合适,因为腿部受力太大。做做普通的六足,或者机械手还是不错的。


MG995.jpg 

第二种是SR 403,这款舵机是网友xqi2因MG995做双足机器人抖动太厉害,摸索找到的,经过测试。制作双足机器人不错~~~至少不抖了。优点是扭力大,全金属齿轮,价格也还算便宜。缺点嘛。。。做工很山寨。。。其他缺点等待反馈

SR 403P.jpg 

第三种就是传说中的数字舵机AX12+,这个是久经考验的机器人专用舵机。除了价格高,使用RS485串口通信(控制板就得换数字舵机专用控制板),其他都是优点。

AX12 .JPG 

下图是一个普通模拟舵机的分解图,其组成部分主要有齿轮组、电机、电位器、电机控制板、壳体这几大部分。

IMGP9616_调整大小.JPG 

电机控制板主要是用来驱动电机接受电位器反馈回来的信息。电机嘛,动力的来源了,这个不用太多解释。电位器这里的作用主要是通过其旋转后产生的电阻的变化,把信号发送回电机控制板,使其判断输出轴角度是否输出正确。齿轮组的作用主要是力量的放大,使小功率电机产生大扭矩。

66ljqs.jpg 


舵机底壳拆开后就可以看到,主要是电机与控制板

IMGP9470_调整大小.JPG 

控制板拿起来后下方是与控制板连接的电位器

IMGP9559_调整大小.JPG 

从顶部来看电机与电位器,与电机齿轮直接相连的为第一级放大齿轮。

IMGP9593_调整大小.JPG 

经过一级齿轮放大后,再经过二、三、四级放大齿轮,最后再通过输出轴输出。

IMGP9568_调整大小.JPG 

通过上面两图可以很清晰的看到,本舵机是4级齿轮放大机构,就是通过这么一层层的把小的力量放大,使得这么一个小小的电机能有15KG的扭力。

看完了舵机的构造后咱么对舵机的控制系统进行详解。

舵机的伺服系统由可变宽度的脉冲来进行控制
,控制线是用来传送脉冲的。脉冲的参数有最小值,最大值,和频率。一般而言,舵机的基准信号都是周期为20ms,宽度为1.5ms。这个基准信号定义的位置为中间位置。舵机有最大转动角度,中间位置的定义就是从这个位置到最大角度与最小角度的量完全一样。最重要的一点是,不同舵机的最大转动角度可能不相同,但是其中间位置的脉冲宽度是一定的,那就是1.5ms。如下图:

Snap2.jpg 

角度是由来自控制线的持续的脉冲所产生。这种控制方法叫做脉冲调制。脉冲的长短决定舵机转动多大角度。例如:1.5毫秒脉冲会到转动到中间位置(对于180°舵机来说,就是90°位置)。当控制系统发出指令,让舵机移动到某一位置,并让他保持这个角度,这时外力的影响不会让他角度产生变化,但是这个是由上限的,上限就是他的最大扭力。除非控制系统不停的发出脉冲稳定舵机的角度,舵机的角度不会一直不变。

当舵机接收到一个小于1.5ms的脉冲,输出轴会以中间位置为标准,逆时针旋转一定角度。接收到的脉冲大于1.5ms情况相反。不同品牌,甚至同一品牌的不同舵机,都会有不同的最大值和最小值。一般而言,最小脉冲为1ms,最大脉冲为2ms。如下图:


Snap3.jpg 

360度舵机也是通过占空比控制,只不过大于1.5ms和小于1.5ms是调节的顺时针旋转还是逆时针宣传,不同的占空比,转速不同。



  • 21
    点赞
  • 130
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Arduino可以通过产生不同占空比的方波信号,来模拟产生PWM信号进行舵机控制。为了方便控制舵机,可以使用Arduino自带的Servo库。Servo库提供了一些常用的函数来控制舵机。例如,可以使用`attach()`函数将控制线连接到Arduino的数字引脚,使用`write()`函数来设置舵机的角度,使用`delay()`函数来等待舵机转动到指定角度。以下是一个舵机控制的示例代码: ```cpp #include <Servo.h> Servo myservo; // 定义Servo对象来控制舵机 int pos = 0; // 角度存储变量 void setup() { myservo.attach(9); // 控制线连接到数字9引脚 } void loop() { for (pos = 0; pos <= 180; pos += 1) { // 从0°到180°,每次增加1度 myservo.write(pos); // 设置舵机角度 delay(5); // 等待舵机转动到指定角度 } for (pos = 180; pos >= 0; pos -= 1) { // 从180°到0°,每次减少1度 myservo.write(pos); // 设置舵机角度 delay(5); // 等待舵机转动到指定角度 } } ``` 通过这段代码,舵机会来回转动,从0°到180°再从180°到0°,每次转动1度,每次转动之间延迟5毫秒。你可以根据需要修改角度和延迟时间来控制舵机的运动。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [舵机控制3.17](https://blog.csdn.net/m0_51503599/article/details/114951329)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [Arduino控制舵机详解(含代码)-项目申报.docx](https://download.csdn.net/download/Stephen___Qin/87709012)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值