您的位置 首页 电源

如何用单片机操控舵机及程序具体

如何用单片机控制舵机及程序详细-本文首先介绍了舵机概述与工作原理,其次介绍了舵机的PWM信号,最后详细阐述了单片机控制舵机方法及程序分享。

  舵机概述

  舵机最早出现在航模运动中。在航空模型中,飞翔机的飞翔姿势是经过调理发动机和各个操控舵面来完成的。举个简略的四通飞机来说,飞机上有以下几个当地需求操控:

  1.发动机进气量,来操控发动机的拉力(或推力);

  2.副翼舵面(安装在飞机机翼后缘),用来操控飞机的横滚运动;

  3.水平尾舵面,用来操控飞机的俯仰角;

  4.笔直尾舵面,用来操控飞机的偏航角;

  遥控器有四个通道,别离对应四个舵机,而舵机又经过连杆等传动元件带动舵面的翻滚,然后改动飞机的运动状况。舵机因而得名:操控舵面的伺服电机。

  不仅在航模飞机中,在其他的模型运动中都能够看到它的运用:船模上用来操控尾舵,车模中用来转向等等。由此可见,但凡需求操作性动作时都能够用舵机来完成。

  舵机作业原理

  一般来讲,舵机首要由以下几个部分组成, 舵盘、减速齿轮组、方位反响电位计5k、直流电机、操控电路板等。

  作业原理:操控电路板承受来自信号线的操控信号(详细信号待会再讲),操控电机翻滚,电机带动一系列齿轮组,减速后传动至输出舵盘。舵机的输出轴和方位反响电位计是相连的,舵盘翻滚的一起,带动方位反响电位计,电位计将输出一个电压信号到操控电路板,进行反响,然后操控电路板依据所在方位决议电机的翻滚方向和速度,然后到达方针中止。

  舵机的根本结构是这样,但完成起来有很多种。例如电机就有有刷和无刷之分,齿轮有塑料和金属之分,输出轴有滑动和翻滚之分,壳体有塑料和铝合金之分,速度有快速和慢速之分,体积有大中小三种之分等等,组合不同,价格也千差万别。例如,其中小舵机一般称作微舵,同种资料的条件下是中型的一倍多,金属齿轮是塑料齿轮的一倍多。需求依据需求选用不同类型。

怎么用单片机操控舵机及程序详细

  舵机的PWM信号

  1.PWM信号的界说

  PWM信号为脉宽调制信号,其特色在于他的上升沿与下降沿之间的时刻宽度。详细的时刻宽窄协议参阅下列叙述。咱们现在运用的舵机首要依赖于模型职业的规范协议,跟着机器人职业的逐渐独立,有些厂商现已推出全新的舵机协议,这些舵机只能运用于机器人职业,现已不能够运用于传统的模型上面了。现在舵机可能是这个过渡时期的产品,它选用传统的PWM协议,优缺陷一望而知。长处是现已产业化,成本低,旋转视点大(现在所出产的都可到达185度);缺陷是操控比较复杂,究竟选用PWM格局。可是它是一款数字型的舵机,其对PWM信号的要求较低:(1)不必随时接纳指令,削减CPU的疲惫程度;(2)能够方位自锁、方位盯梢,这方面逾越了一般的步进电机

怎么用单片机操控舵机及程序详细

  其PWM格局留意的几个关键:(1)上升沿最少为0.5mS,为0.5mS—2.5mS之间;(2)HG14-M数字舵机下降沿时刻没要求,现在选用0.5Ms就行;也便是说PWM波形能够是一个周期1mS的规范方波;(3)HG0680为塑料齿轮模仿舵机,其要求接连供应PWM信号;它也能够输入一个周期为1mS的规范方波,这时表现出来的跟从功能很好、很严密。

  2.PWM信号操控精度拟定

  假如选用的是8位单片机AT89C52CPU,其数据分辨率为256,那么经过舵机极限参数试验,得到应该将其划分为250份。那么0.5mS—2.5Ms的宽度为2mS=2000uS。2000uS÷250=8uS,则:PWM的操控精度为8us。咱们能够以8uS为单位递加操控舵机翻滚与定位。舵机能够翻滚185度,那么185度÷250=0.74度,则:舵机的操控精度为0.74度。

