DIY编程器网

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 105|回复: 0
打印 上一主题 下一主题

单片机实现自控飞艇舵控系统

[复制链接]
跳转到指定楼层
楼主
发表于 2012-1-16 16:42:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
以单片机为核心设计并实现了小型自控飞艇的舵机控制系统,对系统的硬件设计进行了说明,对软件设计中的关键问题——串行通讯及帧识别、多单片机通讯及PWM波的软件产生方法进行了详细阐述。
??????? 引言
  平流层飞艇是一种利用轻于空气的气体(如氦气等)产生浮力作为升力的飞行于平流层区域的飞行器。它依靠飞艇内部装载的轻于空气的气体产生的静升力,通过控制飞艇上的舵面和动力装置,以较小的能耗实现在平流层的飞行。小型自控飞艇是为了验证平流层飞艇飞行特性和控制性能的小型软式试验飞艇,对其控制系统的研究是平流层飞艇研制中一个重要的过渡阶段,具有极其重要的意义。
  1 小型自控飞艇舵控系统简介
  舵机是小型自控飞艇执行机构中最主要的执行部件,能否快速、准确地完成对舵机的控制直接关系到飞艇的自主控制效果。因此,舵控系统成为小型飞艇自主飞行控制系统中最重要的组成部分之一,它的主要功能是接收艇载计算机发出的控制指令,实现对控制指令的采集、分析和处理,并根据控制指令向舵机输出连续可调的舵控信号,操纵艇上各舵机完成预定动作。
  2 舵控系统硬件设计
  本飞艇舵控系统以多片P89C2051单片机为核心,配合电源模块、驱动芯片及多路转换开关等在一块印制电路板上实现预定功能。舵控系统设计总体框图如图1所示。
  



?
  舵控系统主控芯片(主控单片机1、2)选择P89C51RA2xx型单片机,它具有8KB的并行可编程非易失性FLASH 程序存储器,并可对器件串行在系统编程(ISP)和在应用中编程(IAP)。该型微控制器是80C51微控制器的派生器件,是采用先进的CMOS工艺制造的8位微控制器,指令系统与80C51完全相同。该器件有4组8位I/O口、3个16位定时计数器、多中断源-4中断优先级-嵌套中断结构、1 个增强型UART、片内振荡器及时序电路。舵控单片机采用Atmel公司的89C2051型单片机[2],其具体性能这里不再赘述。
  电源模块采用美国国家半导体公司生产的LM2576系列产品,它是线性三端稳压器件(如78xx系列端稳压集成电路)的替代品。相比而言,它的热损耗更低、工作效率更高、输出电流驱动能力更强,同时对于电源的高频干扰还有较强的抑制作用。利用该器件只需极少的外围器件便可构成高效稳压电路,为MCU稳定可靠的工作提供强有力的保证。
  此外,为增强信号的驱动能力,在输出之前采用74LS245作为信号驱动芯片;串口电平转换采用Max232芯片。
  该系统硬件设计比较简单,值得一提的是其中的安全性设计部分,即当地面检测到艇上自动控制系统已经失效时,为确保飞艇安全返回,需要将控制方式转至遥控方式。如图1所示,当艇载计算机发生故障时,舵控系统通过无线射频接收机接收地面遥控信号,通过其输出的多通道PWM波直接控制艇上舵机,控制飞艇安全返回。此处,控制方式的转换是通过多路转换开关实现的,开关的切换信号由艇载计算机看门狗电路在检测到艇载计算机已不能正常工作时给出。
  3 舵控系统软件设计
  3.1 软件总体结构
  舵控系统各单片机程序均在Keil C51环境下采用C语言编写。为了保证系统的实时性及快速性,软件编写采用了主程序+任务+中断的结构。
  在三部分程序中,以主单片机1的外部中断最多,包括串口中断、与主单片机2的握手中断以及艇载计算机看门狗的外部中断,这几个中断的优先级排列顺序是:艇载计算机看门狗中断>串口中断>握手中断。主单片机1接收到艇载计算机通过RS232串口发来的信息帧后,首先进行帧识别,提取出前m个字节的数据,加上帧头帧尾后由P1口发送给主单片机2;并将第m+1个字节数据作为开关量通道控制信号由P2口输出,用作系统控制备用。
  主单片机2程序的主要任务是通过其P1口接收上位机传来的数据,提取各控制信息,在相应控制指令的前面加上地址,依次由串口发送给下位舵控单片机。
  舵控单片机的主要任务是识别控制指令和地址指令,并根据收到的控制指令(舵机占空比信号)产生PWM波控制艇上舵机。
  该系统软件设计中的关键问题包括以下几个方面:(1)控制信号流程中数据帧的接收识别;(2)舵控系统中主从单片机之间的多机通信;(3)PWM波舵控信号的软件产生方法。下面对这几个问题进行详细的阐述,并给出相应的解决方案。
  
                          
                       
                          
                                3.2 软件设计中的关键问题
