当前位置:文档之家› 基于Arduino的舵机控制系统设计_蔡睿妍

基于Arduino的舵机控制系统设计_蔡睿妍

基于Arduino的舵机控制系统设计_蔡睿妍
基于Arduino的舵机控制系统设计_蔡睿妍

Computer Knowledge and Technology 电脑知识与技术计算机工程应用技术本栏目责任编辑:梁书第8卷第15期(2012年5月)基于Arduino 的舵机控制系统设计

蔡睿妍

(大连大学信息工程学院,辽宁大连116622)

摘要:舵机是传统的角度控制驱动器,在机器人等领域得到了广泛应用。传统的舵机主要采用单片机系统驱动控制,但单片机系统对多个舵机同时进行驱动效果并不理想,因此,采用了流行的开源Arduino 控制板,通过输出不同脉宽的信号进行舵机转动角度控制,实验证明,该系统实现了舵机角度控制,满足舵机角度控制精度要求,为舵机的驱动提供了新方式。

关键词:Arduino ;舵机;脉宽信号;角度控制

中图分类号:TM383.4

文献标识码:A 文章编号:1009-3044(2012)15-3719-03Design of Servo Control System Based on Arduino CAI Rui-yan

(Information and Engineering College of Dalian University,Dalian 116622,China)

Abstract:The servo is the traditional angle control driver and has been widely used in robot and other fields.In general,servo is driven by microcontroller system,but the driving effect of microcontroller system is not satisfactory for multiple servos.So,the Arduino,an open source control board,is used to output different pulse width signal to control the servo rotation angle,experiment showed that,this system realizes the angle control of servo,meets the requirement of angle control precision and provides a new way to drive servo.

Key words:Arduino;servo;pulse width signal;angle control

舵机是一种位置(角度)伺服的驱动器,适用于那些需要角度不断变化并可以保持的控制系统。目前,在高档遥控玩具,如飞机、潜艇模型,遥控机器人中已经得到了普遍应用。传统对舵机的控制主要采用单片机,利用定时器和中断的方式来完成控制,这样的方式控制一个舵机还是相当有效的,但是随着舵机数量的增加,控制起来就没有那么方便了,尤其对机器人等需要多个舵机同时工作的系统中,单片机驱动复杂且精度难以保证。因此,本文采用目前较为流行的开源Arduino 来实现舵机的精确控制。1Arduino 简介

Arduino 是源自意大利的一个教学用开源硬件项目,主要是为希望尝试创建交互式物理对象的实践者、喜欢创造发明的人及艺术家所构建的,它秉承开源硬件思想,程序开发接口免费下载,也可依需求自己修改。Arduino 引脚如图1所示:

图1Arduino 控制板

其硬件系统是高度模块化的,通过USB 接口与计算机连接,包括14通道数字输入/输出,其中包括6通道PWM 输出、6通道10位

ADC 模拟输入/输出通道,电源电压主要有5V 和3.3V [1]。在核心控制板的外围,有开关量输入输出模块、各种模拟量传感器输入模

块、总线类传感器的输入模块,还有网络通信模块,只要在核心控制板上增加网络控制模块,就可以容易地与互联网连接。Arduino 还提供了自己的开发语言[2,3],支持Windows 、Linux 、MacOS 等主流的操作系统。Arduino 系统是基于单片机开发的,并且大量应用通用和标准的电子元器件,包括硬件和软件在内的整个设计,代码均采用开源方式发布,因此采购的成本较低,在各种电子制作竞赛、收稿日期:2012-04-23

作者简介:蔡睿妍(1979-),黑龙江林甸县人,讲师,硕士,主要从事电子技术、通信与网络方向的研究。

E-mail:kfyj@https://www.doczj.com/doc/1e14234266.html,

https://www.doczj.com/doc/1e14234266.html, Tel:+86-551-56909635690964

ISSN 1009-3044Computer Knowledge and Technology 电脑知识与技术Vol.8,No.15,May 2012.3719

Computer Knowledge and Technology 电脑知识与技术计算机工程应用技术本栏目责任编辑:梁书

第8卷第15期(2012年5月)电子艺术品创意设计等越来越多地使用Arduino 作为开发平台。甚至可以接受Macromedia Flash 软件制作的动画发送的信号,并由此来控制一些动作器件(如舵机等)。

2舵机的工作原理

舵机是一种位置伺服的驱动器,具有闭环控制系统的机电结构,由小型直流电机、变速齿轮组、可调电位器、控制板等部件组成[4]

,如图2所示。由于可以方便地控制舵机旋转的角度(舵角,但是舵角一般不超过180°),因此,舵机在要求角度不断变化的控制系

统中得到了广泛应用。图2舵机组成结构

