-基于Arduino的舵机控制系统设计

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

ComputerKnowledgeandTechnology电脑知识与技术计算机工程应用技术本栏目责任编辑:梁书第8卷第15期(2012年5月)基于Arduino的舵机控制系统设计蔡睿妍(大连大学信息工程学院,辽宁大连116622)摘要:舵机是传统的角度控制驱动器,在机器人等领域得到了广泛应用。传统的舵机主要采用单片机系统驱动控制,但单片机系统对多个舵机同时进行驱动效果并不理想,因此,采用了流行的开源Arduino控制板,通过输出不同脉宽的信号进行舵机转动角度控制,实验证明,该系统实现了舵机角度控制,满足舵机角度控制精度要求,为舵机的驱动提供了新方式。关键词:Arduino;舵机;脉宽信号;角度控制中图分类号:TM383.4文献标识码:A文章编号:1009-3044(2012)15-3719-03DesignofServoControlSystemBasedonArduinoCAIRui-yan(InformationandEngineeringCollegeofDalianUniversity,Dalian116622,China)Abstract:Theservoisthetraditionalanglecontroldriverandhasbeenwidelyusedinrobotandotherfields.Ingeneral,servoisdrivenbymicrocontrollersystem,butthedrivingeffectofmicrocontrollersystemisnotsatisfactoryformultipleservos.So,theArduino,anopensourcecontrolboard,isusedtooutputdifferentpulsewidthsignaltocontroltheservorotationangle,experimentshowedthat,thissystemrealizestheanglecontrolofservo,meetstherequirementofanglecontrolprecisionandprovidesanewwaytodriveservo.Keywords:Arduino;servo;pulsewidthsignal;anglecontrol舵机是一种位置(角度)伺服的驱动器,适用于那些需要角度不断变化并可以保持的控制系统。目前,在高档遥控玩具,如飞机、潜艇模型,遥控机器人中已经得到了普遍应用。传统对舵机的控制主要采用单片机,利用定时器和中断的方式来完成控制,这样的方式控制一个舵机还是相当有效的,但是随着舵机数量的增加,控制起来就没有那么方便了,尤其对机器人等需要多个舵机同时工作的系统中,单片机驱动复杂且精度难以保证。因此,本文采用目前较为流行的开源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@cccc.net.cn电脑知识与技术Vol.8,No.15,May2012.3719ComputerKnowledgeandTechnology电脑知识与技术计算机工程应用技术本栏目责任编辑:梁书第8卷第15期(2012年5月)电子艺术品创意设计等越来越多地使用Arduino作为开发平台。甚至可以接受MacromediaFlash软件制作的动画发送的信号,并由此来控制一些动作器件(如舵机等)。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°90°180°脉宽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)ms1024≈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)ms180°,该值除不尽,因此,用一个除不尽的脉冲宽度控制舵机转动,显然转动角度的精度很难控制,为此,实验中以接近2.5ms且能够整除180的值最为脉宽的变化范围,则取脉宽的范围为0.5ms~2.48ms,此时,舵机每3720ComputerKnowledgeandTechnology电脑知识与技术计算机工程应用技术本栏目责任编辑:梁书第8卷第15期(2012年5月)转动1°,则脉宽变化(2.48-0.5)ms180=11μs。因此,定义脉宽与转动角度之间的关系为:pulsewidth=(angle*11)+500(1)其中,pulsewidth为输出脉冲的宽度,单位为μs,angle为控制舵机转动的角度。用公式(1)把0°到180°的转角映射到500μs到2480μs的脉冲时间,控制舵机转动的函数如下所示:voidpulse(intangle){intpulsewidth=(angle*11)+500;digitalWrite(9,HIGH);delayMicroseconds(pulsewidth);digitalWrite(9,LOW);}将编写好的控制代码通过Arduino的IDE烧录到控制板之后,输入不同的角度值,便会看到舵机执行不同角度的转动信号了。4结束语本文采用现今较为流行的Arduino控制板进行了舵机的角度控制,实验验证结果表明,Arduino控制板具有较高的控制精度,完全满足舵机角度的精度控制。当有多个舵机同时需要驱动时,Arduino控制板驱动也会达到很高的精度要求。参考文献:[1]JonathanOxer,HughBlemings.PracticalArduino:CoolProjectsforOpenSourceHardware[M].NewYork: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.3V35VVinD13D12D11D10D9D8D7D6D5D4D3D2D1D0A0A1A2A3A4A5RSTAREFArduino+_123GNDPowerServo5V图4Arduino控制板驱动舵机原理图图5实验电路图3721

1 / 3
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功