怎么用单片机操控舵机及程序详细

  1DIV=8us;250DIV=2ms时基寄存器内的数值为:(#01H)01—-(#0FAH)250。共185度,分为250个方位,每个方位叫1DIV。则:185÷250=0.74度/DIVPWM上升沿函数:0.5ms+N×DIV0us≤N×DIV≤2ms0.5ms≤0.5ms+N×DIV≤2.5ms

  单片机操控舵机及程序

  正是舵机的操控信号是一个脉宽调制信号,所以很便利和数字体系进行接口。只要能发生规范的操控信号的数字设备都能够用来操控舵机,比如PLC、单片机等。这儿介绍使用51系列单片机发生舵机的操控信号来进行操控的办法,编程言语为C51。之所以介绍这种办法仅仅由于笔者用2051完成过,本着担任的情绪,所以敢在这儿写出来。程序用的是我的四足步行机器人,有修改。单片机并不是操控舵机的最好的办法,期望在此能起到抛砖引玉的效果。

  2051有两个16位的内部计数器,咱们就用它来发生周期20ms的脉冲信号,依据需求,改动输出脉宽。根本思路如下(请对照下面的程序):

  我用的晶振频率为12M,2051一个时钟周期为12个晶振周期,正好是1/1000ms,计数器每隔1/1000ms计一次数。以计数器1为例,先设定脉宽的初始值,程序中初始为1.5ms,在for循环中能够随时经过改动a值来改动,然后设定计数器计数初始值为a,并置输出p12为高位。当计数结束时,触发计数器溢出中止函数,便是voidtimer0(void)interrupt1using1,在子函数中,改动输出p12为反相(此刻跳为低位),在用20000(代表20ms周期)减去高位用的时刻a,便是本周期中低位的时刻,c=20000-a,并设定此刻的计数器初值为c,直到定时器再次发生溢出中止,重复上一进程。

  #include《reg51.h》

  #defineucharunsignedchar

  #defineuintunsignedint

  uinta,b,c,d;

  sbitp12=P1^2;

  sbitp13=p1^3;

  sbitp37=P3^7;

  voidTImer0(void)interrupt1using1

  {p12=!p12;

  c=20000-c;

  TH0=-(c/256);TL0=-(c%256);

  if(c》=500&&c《=2500)c=a;

  elsec=20000-a;

  }

  voidTImer1(void)interrupt3using1

  {p13=!p13;

  d=20000-d;

  TH1=-(d/256);TL1=-(d%256);

  if(d》=500&&d《=2500)d=b;

  elsed=20000-b;

  }

  voidmain(void)

  {TMOD=0x11;

  p12=1;

  p13=1;

  a=1500;

  b=1500;

  c=a;d=b;

  TH0=-(a/256);TL0=-(a%256);

  TH1=-(b/256);TL1=-(b%256);

  EA=1;

  ET0=1;TR0=1;EX0=1;EX1=1;

  ET1=1;TR1=1;

  PX0=0;PX1=0;PT1=1;PT0=1;

  for(;;)

  {

  }

  }

  由于在脉冲信号的输出是靠定时器的溢出中止函数来处理,时刻很短,因而在精度要求不高的场合能够疏忽。因而假如疏忽中止时刻,从另一个视点来讲便是主程序和脉冲输出是并行的,因而,只需求在主程序中按你的要求改动a值,例如让a从500改动到2500,就能够让舵机从0度改动到180度。别的要记住一点,舵机的翻滚需求时刻的,因而,程序中a值的改动不能太快,否则舵机跟不上程序。依据需求,挑选适宜的延时,用一个a递加循环,能够让舵机很流通的翻滚,而不会发生像步进电机相同的脉动。这些还需求实践中详细领会。

  舵机的速度决议于你给它的信号脉宽的改动速度。举个比如,t=0试,脉宽为0.5ms,t=1s时,脉宽为1.0ms,那么,舵机就会从0.5ms对应的方位转到1.0ms对应的方位,那么翻滚速度怎么呢?一般来讲,3003的最大翻滚速度在4.8V时为0.23s/60度,也便是说,假如你要求的速度比这个快的话,舵机就反响不过来了;假如要求速度比这个慢,能够将脉宽改动值线性到你要求的时刻内,做一个循环,一点一点的添加脉宽值,就能够操控舵机的速度了。当然,详细这一点一点究竟是多少,就需求做试验了,否则的话,不适宜的话,舵机就会向步进电机相同一跳一跳的翻滚了,测验改动这“一点”,使你的舵机运动更滑润。还有一点很重要,便是舵机在每一次脉宽值改动的时分总会有一个转速由零添加再减速为零的进程,这便是舵时机发生像步进电机相同运动的原因。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/dianyuan/347762.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部