產品發表 包羅萬象 模型拍賣 綜合討論 直昇機 飛機 同協會 回首頁

 找回密碼
 申請
查看: 976|回復: 1

飞行中实时调整参数的实现

[複製鏈接]
發表於 2009年11月4日 02:16 PM | 顯示全部樓層 |閱讀模式


    根据飞机气动的不同,为保证稳定飞行而设置的各项参数也不同,因此根据新装配的飞机,我们需要进行飞行中的参数调整。由于飞机的起降是存在风险的,因此我们希望飞机上天后,在空中根据飞行状态进行实时调整参数,以尽可能少的起落调整出合适的参数来。
    在CY2007里,以简便的方式实现了这个实用的功能。在串口服务程序里有这样的代码:
    if((sixchar=='$')&&(fifthchar=='W')&&(forchar == 'R')&&(trdchar == 'P')&&(sndchar=='A')&&(fstchar=='R'))
    {
     wrParaHeadFlag=1;
     npos1=0;
    }
而后有:
  if(wrParaHeadFlag==1)
  {
   if(npos1<=39)
   {
    ParaData[npos1]=chuan1;
    npos1++;
   }
   else
   {
    ParaData[40]='$'+'W'+'R'+'P'+'A'+'R';
    for(ti=0;ti<=39;ti++)
    {
     ParaData[40]+=ParaData[ti];
    }
    if(ParaData[40]==chuan1)      //校验值正确
    {
     for(ti=0;ti<40;ti++)
     {
      ParaDataInUse[ti]=ParaData[ti];
     }
      writebuf = 1;
    }
     npos1=0;
    wrParaHeadFlag=0;
   }
  }
    上述程序是接收地面站发过来的新的40个参数,校验无误后将之赋予到使用的ParaDataInUse[]数组里。
    而当接收到地面要求读取参数的指令后:
    if((sixchar=='$')&&(fifthchar=='R')&&(forchar == 'D')&&(trdchar == 'P')&&(sndchar=='A')&&(fstchar=='R'))
    {
     rdParaHeadFlag=1;
    }
用如下代码发送到地面:
   if(rdParaHeadFlag==1)
   {
    msg[0]='$';
    msg[1]='P';
    msg[2]='A';
    msg[3]='R';
    ParaDataInUse[40]=0x00;
    ParaDataInUse[40]='$'+'P'+'A'+'R';
    for(i=0;i<40;i++)
    {
     msg[i+4]=ParaDataInUse;
     ParaDataInUse[40]=ParaDataInUse[40]+ParaDataInUse;
    }
    msg[4+40]=ParaDataInUse[40];

    AT91F_PDC_SetTx(AT91C_BASE_PDC_DBGU,(char *)msg,45);
    rdParaHeadFlag=0;
    return;
   }
    然后在各个控制程序里,大家可以看到参数数组ParaDataInUse[]在各个算法里的应用。改变了参数,就改变了各个状态。

(未完待续)




上一篇:自动飞行所需主要参数的获取
下一篇:无人机项目的具体应用
回復

使用道具 舉報

發表於 2009年11月4日 06:54 PM | 顯示全部樓層
飛行中即時調整參數的實現


    根據飛機氣動的不同,為保證穩定飛行而設置的各項參數也不同,因此根據新裝配的飛機,我們需要進行飛行中的參數調整。由於飛機的起降是存在風險的,因此我們希望飛機上天後,在空中根據飛行狀態進行即時調整參數,以盡可能少的起落調整出合適的參數來。
    在CY2007裏,以簡便的方式實現了這個實用的功能。在串口服務程式裏有這樣的代碼:
    if((sixchar=='$')&&(fifthchar=='W')&&(forchar == 'R')&&(trdchar == 'P')&&(sndchar=='A')&&(fstchar=='R'))
    {
     wrParaHeadFlag=1;
     npos1=0;
    }
而後有:
  if(wrParaHeadFlag==1)
  {
   if(npos1<=39)
   {
    ParaData[npos1]=chuan1;
    npos1++;
   }
   else
   {
    ParaData[40]='$'+'W'+'R'+'P'+'A'+'R';
    for(ti=0;ti<=39;ti++)
    {
     ParaData[40]+=ParaData[ti];
    }
    if(ParaData[40]==chuan1)      //校驗值正確
    {
     for(ti=0;ti<40;ti++)
     {
      ParaDataInUse[ti]=ParaData[ti];
     }      writebuf = 1;
    }
     npos1=0;
    wrParaHeadFlag=0;
   }
  }
    上述程式是接收地面站發過來的新的40個參數,校驗無誤後將之賦予到使用的ParaDataInUse[]陣列裏。
    而當接收到地面要求讀取參數的指令後:
    if((sixchar=='$')&&(fifthchar=='R')&&(forchar == 'D')&&(trdchar == 'P')&&(sndchar=='A')&&(fstchar=='R'))
    {
     rdParaHeadFlag=1;
    }
用如下代碼發送到地面:
   if(rdParaHeadFlag==1)
   {
    msg[0]='$';
    msg[1]='P';
    msg[2]='A';
    msg[3]='R';
    ParaDataInUse[40]=0x00;
    ParaDataInUse[40]='$'+'P'+'A'+'R';
    for(i=0;i<40;i++)
    {
     msg[i+4]=ParaDataInUse;
     ParaDataInUse[40]=ParaDataInUse[40]+ParaDataInUse;
    }
    msg[4+40]=ParaDataInUse[40];
    AT91F_PDC_SetTx(AT91C_BASE_PDC_DBGU,(char *)msg,45);
    rdParaHeadFlag=0;
    return;
   }
    然後在各個控制程式裏,大家可以看到參數陣列ParaDataInUse[]在各個演算法裏的應用。改變了參數,就改變了各個狀態。
(未完待續)
回復 按讚

使用道具 舉報

您需要登錄後才可以回帖 登錄 | 申請

本版積分規則

世界各國訪RCTW統計

手機版|台灣遙控模型-RCTW

GMT+8, 2024年12月13日 06:15 PM

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回復 返回頂部 返回列表