?
  (1)数据帧的串口接收及识别技术
  在舵控系统中,数据以二进制信息帧的格式进行传递。每个信息帧从标题开始都有固定的帧头、帧尾,且长度固定,其基本数据格式如表1所示。
  



?
  在该舵控系统的设计中,串行通讯占有很重要的地位,如艇载计算机与主单片机1之间的通讯过程。下面以主单片机1的串口接收程序为例,对串行通讯的实现过程加以说明。
  在串行通信中,接收程序的任务是数据接收、帧识别和信息提取。常规的设计方法是设置一个比较大的缓冲区。串行接收中断服务程序负责把接收到的数据压入缓冲区,当缓冲区的数据足够多时,再由主程序调用一个帧识别和解码子程序对缓冲区中的数据进行处理。这种方法的好处是中断服务程序比较短,不足之处为从一帧数据接收完毕到解码时间较长,另外对缓冲区进行管理需要占用大量的的CPU时间,因而实时性较差,此处不宜使用。
  本文采用了中断服务程序就地帧识别技术,即省掉缓冲区,数据接收、帧识别均由中断服务程序完成,之后在主程序的循环中完成数据的提取和处理。就地帧识别技术的实现机理如下:把中断服务程序看作是一个处理机,串行数据逐字节到来,程序先从数据序列中等到第一个帧头,写入该帧的存储数组,同时置标志位 flag1,接收状态推进一步;再判断下一次中断时,来到的数据是否符合第二个帧头的特征。如果符合则存入相应数组,并置相应的标志位flag2,接收状态继续推进;如果帧头两个字节均符合,则将后面来到的数据依次存入指定数组;根据已接收到的字节数判断,当符合该帧的数据部分接收完毕后,判断下一字节是否为帧尾的第一个字节,如果是则置标志位flag3;之后依据同样的方法判断帧尾第二个字节是否来到,如果已接收到,则置该帧数据已完整接收到标志 flag4,同时接收状态归零,重新开始等待帧头字符。在帧头帧尾判断期间,一旦有一项不符合要求,则将接收状态归零,以重新开始等待帧头。主程序每循环一次便对“帧完整接收到”标志进行一次判断,若为真则调用相应的数据提取子程序,并清flag4。
  串行中断服务程序流程如图2所示。采用中断服务程序就地帧识别技术的优点在于数据接收后立即进行帧识别,省去了对缓冲区的管理工作,减少了存取次数,因而节省了大量的时间,极大地提高了接收程序的实时性。同时错帧和断帧被自动丢弃,不再占用资源。
  