舵机在工作中,控制器发出脉冲宽度调制(PWM )信号给舵机,获得直流偏置电压。舵机内部有一个基准电路,产生周期为20ms ,宽度为1.5ms 的基准信号,将获得的直流偏置电压与电位器的电压比较,获得电压差输出到电机驱动芯片,驱动芯片根据电压差的正负控制电机的正反转。舵机转动的角度是通过调节PWM 信号的占空比来实现的,标准PWM 信号的周期固定为20ms ,理论上脉宽(脉冲的高电平部分)范围在1ms~2ms 之间,但实际上脉宽可以在0.5ms~2.5ms 之间,脉宽和舵机的转角0°~180°相对应。如以脉宽为0.5ms~2.5ms 范围控制舵机的角度转动,转动范围为0°~180°,对应的控制关系如图3

所示。

脉宽

0.5ms 脉宽

1.5ms

脉宽2.5ms

图3脉宽与舵角关系

图3给出了转动角度为0°、90°和180°时对应的脉宽,当转动角度处于0°~180°之间的其它角度时,脉宽在0.5ms~2.5ms 之间线性变化。

舵机收到控制信号后,首先判断转动方向,然后计算转动角度,接着驱动无核心马达开始转动,并通过减速齿轮将动力传输至摆臂,最后由位置检测器返回转动后的位置信号,以此判断舵机是否已经到达设定的位置。

小型舵机的工作电压一般为4.8V 或6V ,转速也不是很快,所以假如更改角度控制脉宽太快时,舵机可能反应不过来。如果需要更快速的反应,就需要更高的转速了。要精确的控制舵机,其实没有那么容易,很多舵机的位置等级有1024个,那么,如果舵机的有效角度范围为180°的话,其控制的角度精度是可以达到180°1024≈0.18°,如果假定脉宽为0.5ms~2.5ms 范围,则要求的脉宽控制精度为(2.5-0.5)ms 1024

≈2μs 。3Arduino 控制舵机转角实验

舵机转动时电流较大,Arduino 上的芯片可能会因为过流保护发热而损坏,因此不能采用Arduino 板上的电源给舵机供电,需要采用外部电源。舵机有三根引线,棕色(或黑色)为地线,红色线为电源线(4.8-6V ),黄色是数据线。选择Arduino 的9号数字口作为舵机的脉冲控制信号输出接口。采用Arduino 控制舵机角度转动的实验中,通过计算机的USB 口输出电压为Arduino 控制板供电,然后外接电源插到舵机的电源引脚,舵机的地线与Arduino 控制板GND 接口相连,信号口接数字9号口。连接原理图如图4所示。

具体的线路连接如图5所示。

连接好舵机和Arduino 主控板之后,开始编写控制程序。首先,需要将Arduino 的9号数字口定义为输出接口,代码如下:pinMode(9,OUTPUT)前文所述,舵机分别用0.5ms~2.5ms 之间的脉宽来对应0到180°左右的角度,且转动的角度与脉宽呈线性关系,按照图3的对应

关系,则舵机每转动1°,对应的脉宽为(2.5-0.2)ms 180°

,该值除不尽,因此,用一个除不尽的脉冲宽度控制舵机转动,显然转动角度的精度很难控制,为此,实验中以接近2.5ms 且能够整除180的值最为脉宽的变化范围,则取脉宽的范围为0.5ms~2.48ms ,此时,舵机每3720

Computer Knowledge and Technology 电脑知识与技术计算机工程应用技术本栏目责任编辑:梁书第8卷第15期(2012年5月)转动1°,则脉宽变化(2.48-0.5)ms 180=11μs 。因此,定义脉宽与转动角度之间的关系为:pulsewidth=(angle*11)+500(1)其中,pulsewidth 为输出脉冲的宽度,单位为μs ,angle 为控制舵机转动的角度。

用公式(1)把0°到180°的转角映射到500μs 到2480μs 的脉冲时间,控制舵机转动的函数如下所示:void pulse(int angle){int pulsewidth=(angle*11)+500;digitalWrite(9,HIGH);delayMicroseconds(pulsewidth);digitalWrite(9,LOW);}将编写好的控制代码通过Arduino 的IDE 烧录到控制板之后,输入不同的角度值,便会看到舵机执行不同角度的转动信号了。4结束语

本文采用现今较为流行的Arduino 控制板进行了舵机的角度控制,实验验证结果表明,Arduino 控制板具有较高的控制精度,完全满足舵机角度的精度控制。当有多个舵机同时需要驱动时,Arduino 控制板驱动也会达到很高的精度要求。

参考文献:

[1]Jonathan Oxer,Hugh Blemings.Practical Arduino:Cool Projects for Open Source Hardware[M].New York:Springer-Verlag,2009:1-10.[2]杨继志,杨宇环.基于Arduino 的网络互动产品创新设计[J].机电产品开发与创新,2012,25(1):99-100.[3]翁浩峰.利用Arduino 和Flash 开发DISLab [J].物理教师,2010,31(3):45-47.[4]胡小江,董飞垚,雷虎民,等.基于虚拟仪器的舵机半实物仿真系统研究[J].测控技术,2011,

30(1):75-78.

图4Arduino 控制板驱动舵机原理图

图5实验电路图3721

相关主题
文本预览
相关文档 最新文档