• 学前教育
  • 小学学习
  • 初中学习
  • 高中学习
  • 语文学习
  • 数学学习
  • 英语学习
  • 作文范文
  • 文科资料
  • 理科资料
  • 文档大全
  • 当前位置: 雅意学习网 > 语文学习 > 正文

    基于凌阳61A板单片机的多路舵机平滑控制_多路舵机

    时间:2019-01-20 03:27:46 来源:雅意学习网 本文已影响 雅意学习网手机站

      摘要:本文给出了一种新颖高效的多路舵机控制方法并给出了在此方法下实现平滑控制舵机转动的思路。该方法通过建立一个用以存放舵机角度的数组使产生pwm波的程序只占用极少的处理器时间。
      关键词:单片机;舵机;pwm波;平滑控制
      中图分类号:TM301文献标识码:A文章编号:1009-9166(2008)10-0058-01
      
      产生多路电机PWM波的方法很多,但在产生PWM的同时能播放语音的并不多,主要是因为市面上具有语音播放功能的单片机并不多。而在产生PWM波的同时播放语音对中断中的CPU周期的分配有较大要求,而本文的方法正是提供了一种这样的思路。
      
      一、舵机的控制方法
      
      舵机是一种位置伺服的驱动器。标准的舵机有3条引出线,它们分别是电源线,地线及控制线。一般在电源线与地线间加4-7.2V的电压,应注意给舵机供电的电源要能提供足够的功率。控制线接控制信号,它是一个周期性的方波脉冲信号,周期一般为20ms,脉冲宽度在0.5ms到2.5ms之间,分别对应0度-180度,则舵机的角度与脉冲宽度的关系为:角度数=(脉冲宽度-0.5)*180/200,这里要注意所加电源电压与脉冲信号的高电平值不能相差太多,最好不要超过1V,否则会出现舵机反应迟钝的现象;舵机在运行过程中要从电源吸纳较大的电流,若舵机与单片机控制器共用一个电源,则舵机会对单片机产生较大的干扰,可以通过光耦隔离的方法来解决。
      
      二、凌阳61板简介
      
      凌阳61板是高速16位单片机,主要特点是有功能强大的16位乘法器和16位加法器,具有较强的DSP处理和语音处理功能。因此,它能在一些需要一边产生控制舵机的PWM波一边播放语音的场合有较好的优势。凌阳61板有2个I/O口,32个输入输出引脚,因此最多可以控制32路电机,但由于B口引脚具有特殊功能,一般不采用。61板默认的最高频率为49.152MHz,但将晶振提高至40kHz后发现,其可以工作在60MHz。
      
      三、舵机控制软件的设计
      
      由于凌阳61板没有按位置位复位的指令,因此若按其他文献中通过MSC51单片机产生PWM波的方法在61板中使用时会多出很多的用于实现相关位置位复位功能的指令,从而大大地浪费了单片机时间,使同时播放语音及控制舵机不可能实现。这里介绍一种通过凌阳61板控制16路舵机的方法,该方法中产出PWM波的代码在中断中完成,但由于执行整个中断服务子程序的时间较短,因此能有足够的时间使单片机处理其他事情,如播放语音。该方法通过建立一个表来保存控制舵机的PWM信号的相关信息,每次进入中断服务程序后,只需简单地读取表中的元素并送出I/O口即可产出PWM波,这样可以大大减少中断服务程序中的代码长度。由于凌阳单片机为16位单片机,因此表中的每一项都有16位,每位代表一个输出PWM波的引脚,“1”代表高电平,“0”代表低电平。表中的每个元素代表0.5ms至2.5ms的2ms之间的一个定时周期内的相应引脚的电平值。因此表的长度反映舵机的控制精度,表越大,则精度越小。若表长为180,则表中每个元素代表1度,即控制精度为1度,设其中元素中的第0位的前60个为“1”,其余为“0”,则代表第0路舵机为60度。应注意表中的每个元素的值必然比其前面的元素值小。
      采用凌阳61板中的Timer2定时器,定时周期为10us,代表1度,因此一个脉冲周期包含有2000个定时周期,0.5ms为第50个周期,2.5ms为每250个周期。设采用60MHz的时钟频率,每条指令的需要3个时钟周期,则指令周期为50ns,一个中断内可以执行200条指令,绰绰有余。定义一个计数变量,当其小于等于50时,向所有引脚输出高电平;当其大于50小于250时,读取表中相应元素并送出;当大于250时,输出低电平;当等于2000时,令计数变量恢复为0。这样可使每次进入中断程序执行的指令数仅仅为20条左右,大大节省了处理器时间,更可使控制精度提高至0.2度甚至0.1度。中断服务程序流程图如下:
      
      四、舵机控制的平滑处理
      
      在控制机器人动作时,特别是走路时,若直接改变舵机的角度而不经过平滑处理,由于舵机的反应时间在2ms以内,这样会使机器人由于舵机运动过快而失去平衡甚至倒下,因此需要控制舵机的转动速度并且尽量使其平滑。
      当一帧的时间和在此时间内某个舵机转动的角度确定后舵机在这一帧内的转速就确定下来,这两个参数应由机器人动作的制定者来确定,我们的任务是如何使舵机在这一帧的时间内平滑地由原角度转到目标角度。一般用细分的方法来实现,即把一帧的时间分成若干个时间片,每个时间片只转动一个小角度。
      但是,上面的舵机控制程序的一个主要缺点是当某舵机i需要转动ni度时需要更新表中ni个元素的值,要改变16个舵机的度数最少则要进行16*ni次操作,加上比较操作及对自定义变量赋值操作所需的大量指令时间,在需要改变的度数较大时,所花费的时间将会影响到pwm波的波形,本人通过实验发现,这样会使本来稳定的pwm波的输出波形的占空比会突然增大再回复正常。即使每次只改变一个小的角度,也会几乎用尽处理器的时间,因此,应该采取分开改变舵机度数的方法。下面讲述一下思路。这里要用到两个时基中断,分别是频率为128Hz的IRQ6和1024Hz的IRQ4。其中若干个IRQ6的时间为一帧的时间,这里一帧的时间应大于20个1/128s,在每帧的最后16个IRQ6中断到来时,每次中断将强迫使一个舵机转到该帧的目标度数并重新对相关变量赋值;而每个IRQ4中断的到来都会改变一个舵机的一个小角度。这里定义几个变量及数组:Cnt6:IRQ6的计数变量。MotoNum:用于IRQ4中,指出要改变角度的当前舵机。ChgAng[16]:每个IRQ4中断到达后相应舵机改变的一个小角度值。
      程序流程图分别如图2和图3。
      IRQ4中只简单的改变相应舵机的一个小角度数,这个小角度数在IRQ6中设置。若相应的舵机在该帧中不需要改变角度,则直接返回。由于一帧的动作中一般只有小于一半的舵机需要改变角度,因此加上这个判断可以节省不少时间。
      IRQ6中需要将所有舵机转到该帧的目标角度,这只是预防措施,防止舵机在一帧内的时间内IRQ4不能将舵机改变至该帧的目标角度。Cnt6等于0,代表该帧结束,这里的重置相关变量的值包括根据下一帧的时间重置Cnt6,设置IRQ4中的ChgAng[16]数组以及用于其他场合的一些变量。
      
      这里有两点需要注意:一是在IRQ6中设定ChgAng[16]的值时,若直接用一帧时间内要改变的角度值除以一帧内改变小角度的次数,由于每次改变的角度是一个整数值,因此除后会直接省略小数部分,若小数部分较大,这样在一帧时间到后,舵机此时的角度值与目标值仍会有一个较大的差值,这样,在IRQ6中强制将该舵机改变至目标角度时,在波形上会有明显的跳变,在机器人的动作上会显得疆硬,也就是说不能达到平滑的目的。解决的方法是根据该帧时间的长度即一帧内改变小角度的次数在除前先乘一个因子,使一帧时间到后舵机的角度值与目标值的差值减少到每次的改变的小角度数的3倍内。二是若ChgAng[16]中存在0值而该舵机在该帧中需要改变角度,即一帧时间内要改变的角度值小于一帧内改变小角度的次数,使除后为一小数,省略后便是0了。解决的方法是定义一个数组,其值为一帧内改变小角度的次数除以一帧时间到后舵机的角度值,即要经过多少个IRQ4中断后才改变一度,在IRQ4里,减少该数组中的相应元素的值,若该值为0则相应舵机减少一度。这里也要注意上面的第一个注意点,可以同样用上面乘以一个因子的方法来解决。本文的特点是用于产生pwm波中断程序的高效性,即产生pwm波的程序只占用很少的处理器时间,并且实现了舵机的平滑控制,该方法尤其适用于没有按位置位复位指令的单片机。当然在其他单片机中依然适用。通过增加存放舵机角度的数组的数目可以控制更多的电机。但是,舵机的平滑控制程序有待进一步的改进。
      作者单位:河海大学电气工程学院
      
      参考文献:
      [1]梁锋等.多舵机控制在类人机器人上的应用
      [2]付丽等.单片机控制的多路舵机用PWM波产生方法
      [3]吴华波,钱春来.基于AT89C2051的多路舵机控制器设计

    推荐访问:舵机 平滑 单片机 多路

    • 文档大全
    • 故事大全
    • 优美句子
    • 范文
    • 美文
    • 散文
    • 小说文章