?
  图2中各标志位含义为:
  flag1——接收到帧头Head1标志;
  flag2——接收到完整帧头标志;
  flag3——接收到帧尾End1标志;
  flag4——接收到完整帧标志。
  (2)单片机多机通讯
  在舵控系统设计中,各部分间的通讯是设计的重要内容,其中主要包括单片机与上位PC机间的通讯和单片机与单片机之间的通讯。在舵控系统中,主单片机1与上位PC机通讯是通过单片机自带的一路异步串行通讯接口完成的;而主单片机1通过其P1口向主单片机2传输数据,这里不再赘述,重点介绍主单片机2如何通过其一路串口分别向下位的多个舵控单片机传送指令。
  此系统中,主单片机2作为主机,m个舵控单片机作为从机,在主机与从机的通讯过程中,串口控制寄存器中SCON中的SM2位发挥了重要作用。当其中一个舵控单片机(89C2051)的SM2位为1时,该单片机只接收地址帧,对数据帧不理睬;而当SM2位为0时,该单片机接收所有发来的消息。具体通信过程如下:
  ①首先将主、从单片机工作方式选为模式3,所有从机的SM2位开始置1,处于只接收地址帧状态。
  ②主机接收主单片机1发来的数据帧,从中提出数据部分(m个字节的指令对应m个舵控单片机),根据序号在控制指令字节前加上一个字节的地址信息。然后主机依次通过串口向下发送各舵控单片机的地址字节和数据字节。发送一帧地址信息,包含8位地址,第9位为1,表示发送的帧为地址帧。
  ③从机接收地址帧后,进入中断,将发来的地址与自身比较;地址一致的从机就是被寻址的从机,它清除SM2位,接收主机发来的所有后续帧信息(数据信息)。未寻址的所有其他从机仍维持SM2=1,对主机发来的数据帧不理睬,直到发来新地址帧;之后在下一次中断时被寻址的从机接收主机发来的数据信息(第9位为 0)。
  需要注意的是,如果对已经寻址的从机再发送地址帧,则该从机SM2=1,恢复初始状态,和其他从机竞争。
  
                          
                       
                          
                                (3)舵控信号PWM波的产生
?
  对飞艇舵机的控制最终是通过舵控单片机产生PWM波来实现的。通常,产生PWM波不外乎硬件和软件两种方法。考虑到舵控单片机计算任务不大,本系统中采用软件产生PWM波的方法。下面以定时器0产生PWM波为例,说明通过软件产生PWM波舵控信号的实现方法。
  void timer0(void) interrupt 1 using 1
  {
  /*PWM波通过单片机P37口输出,定时取反*/
  P37=!P37;
  /*Length代表一个周期的时间*/
  c=Length-c;
  /*重新定义计数初值*/
  TH0=-(c/256);
  TL0=-(c%256);
  /*判断脉宽是否在正常范围之内*/
  if(c>=border1&&c<=border2)
  c=a;
  else
  c=Length-a;
  }
  在程序中,由串口中断接收上位机发送的脉宽指令,继而通过改变入口参数a来调整PWM波的脉宽,并确保脉宽输出在正常范围之内。通过该方法产生PWM波切实可行,简单有效,可以广泛应用于舵机控制信号的产生中。
  4 实验结果
  实验中以FUTABA 3003舵机作为被控对象,由计算机模拟向舵控系统发送数据帧,通过示波器观察舵控信号的变化。实验结果表明,该舵控系统工作稳定,输出PWM波脉宽准确可靠,被控舵机转角线性度良好。
                          
                       
                          
                               
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|文字版|手机版|DIY编程器网 ( 桂ICP备14005565号-1 )

GMT+8, 2024-11-1 17:35 , 耗时 0.112543 秒, 18 个查询请求 , Gzip 开启.

各位嘉宾言论仅代表个人观点,非属DIY编程器网立场。

桂公网安备 45031202000115号

DIY编程器群(超员):41210778 DIY编程器

DIY编程器群1(满员):3044634 DIY编程器1

diy编程器群2:551025008 diy编程器群2

QQ:28000622;Email:libyoufer@sina.com

本站由桂林市临桂区技兴电子商务经营部独家赞助。旨在技术交流,请自觉遵守国家法律法规,一旦发现将做封号删号处理。

快速回复 返回顶部 返回列表