久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 19728|回復: 17
打印 上一主題 下一主題
收起左側

四軸設計 -RT-Thread DBP飛控的開源了

  [復制鏈接]
跳轉到指定樓層
樓主
本文出自:Air_Cheese再次向作者致敬
簡單說,這是一個我自己寫的開源的小飛控。全部代碼開源,全部代碼簡單,注釋完整。飛控加上配套的四軸機體,就成了我的設計,輕松幫我拿到學校的優秀設計。

聲明: 這篇小文章曾經在幾個論壇發過,自己的博客搭起來后當然也少不了自己 self-plagiarism 一下。不過,如需轉載請謹慎,我會追到天涯海角。。
以上

雖然我的題目是:《四軸飛行器的控制》,但飛行器的算法都是用最基本的算法,更復雜的是如何協調好各個任務。
而讓我自己感到更加有價值的部分是如何在 RTT 上運行一個飛控并較好的協調各個模塊的工。希望能給學習 STM32 和 RT-Thread 的同學一個參考,也希望 RTT 能越做越好。
四軸斷斷續續做了5個月,因為這幾年都做類似的東西,所以做起來難度不大,我的目標是夠用就行。而對于飛控,是我一直從大一到大四的學習研究過程,持續做了四年。
主要參數如下:
[td]
參數
空機重量390g
起飛重量(11.1V 2200mAh)550g
續航時間20分鐘
載重能力200g
懸停力效率>10g/w
電機2206 kv1200
8043
單個電機最大推力290g
[td]
傳感器型號
陀螺儀MAX21000
加速度計ADXL362
磁阻HMC5983
氣壓計MS5611
傳感器全部使用 SPI 接口,軟件利用 RTT 的 SPI 驅動,所以 ODR (Output Data Rate) 非常高。
[td]
參數
陀螺儀ODR2kHz
姿態解算更新率1kHz
控制更新率1kHz
電調控制更新率1kHz
CPU 占用率50~70%*
*:取決于是否需要高速記錄 log 到 SD 卡。
全機一共9個微控制器,主控芯片為 1 個 STM32F4,其他的為 STM32F1 (電調,電源管理,傳感器終端,接收機 PPM 解碼器等等),全部運行RTT,全部使用CAN BUS 通信。
飛控本身集成度較高(集成 10軸傳感器,GPS,12路PWM輸出,1路 PPM 輸入,1路 UART,1路CANbus),在沒有其他模塊的情況下也可以單獨完成飛行任務。拓展模塊包括電源板,電調板,各個傳感器,PWM解碼模塊等,因為有了CAN Bus,使用很方便,論文內有詳細說明。
電調為自制兼容 ESC32的 硬件(感謝開源模型興趣組的群主提供了 ESC32 的原理圖)
軟件上在 ESC32 與硬件之間加入 RTT 層,劫持了PWM更新函數,從而實現控制數據流使用雙向的
飛控 <-> CANBUS <-> RTT <-> ESC32
代替了傳統單向的
飛控 -> PWM -> ESC32
數據溝通速度大幅度提高,信號延遲降低非常多(50Hz 對比 1000Hz),提供了反饋的能力。
論文里面提到幾個新的思路,包括虛擬終端,大的PCB機架+電路,單總線在四軸上的應用,都是我在以前的制作中,感覺非常不方便后,提出的解決方案,在實際中也幫我省了很多精力去調試。
之后的文章,將根據論文逐步分析一些代碼和思路。如果對你有幫助,請使用頁腳的RSS訂閱鏈接RSS訂閱鏈接訂閱我的博客,謝謝。
演示視頻鏈接

全部程序,原理圖:
游客,本帖隱藏的內容需要積分高于 1 才可瀏覽,您當前積分為 0


放兩張圖片感受下:

飛控系列文章:

在飛控中記錄路徑(KML)文件,并在谷歌地球上顯示飛行軌跡還記得這段動畫么,從飛控的 microSD 中直接點擊一個路徑文件,即可打開谷歌地圖并顯示出路徑。并且這個文件是由飛控在飛行過程中實時生成的,不需要額外的編輯,使用起來非常方便。

因為 typecho 的原因,沒辦法上傳大于 1M 的 GIF 動畫。效果請看視頻:youtube youku 1:35 處開始

想要在飛控中記錄這個谷歌地球的描述文件,是非常簡單的。
1. 背景知識谷歌地球/地圖 (google earth / google map) 使用的描述文件為 .kml 文件。本質上為 xml 文件。XML 大家應該熟悉了
可擴展標記語言(英語:eXtensible Markup Language,簡稱: XML),是一種標記語言。標記指計算機所能理解的信息符號,通過此種標記,計算機之間可以處理包含各種信息的文章等。如何定義這些標記,既可以選擇國際通用的標記語言,比如HTML,也可以使用像XML這樣由相關人士自由決定的標記語言,這就是語言的可擴展性。XML是從標準通用標記語言(SGML)中簡化修改出來的。它主要用到的有可擴展標記語言、可擴展樣式語言(XSL)、XBRL和XPath等。[1]
上面說了一堆,意思就是說,.kml 呢,實際上就是一個文本文件,里面用文本記錄各種描述,比如線,顏色圖形,位置等等。
Google earth/map 開發手冊里面有詳細的 kml 文件的開法指南。
英文在這, 中文在這
其實,要做這個路徑記錄文件,并不需要去翻手冊。
2. 這樣是不是很簡單竅門就在這: 在描述路徑的時候,.kml 文件的頭和尾都可以是固定不變的,唯一變化的是,路徑中各個點的經緯度值。
這么說就簡單了吧?我們的飛控只需要把固定的文件頭寫進一個 .kml 的文本文件,然后根據 GPS 實時返回的經緯度和高度信息,不斷地在文件后追加當前的位置信息,一直寫入直到你不想記錄的時候,再把固定的文件尾追加到文件中。保存,搞定!
不說別的,先看一個典型的(花俏的) kml 文件。大家可以將以下保存到一個 .kml 文件里,拖到  earth 里面看看效果。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="">
    <Document>
<name>Paths</name>
<description> DBP V0.4 KML LOG</description>
<Style id="yellowLineGreenPoly">
    <LineStyle>
        <color>7f00ffff</color>
        <width>4</width>
    </LineStyle>
    <PolyStyle>
        <color>5f00ff00</color>
    </PolyStyle>
</Style>
<Placemark>
    <name>Absolute Extruded</name>
    <description>Deep Blue Plane V0.4 Path</description>
    <styleUrl>#yellowLineGreenPoly</styleUrl>
    <LineString>
        <extrude>1</extrude>
        <tessellate>1</tessellate>
        <altitudeMode>absolute</altitudeMode>
            <coordinates>
........
            </coordinates>
     </LineString>
    </Placemark>
</Document>
</kml>


按到關鍵沒?
具體是哪,自己有興趣可以去看看。
至于格式問題,經度范圍從 -180 到 +180? 負數代表西經,正數代表東經。維度范圍從 -90 到 +90, 負數代表南緯,正數代表北緯。單位全部是度,所以不會有幾分幾秒的情況,一個實數就代表了一個點。高度為海拔高度,單位是米。
看到文件的中間部分,由  <coordinates> </coordinates> 包起來的部分,每一行表示一個點,每一個點坐標,一次由經度,緯度和海拔高度組成,這三個信息都可以方便地從任何“正常的” GPS 輸出中找到。
這里例子的文件,由三個位置坐標點組成,實際飛控記錄的時候,這一部分將不斷增加,將是整個文件中占用行數最多的部分。
在看到文件前部分,
1
2
3
4
5
6
7
8
9
<Style id="yellowLineGreenPoly">
    <LineStyle>
        <color>7f00ffff</color>
        <width>4</width>
    </LineStyle>
    <PolyStyle>
        <color>5f00ff00</color>
    </PolyStyle>
</Style>



這部分描述了你的路徑畫出來的風格,具體可以去看手冊里面,或者直接修改一些配色,反正我這是已經是最丑的風格了。。
于是上面的代碼風格就是如此逗逼

三個頂點,即為坐標里面描述的三個點,高度為海拔 194米。
只要不斷記錄這些點,就能實現動畫里面的飛行路徑了。
那么,飛控里面咋生成 .kml 文件呢?
2. 那我們來看看代碼與 .kml 文件生成相關的代碼在 飛控主板源碼.rar 的以下目錄
program v1.0\RT-Thread_1.2.0\bsp\stm32f40x\user\thread_log.c
什么你沒有代碼? 代碼在這里下載:四軸設計初說 - DBP飛控的開源與簡介
這個文件,包含了一些獨立的儲存飛控運行信息,傳感器信息,GPS 記錄等等的線程。其中一個即為生成 .kml 文件的線程 void entry_thread_kml_log(void* parameter)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
//記錄kml文件
void entry_thread_kml_log(void* parameter)
{   
    int fd = -1;
    int    size;
    int gps_count_bef = 1;
    char buf[512];
    char dir[64];
    unsigned int buf_offset = 0;        //指示上一次寫到哪里
     
    unsigned long long file_byte_seek = 0;            //指示文件長度
    unsigned int head_len = 0;                        //文件頭尾的長度
    unsigned int tail_len = 0;
    const char file_name[] = "path.kml";
    const char head[] =
    "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
    "<kml xmlns=\"\">\n"
    "\t<Document>\n"
    "<name>Paths</name>\n"
    "<description> DBP V0.4 KML LOG</description>\n"
    "<Style id=\"yellowLineGreenPoly\">\n"   
    "    <LineStyle>\n"      
    "        <color>7f00ffff</color>\n"     
    "        <width>4</width>\n"   
    "    </LineStyle>\n"   
    "    <PolyStyle>\n"      
    "        <color>5f00ff00</color>\n"   
    "    </PolyStyle>\n"  
    "</Style>\n"
    "<Placemark>\n"
    "    <name>Absolute Extruded</name>\n"   
    "    <description>Deep Blue Plane V0.4 Path</description>\n"     
    "    <styleUrl>#yellowLineGreenPoly</styleUrl> \n"   
    "    <LineString>\n"     
    "        <extrude>1</extrude>\n"      
    "        <tessellate>1</tessellate>\n"       //這一句是有沒有豎線
    "        <altitudeMode>absolute</altitudeMode>\n"      
    "            <coordinates>\n";
     
    const char tail[] =   
    "            </coordinates>\n "   
    "    </LineString>\n"
    "    </Placemark>\n"
    "</Document>\n"
    "</kml>\n";
     
    //預先記錄文件頭尾長度
    head_len = strlen(head);
    tail_len = strlen(tail);
     
    //復制工作區 目錄
    strcpy(dir, log_dir);
    //打開記錄文件
    strcat(dir, file_name);
     
    //try to open the working file
    while(fd < 0)
    {
        int count = 0;        
        fd = open(dir, O_WRONLY | O_CREAT, 0);
        rt_thread_delay(RT_TICK_PER_SECOND);
         
        if ((count ++ )> 60) //60 seconds
        {
            rt_kprintf("kml: open file for write failed\n");
            return;
        }
    }

    rt_kprintf("google earth file'path.kml' has been created.\n");
    //寫入文件頭
    write(fd, head, head_len);
    file_byte_seek += head_len;
     
    //主循環
    while(1)
    {
        while(gps_count_bef >= gps.count)
        {
            rt_thread_delay(5);
        }
        gps_count_bef = gps.count;       //mark for 1 second a cycle
         
        //等待直到數據有效
        if(gps.flag == 0)
            continue;
                 
        sprintf(buf,"\t\t\t\t%f,%f,%f\n",
                                        gps.lon,
                                        gps.lat,
                                        gps.altitude);   
         
        //將緩存區寫入文件
        size = write(fd, buf, strlen(buf));
        file_byte_seek += size;                //記錄寫入長度   
         
        if(size>0)
        {
        //rt_kprintf(buf);
        }
        else
        {
            rt_kprintf("kml log: Write to file wrong!\n");
            while(1)
                rt_thread_delay(1000);  //相當于停止這個線程
        }
         
         
        //寫入文件尾
        write(fd, tail, tail_len);
        close(fd);
        fd = open(dir, O_WRONLY | O_CREAT | O_APPEND, 0);//末尾重新打開        

        //覆蓋 從文件頭開始計算寫入了多少有效數據,覆蓋文件尾
        lseek(fd, file_byte_seek, DFS_SEEK_SET);
    }
}



注釋很清楚啦,我就不多說啦。
RT-Thread 支持 POSIX 標準文件系統接口,所以我的飛控可以直接使用 open() write() close() 之類的POSIX 文件接口操作文件。 如果你跑在自己的飛控,自己的 MCU,或者直接裸奔,那文件接口需要改成你的文件系統提供的接口。
3. 經緯度,高度數據怎么取?這里就要說到如何 GPS 數據啦,這部分本不是這篇的內容,這里大概提一下。
一般 GPS 輸出,至少都有標準的 NMEA-0183協議輸出,可以參考這個文件 NMEA-0183 定義。 官方文檔似乎是需要購買的。
GPS 會通過串口輸出一大堆包含導航信息的語句,一般在10Hz(每秒 10 條)以下。大部分 GPS 模塊也可以選擇性輸出部分語句,屏蔽部分語句。(因為很多語句信息是重復的,比如 GGA 語句和 RMC 語句都包同樣的含經緯度信息)[2]
如果不想看文檔,那就直接看下面的例子
這是最常用的 GPS 返回的 NMEA-0183 語句之一 GGA 語句:
$GPGGA,123519,4807.038,N,01131.000,E,1,08,0.9,545.4,M,46.9,M,,*47
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
GGA          Global Positioning System Fix Data
123519       Fix taken at 12:35:19 UTC
4807.038,N   Latitude 48 deg 07.038' N
01131.000,E  Longitude 11 deg 31.000' E
1            Fix quality: 0 = invalid
                          1 = GPS fix (SPS)
                          2 = DGPS fix
                          3 = PPS fix
                          4 = Real Time Kinematic
                          5 = Float RTK
                          6 = estimated (dead reckoning) (2.3 feature)
                          7 = Manual input mode
                          8 = Simulation mode
08           Number of satellites being tracked
0.9          Horizontal dilution of position
545.4,M      Altitude, Meters, above mean sea level
46.9,M       Height of geoid (mean sea level) above WGS84
                 ellipsoid
(empty field) time in seconds since last DGPS update
(empty field) DGPS station ID number
*47          the checksum data, always begins with *



以上說明應該比較清晰啦,其他語句也是一樣的,請參考這里。
這里面,有我們需要的經緯度信息和海拔高度,4807.038,N  01131.000,E  545.4,M  只是,這表示方法是不是跟我們上面不同? 小伙們,自己想辦法轉換吧~ 如果需要查看C語言版本的,在program v1.0\RT-Thread_1.2.0\bsp\stm32f40x\user\thread_gps.c 里面找到 GPS 其中幾個常用語句的解碼函數。
4. 其他說其實這種方式并不好,原因是我的飛控沒有掉電保存能力,經常記錄到一半,沒寫文件尾就掉電了,導致得自己手動編輯文件,加入文件尾。
另一種方法,是在飛控中直接記錄所有 GPS 輸出的 NMEA-0183 語句,等回到電腦上,再用腳本語言工具,例如 python 來轉換成 .kml 文件。 只是,占用空間會比 .kml 本身大很多,并且增加了一個轉換的步驟,略麻煩。
再另一種,我記得 google earth 有直接導入 NMEA-0183 的能力,具體如何實現,各位自行腦補。
.kml 文件是很神奇的,除了記錄路徑,還能做很多很多的事情。具體請參考文章剛開始提供的 .kml 開發指南。英文在這, 中文在這

與飛控無關 - 記剛開始弄飛控那會兒(上)
記錄的是我的飛行器學習的黑歷史,主角是一臺類似 阿凡達里面的雙槳 VTOL (Vertical Take-Off and Landing)飛行器的詳細制作過程。錯字連篇,雖然爛尾,沒有但是..
版權所有,轉載請看


先放張圖嚇嚇人,以下原文

項目名稱:AUTO FLY SYSTEM
項目編號: FL project 005
目的:制作一個能自動導航并自動進行姿態調節的無人機控制系統
要求:
1.使用慣性導航和GPS進行導航
2.能自動進行姿態調節
3.能手動/自動飛行隨意切換
4.有實時遠距離狀態/控制數據傳輸能力
5.實現自動航線飛行/航點實時切換
6.實現定點自動起飛/著陸
7.地面控制站支持
8.功能模塊掛載
整體思路:
通過慣性導航和GPS等實現飛行器自動控制和導航,并進行實時修正姿態,接受地面控制等
預計用時:6個月
開始時間:2011年1月20日
結束時間:
硬件清單:
預算:2000RMB
邏輯圖解:   
首先,這是個大項目,其次,我有信心完成它
涉及的新知識有:
新的單片機C8051F
穩定的電源
AD轉換
IIC接口
SPI接口
UART接口
上位機串口編程
上位機Labview編程
模擬輸出傳感器
IIC數字傳感器
PI算法
導航算法
空氣動力學
材料科學
無線RF模塊
GPS數據格式
在初期,我打算用洞洞板先把硬件組裝出來,然后寫軟件一個個調試。畫板我還不會,順利的話等到下學期應該定型可以做板了。
個人精力有限,對于這個AFS(Auto Fly System),作為一個C語言只寫了1000行的初級入門半愛好者來說,姿態算法才是最有挑戰的東西。所以寒假著重在算法上面花心思。其次,我是個電子盲(在一個唯一不學電子技能基礎的專業的大學新生),所以傳感器,能買到模塊的就買模塊的。買不到就盡量買數字的了,比起模擬的數字的外設少很多。

Auto Balance Module
MCU:C8051F410
使用內部晶振,工作在49MHZ
傳感器:
1三軸模擬輸出陀螺儀
2三軸模擬輸出加速度傳感器
  以上采樣率500HZ
3數字三軸電子羅盤 IIC接口 采樣率50HZ
工作周期
500Hz
2HZ
PWM信號輸出周期50HZ
輸出接口
八通道周期50HZ的PWM信號
C8051F410的高速SMBus(IIC)
工作周期概述
并行周期1:500HZ
1轉換三軸陀螺儀數據,取三軸加速度數據做融合,計算出短期的調整量。
2等待定時器中斷
并行周期2:50HZ
1將30次短期調整量移動加權平均為 輸出量,乘上速度系數,設定好PWM參數
2根據上次傳回的PWM數據,設置好定時器,輸出信號
3 取電子羅盤數據50次平均后,校準陀螺儀中立點。
4根據電子羅盤計算四軸姿態并保存。
5向AFN傳輸數據(航向,姿態…)
6接收AFN數據 設置飛行數據(速度參數…)
并行周期3:2HZ
1在0.5秒內對50HZ平均輸出量進行計算平均,得出長期調整量,然后積分加入到輸出量積分處
2等待定時器中斷

Auto Fly Navigator Module
MCU:C8051F410
使用內部晶振,工作在49MHZ
使用外部晶振作串口基準 11.0592MHZ
外部模塊:
1 PPM解碼模塊接收機(真討厭!)
2 氣壓傳感器
3 GPS模塊 接口UART 38.4Kbps 取樣4HZ
4 Auto Balance Module 接口SMBus
5 RF905 2W模塊 SPI接口
工作順序概述
1.接到ABM輸出數據
航向,俯仰角,傾斜角…
2.回傳ABM上一次的數據和指令
飛行模式(起飛,著陸,左轉,右轉,爬升,降落),PPM信號,其他需要PWM參數
3.開始轉換PPM數據
根據ABM傳回的數據,結合GPS坐標,航標和氣壓計,計算下一個航標的相對角度和高度,或者根據PPM信號進行調整。形成新的ABM回傳數據。
4.寫入SD卡,并通過Zigbee傳輸回數據地面(后來決定用RF905 433mhz)
5.等待下次ABM的數據
2011/2/12好吧,這么多天,我一直沒寫這個,其實…真不是我偷懶。從1月29號到現在,我已經買了陀螺儀(LY530,LPR530),加速度計(ADXL335),磁阻傳感器(HMC5883L),GPS模塊(LEA-5Q),C8051F單片機下載器(EC6)…看上去差不多了是吧?錯!最最最關鍵的單片機(C8051F410)沒買到!淘寶商家個個都回家過年去了!我哭…不過這么多天來,我一遍又一遍地看了各個傳感器的datasheet(都是英文的,想哭TAT),查了很多各方面的資料,泡飛行器的論壇,看各種各樣的算法。(但是感覺什么都沒學)
好吧,沒事,只能先YY載體(飛機)了。

今天之前的文字是最初步想法,大概就是做一個慣性導航和GPS,磁阻傳感器等配合而成的一個包括姿態控制和飛行導航的系統,并在載體上實踐。
最初打算用固定翼模型飛機作為載體。選固定翼的原因很簡單,我從小就接觸固定翼的模型飛機,從繞橡筋,到后來的電動,從買來的商品機,到后來完全自己做的飛機。我雖然很久不玩模型飛機了,但是就制作能力來說,我還是很有自信的。給我兩個小時,我就可以完成一臺基于KT板的載體飛機。除了制作,我對固定翼飛機的飛行特點和控制方式都有很詳細的了解。這些都是我一開始打算把固定翼飛機作為載體的原因。
但是,我必須得放棄固定翼了。第一,我忽略了實驗場地問題,固定翼飛機飛行需要太大的場地,只少是一個足球場的空地,即使能在學校的足球場飛起來,也因為離自己太遠不好觀察和調整參數。第二,GPS不能提供足夠的精度供固定翼使用,幾十米的動態誤差足夠飛機撞體育場主席臺了。即使飛起來了,想讓它找準位置降落是很困難的。除非我能使用到DGPS技術,我現在還不太了解,理論上是可行的,我買的GPS模塊也支持DGPS,等我有時間看過以后再說吧。
除去固定翼,我第一個想到的是四軸飛行器。我有做這個AFS(Auto Fly System)的想法也是因為看了其他人做的四軸飛行器例子。四軸飛行器,資料多,姿態算法都有現成的,而且控制原理最簡單,又是對稱的飛行器,沒有復雜的控制算法。但是說真的,我自從第一眼看見四軸飛行器,就不喜歡它的樣子,有點丑,有點突兀。我不是很愿意做這個。

上圖是國內玩家自己DIY的四軸飛行器
另一個想法,是《AVATAR》里的直升飛機,樣子很酷很酷,在哈利路亞這種低重力的星球上,它的兩個涵道風扇顯得并不是那么不合道理。之前幾天我一直在思考,那么另類的飛行器,姿態檢測和控制算法會不會比較復雜?我結合四軸飛行器和AVATAR的直升機,經過分析,得出一些結論:這兩者之間,姿態檢測是完全一樣的,機體的傾斜,加速度的檢測都差不多,控制算法上,AVATAR直升機和四軸飛行器在橫滾控制上是相同的,但在前后傾斜控制上不同,但也不是很復雜。其次,AVATAR直升機相對于四軸有一個優點,重心比較低,這樣,調試會變得簡單許多。我看過許多四軸飛行器的視頻,不少在飛行時會發生振蕩,選擇適合的參數顯得比較困難。
結合這幾天的分析,我決定選擇AVATAR直升機作為實驗載體。同于四軸的姿態檢測,資料多,做起來會比較容易,相似又有不同的控制算法,對于我來說也是一種新的挑戰。

AVATAR直升機
主體結構,有兩個方向,玻璃鋼和桐木。桐木是模型飛機里經常用到的,主要特點是輕,比輕木稍重,但強度大于輕木,小于松木,而松木最重強度最大,一般用于支撐結構上,比如翼梁。淘寶上有提供激光切割非金屬材料的服務,我計算了一下,切1平方米3mm厚的桐木板大概需要100元,還可以接受吧。玻璃鋼的話,又有兩個方向,自己做(環氧樹脂+稀釋劑+玻璃纖維布),或者送去PCB打樣,至少1平方米(這個價格估計比較杯具)。自己做呢,初中的時候我收集過許多資料,環氧樹脂也買了,但是當時不知道怎么買玻璃纖維布,一直沒動手做過玻璃鋼,比較懸。固化劑那個濃烈的氨氣味,不是一般人能承受的,不可能在宿舍做了,比較麻煩。但如果能用玻璃鋼做,效果當然是最好的,我繼續糾結ing。
另外,碳纖維不用考慮,完全不用考慮,我考慮不起,不解釋。(好吧,剛剛我淘寶了一下,看來碳纖維也不是什么難事,有碳纖維布賣,如果做法跟玻璃剛差不多的話,就簡單了?磥砦业乃枷胍恢币詠肀惶祭w維這個詞嚇得不輕。但是價格還是稍微悲劇,是玻璃纖維布的15倍)
好吧,再更新一下,剛剛又淘寶一下,發現有成品的玻璃鋼板賣,價格還行 1mm厚的,50x50cm 20元。材料決定用玻璃鋼了。
我查了很多資料,在動力選擇上,最終決定用兩個KV980 A2212的電機,配上1047的正、反螺旋槳(這些數字代表啥自己百度一下,我要是全部解釋完,我都可以出書了),左右兩邊各一個。電子調速器,選用兩個I2C總線控制的25A四軸用無感電子調速器。電池我選擇 11.1V 2200mAh~4000mAh 10C以上的聚合物鋰離子電池。旋翼伺服舵機使用兩個扭力1KG/cm以上的50Hz PWM信號控制的金屬齒輪舵機(剛剛看到這幾年數字舵機已經普及了,但是我查不到數字舵機的通信協議,如果普通PWM舵機速度跟不上,也許會自己做舵機的驅動板,改裝普通舵機,用自己協議,I2C總線控制)。
好吧,剛剛又查了很多資料,稍微有點失望了,數字舵機看來也不是那么數字的,只是把普通模擬舵機的50Hz PWM 信號速度加快了而已,250Hz以上。不管了,至少不用費那么多心思再去研究一個新的協議了。但是如果速度精度跟不上,不排除自己改裝成I2C總線控制的舵機的可能。
根據電機的測試(希望這個數據是真實的),這個動力系統懸停效率最高的輸出為兩個電機各輸出 480g 的推力(此時輸入功率為54瓦,力效率為8.77g/W),兩個電機加起來一共960g推力。整機質量最好能在1000g以下。懸停時間(2200mAh的電池)可以達到12分鐘。
粗略計算一下:
電機+電調+槳 = 80x2=160g
電池(2200mAh)= 190g
伺服舵機 = 17x2 = 34g
機體結構(玻璃鋼)= 250g
AFS主控電路 = 100g
連接線 = 50g
總計784g
這個估算~嘻嘻,很樂觀嘛…
這套動力系統滿功率300w時推力可以有1600g以上。看來有得玩了…希望不是我少算了什么~哈哈,要不然就強大了,推重比達到2以上,可以掛上跟自己本身一樣重的掛載(外掛800g以上的負載)。不過此時,只有 4分鐘的懸停時間,少得可憐。
哈哈,以上純屬無聊了YY…能不能做好姿態檢測還是個未知數,我的能力就那么一點點。
好久不說話了,今天廢話多了點
2011/3/5距離上次更新已經差不多一個月過去了。現在是開學的第二周的周末。說一下,我第一周主要還是買東西,買了很多電子元件,還買了一個最便宜得焊臺(60多RMB吧,發順豐發了30RMB..其他快遞就不敢用了)
其實,當我發現,我想要什么,那箱電子元件里就有什么的時候,也就不在乎300RMB買來一堆零零散散的垃圾樣的東西了~
我想,今天可以發布這篇文章了,雖然都還只是在硬件上焊焊芯片,軟件上寫寫串口驅動,但是我想,這個星期我學到的已經很多很多了,繞了不少彎路,有必要記錄一下。當然,并不是說這個項目到此為止,更新會持續下去。
首先說說,這是我接觸的新的單片機。我現在大一下學期,接觸過的單片機只有STC 的1T系列的。說是接觸,也只是接觸一下而已,沒用它做過什么像樣的東西。大一還沒開單片機課,估計要學也是學最標準的8051、8052而已。雖然沒“接觸”過,我想應該差不多吧。這回是C8051F410 這片是我在新華龍的C8051F選型表上經過很多對比選出來的。
LQPF 32的封裝
50MIPS的速度
5V的IO口
200kbps N通道 12Bit的AD   
各種串行接口都挺全的(UART I2C SPI)
很合適我的項目。
要說這是51單片機,我就郁悶了,根本不止51那么簡單,說完全兼容標準51是不對的,至少兼容沒有STC做得那么好。還有一些很不可思議的地方,比如默認開啟看門狗!我在這里郁悶了2天的時間,才找出原因。當然,他這么做是 有道理的,我不會用罷了
另一個問題是,焊接的單片機,芯片的時候,堅決不要用普通的非恒溫的電烙鐵了,我為此廢掉了一片C8051F410 14RMB就這么飛走了,還有我兩個小時的青春…
不知道為什么,芯片在下載程序的時候只要接上外部晶振,就會出錯。根本識別不了單片機,這點我也郁悶了4天,直到我的焊臺到了,用飛線焊好第二片單片機的時候,沒來得及焊上外部晶振,才偶然間連上下載器了。
外部晶振是11.0596MHz的,打算做標準UART波特率發生器,F在的結論是不需要了,內部晶振的精度勾了 0.15%的波特率誤差,傳送少量字節的時候完全不會出錯(我現在一次傳送6個字節 (5位數字ASCII+1位換行))。
再說說軟件,軟件也有一些奇奇怪怪的東西,比如開了UART0中斷后,TIMER2的中斷就廢掉了。我了個嚓!
現在已經寫了300多行,實現了系統周期計時,9通道AD轉換,UART0發送16位的變量,16位變量轉ASCII碼…
好像現在能做的也只有這些了。
另外,大贊一個,C8051F的Config2真是太好用了,各種初始化函數,“一鍵”寫完,Just copy and paste.計算波特率,通信速率的,很直白明了,各個設置之間關聯也很緊密,不需要考慮太多。波特率在Datasheet上有,注意一下如果用了時鐘乘法器的話,乘一下就好。

一堆堆的電子元件,花了我300RMB

這個星期奮戰的環境…比較簡陋。等到下學期我們學院解散了,我們進山里的新校區后,環境會好很多。

新買的焊臺,什么牌子不記得了,挺便宜的。60多RMB ,來源淘寶
這好像是那種高頻的電烙鐵,通電10秒鐘就可以焊接了,電源在柜子里,桌面上實在是沒位置了。

這段時間,我一共飛了2片,可見我的焊工有多么爛,每只管腳我都測試過沒短路短路后我才敢上電的。飛一片要1個多小時,我了個嚓!

左邊的是UART2USB,右邊的是433的UART透傳模塊。(這東西是高一的時候買的圓夢小車上的,那車在我手里從未自己跑過,焊H橋出了問題。我就是在這里接觸STC的單片機的,是我第一次認識單片機)。

這東西320RMB 不多說…沒能力焊接只好添錢,賣家說他自己焊壞了很多個了,這價格是加上焊壞的一起的。
三軸加速度計 ADXL335
三軸陀螺儀   LPR530 + LY530
成本最多120RMB

XP虛擬機上的結果,很不錯~

現在的成果,為了今后焊接更簡單,我昨天花了1個小時用NOKIA n81的爛屏幕DIY了一個USB“無影燈”。
具體看FL project 006 usb light

補光效果相當好的。昨天晚上的照片
(照片丟失)
今天早上的照片
(照片丟失)
我很滿意~除了多占用了一個USB口。接下來有心情的時候再改裝吧~酷酷的補光燈
今天就先到這里吧~
下一步就是提取傳感器信息,然后開始寫姿態代碼了,給自己加油~哈~
2011/3/7這兩天主要是軟件上面做,嘗試了一下編寫上位機,Labview卡在下不到VISA上,(剛剛才下載到,還沒安裝)試了一下VC編串口的上位機,用的是C語言,但是還是有很多看不懂的。大蔥說VC6要在XP的虛擬機上開,有點糾結。VC還是很有難度的(當然對于我這種懶人來說)。按著上的《從零開始學VC系列教程 一.信息顯示實驗》,做了一個串口接收程序,但還是不太明白,代碼都是別人寫的,自己看得也不太懂。
還在糾結VC還是Labview的選擇。
至少還不急,也許不急吧。
現在分析數據可以用串口助手接收數據,然后matlab和Excel做表似乎都很方便。就先不糾結上位機用什么編了。
程序已經寫了500多行,最大的進步就是把串口收發和ADC轉換做成了中斷的方式,這樣就可以留更多的時間放在姿態算法的計算上了。
串口中斷收發程序是在網上找的,修改了很多,精簡了一點,緩沖換成32字節(兼容以后無線數傳,每幀字節也是32個)就放到我的代碼里,代替了原來的串口收發函數,用起來很好~只是要做成指針的形式,指向一個數組,還要知道長度,在中斷里循環發送。不是很直觀,但也很好理解。
于是我也模仿這種方式,在GetSensorData()函數里,只寫了一個語句,ADC0BUSY = 0;用來調用ADC的interrupt函數。中斷函數第一次只選擇一個通道,然后開始轉換。第二次就設置下一次的通道,把上一次轉換的值付給所需的變量。一共轉換9次,調用interrupt 10次。
期間調試了很多,還遇到輸出都是00000的情況,原因是在一個八位變量里左移了8位(相當于乘以256)。后面換成這樣的語句后就解決了
1
2
AccAdX = ADC0H;
AccAdX = (AccAdX<<8) + ADCHL;



要注意的是,上面的小括號一定要加,不然還00000.巨囧。
這樣以來,UART0 和 ADC 都換成中斷的形式了,這就留給姿態算法更多的時間了,至少這500多行里只有一個 while(TF2H != 1){;}  用來判斷是不是達到系統周期定時4MS了。沒有把時間浪費在不該浪費的地方,我很欣慰。
昨天做好UART 中斷,今天做好ADC 中斷。繞了很多彎子,不過總算現在都工作得很正常了~很HAPPY

自己寫的(其實是抄的)代碼,用我的單片機發送的AD轉換結果,好像很正常.也許吧..呵呵。至少收到數據了。有點點曙光~
總結到這吧~
希望姿態算法能寫得很順利~
2011/3/26額…很久又沒更新了,怎么說,不是我懶(其實也懶),是有些問題實在太糾結了。直接說正題好了。
嘗試寫了一些姿態算法,寫出來,思想并不難,但是必須先做好底層的東西,比如通信。于是姿態算法就先不做了。
最近一直都在忙一個東西,一個小小的外設,可能在晶圓上面它占用的面積也就跟一;覊m差不多,但是實在是讓我覺得糾結。不過到今天總算差不多弄清楚了。這個東西就是 C8051F410 的硬件SMBus總線。
這個SMBus不是真正的SMBus,我覺得叫做加強版I2C比較合適。第一是沒有速度的限制,速度可以達到系統時鐘的1/10,如果是100MIPS的C8051F,就是10MHz了很夸張的…他有I2C沒有的功能,低電平超時檢測等等…功能多了,帶來的問題就是配置麻煩。
我是第一次接觸這類串行總線,著實讓我郁悶了好久(一個星期)。一開始我去看I2C的總線規范,并不是很難,用到的就只是最簡單的幾種時序。模式很簡單,就是4種(主機發送,主機接收,從機發送,從機接收),思路很清晰。英文文檔里,主機叫 Master,從機叫Slave…字面上解釋,比中文的主、從要深刻得多,主人和奴隸…
要做這個,我第一反應是上網找現成的程序,邊看邊改。很快我找到了一個,在一個網易空間里的(做技術的用網易空間的人好多哦)。馬上復制粘貼,編譯了一下,發現不行,有一個寄存器中的值名字叫 “AA” 我找了C8051F410.H ,根本沒有這個值,我開始覺得有些不對經了,然后我又找了其他的地方,發現配置寄存器410中是SMB0CN,而程序里是SMB0STA…越來越蹊蹺了,后來看了看文章發表的時間,我才反應過來,原來我落后了。文章是09年寫的,好像是針對 C8051F9XX 寫的,因為9xx 的 datasheet 里才有那個寄存器,我在書里看見過。而 9xx 的 SMBus 跟 410 的不同,9xx 的是簡化過的,而且又增加了一些功能,比如地址自動檢測等。
于是,我只能自己看文檔自己寫程序了,看了很久,但是不懂,又是后來,才反應過來,去找 C8051F 的example 程序,在里面找到了 SMBus,純英文的注釋,不過好過沒有…注釋寫得很簡單很清楚很明了…于是連我這種英文垃圾都能看的懂;撕脦滋斓臅r間去研究他的例程,得到的結論依舊悲劇。SMBus 文件夾中一共有6個文件…
翻譯過來分別是:
單主機,單字節傳送
單主機,多字節傳送
多主機,單字節傳送
多主機,多字節傳送
從機,單字節傳送
從機,多字節傳送
我不明白的是,為什么偏偏。。偏偏要把功能都分開呢!
我要的是一個能傳送多個字節,又做主機,又能做從機的程序…
最后我選擇在多主機單字節上面改。
于是又花了好幾天,到現在的樣子。(省略過程幾萬字的感慨)
結構已經基本明了,函數寫完了,編譯出來沒有錯誤,只差上機實驗了。今晚有點累了,明天是周末,明天再弄吧。
其次。。我找到了合適的機架~喔耶耶
機架一直是我一個比較郁悶的問題。怎么說呢,在我自己做的話,不是不可能,我有這個能力,之前的打算就是買玻璃纖維板,然后鋸成條,再用環氧樹脂膠把條粘貼成立體結構的機架,原理可行,有點麻煩,我不是很愿意做。
今天上英語課的時候,我突然想到,既然我做的也挺想直升機的,為什么不能直接利用直升機的機架?改一下就可以啦,電池位置也可以很方便地調整,重量也可以得到控制,最主要的還是,我不用動太多手~
于是上網查了一下,這個才148元,還是碳纖維的,決定要這個了。(還挺帥哈~)

其次,上位機的問題繼續糾結住。
又經不住拉框框的誘惑,打算去買本VB的舊書學習學習。
今天就到這里吧,好累。
2011/3/27知難而退的好孩子~VC6我搞不定,換個最簡單的 Basic 語言弄弄。反正“黑貓白貓,能抓到老鼠就是好貓”搞定一件事,用最簡單的方法不更好么?
花了兩天的時間,把 Visual basic 學了個大概,去舊書店買了一本書(好像昨天是什么地球日來著,提倡7點半開始逛燈一個小時?很形式,到處發傳單。我覺得,提倡買舊書更能保護環境…)書是基于,VB6.0 的,這里我糾結了很久。之前我用 VC6,在 64 位 WIN7 里面編譯不了,只能開虛擬機弄,F在心想著,也許用 BASIC 語言,就可以用 VS 2008 了,那就意味著更智能的編譯環境,和更加方便的編譯條件…
但是一切都想得太完美了,導致我又繞彎彎了,關鍵就在于書是 VB6 的,我的是 VS2008,這里面的 Basic 語法有一點區別的。具體有多少區別我不懂,我才接觸BASIC 兩天而已。但是至少我用“組合框”的時候,根本賦值不了。有必要的話,我再去買一本 VS2008 或者VS2010 的書吧~
后來我還是得回到 XP 虛擬機里面…還好我寒假果斷給電腦換了 7200 轉的硬盤和 4G 的內存,不然估計得卡德悲劇。
Basic 跟 C 其實差不多…但是也差很多。其實在我眼里,他們的區別感覺就是,C 更底層,Basic 更應用,C 區分大小寫,要注意內存,Basic 不區分大小寫,內存可以不管。我對 basic 還不了解…別拍我..
Basic 里弄串口還是很簡單的,MScomm 控件就可以,挺方便的。今天的成果,已經可以實現接收串口數據了,接收到的是加速度傳感器的值,已經在單片機內轉成 ASCII 了。發送沒測試,應該不成問題。
下面那一大塊空白是留作曲線繪制的時候用的,不知道有什么好的圖形控件,實時觀察傳感器和參數的曲線。

比起前段時間用VC來說,VB感覺起來是自己寫的,上次的VC更像是抄的…也許以后都用VB開發上位機了,功能夠就行,方便更好…
VB很方便啊
2011/3/31待會就是愚人節了
AFN上位機第一版終于做出來了,現在實現的功能是實時顯示6軸姿態傳感器的數據,并畫成實時曲線圖。
看圖吧,累死了。從五天前,從剛剛接觸 VB6和Basic 語言,到現在做出第一版簡單的數據分析,繞了好大的彎彎,不過到現在總是是有了點點希望。宿舍快斷網了...先傳照片吧。

2011/4/1愚人節~
今天是母校南寧二中的校慶。。
聽到何偉萍校長病逝的消息..心情有點沉重。我對她的了解不多,她是我們高三的時候才上任的。百度一下,才知道她生前的獲的很多榮譽,是個值得敬佩的人..
昨天寫上位機寫得太匆忙,現在做一下補充說明
整個上位機是基于VB6寫出來的,Basic 語言入門真的很快很好很簡單。也許對于我這種又懶又沒人教又不努力的人來說,是最好的選擇了。
之前嘗試過了LabView,VC6。labview 是我在 論壇上的上位機板塊找到的,然后百度一下,做工控軟件似乎很是簡單。用的是G語言,圖形化的語言,怎么說,我每次看到都會小小地糾結一下。不習慣,看不懂,然后去嘗試看labview教程視頻。越看越反感,覺得框框還不如代碼清晰(這個僅是個人意見...別敲我,特別是我這種傻瓜,不值得你敲~)。labview 之后,大蔥推薦我去看論壇上的一個帖子,講的是VC上位機編程的(上文提過),我按照帖子做,是做出了一點成果,不過當時我不是很有耐心去看,也不知道是怎么辦到的。其次我不喜歡VC6的代碼編輯界面,至少得多點“色彩”吧?(單片機里我一直用 keil4 自己分配關鍵字的顏色,代碼會清楚很多)。還有就是,VC 生成的是 C++ 語言的.....
圖表控件是 teechart 4 pro 破解版的....
Text框顯示的是接收到的傳感器的值,空格做分隔符。
下面的淺藍色條條是實時的三軸加速度(Acc),三軸陀螺儀(Gyro)的實時顯示,用進度條來作指示,值得范圍是4095~0,加速度計輸出電壓是0~3.3V,我的AD是0~2.5V,所以整體高了一點。圖表是自動往右平移的,網上找不到方法,只好自己摸索。方法是這樣,把橫軸的最大值設置為自動,然后把 最大值減去一個定值,賦值給最小值 就可以了。觸發用的是定時器,觸發間隔是20ms 刷新率50HZ,我在虛擬機里開,CPU占用有點高了,達到35%這樣...
有了圖表觀察起來就方便多了,自動更新數據,用起來很不錯~~
軟件還有點問題,右邊的圖例錯了,應該是
AccX 紅
AccY 綠
AccZ 藍

這是一個問題,Gyro的三條線從剛上電開始,是一直下降,大概持續10秒后才能穩定在2048左右,很蹊蹺。

從這里可以看到很清楚的 陀螺儀和加速度計之間存在聯動,有了這點設計上就會很方便了。

2011/4/22好久好久沒更新了捏...
因為最近走了很多很多路,換句話說是很多很多彎路
姿態積分已經開始寫了,飛機硬件已經開始做了
反復看了 論壇 上面的帖子,我忽然意識到一個問題:他們都是老手,他們都是高手,步驟一般都是先做好硬件,然后畫好電路板,然后送去打樣,然后,然后的然后!才開始寫程序,寫代碼。
只有我這菜鳥發癲發癲的先寫軟件,寫得差不多了,不管怎樣陀螺儀就是有點點漂移,加速度怎么樣都是那么準,姿態積分怎么調都不能再 0 附近...
看了多少姿態算法,看了多少帖子,試了多少自己的方法。才意識到原來是沒有硬件調試,調試個P啊...你把一塊電路板傳感器放那,他能按你的程序作出反應咩?我發現我就是傻X。
在 C8051F410 的 SMBus 上,徘徊了6天,最終發現是飛線有管腳虛焊,這堅定了我下一步一定要學protel 畫板去打樣的信念。(省略1000字感言)
今天早上上完課后,就回到宿舍開始鋸玻璃鋼。我有3種厚度的玻璃鋼,2mm 1mm 0.5mm
2mm太厚,1mm太薄...唉!
我放棄了電磨的方式,電磨太重口味,弄得宿舍一股消毒水的味道,試過在水里切割玻璃鋼,但卻又多了四濺的水
于是手工+銼刀,慢慢磨,慢慢磨....于是成這樣了。。。

鋸子

單條的重量,一共需要4條,作用以后解釋
(皂片丟失了。。)
機架的重量,最終應該在200上下
這重量相當于除了電池外的所有東西了...很樂觀

當然上位機也改了,傳輸改成變量直接傳,加了加法效驗,不需要轉換成ASCII了
加了CPU 占用率,實現的方法就是在等待定時器達到系統周期之前,累加 SystemIdle 這個32位無符號變量的值。最大值是不通信,不做運算的時候記錄下來的,然后用又計算又通信的值除以他,得到一個相對的空閑量,再變換一下就成了占用率了。雖然是相對的,但也很夠用很直觀了
看來我低估了這顆 C8051F410 了, 現在計算的東西已經有最終的大約 1/2 了,然而才占用了8%。49Mhz 50MIPS,真的不是蓋的。
以后可以把系統時鐘提高到500HZ哈哈

2011/4/24今天把機架裝起來了,用的是504膠水,看上去很不錯哦,挺堅固的,等明天完全凝固了,就開始鉆電機空了,之后就可以上電機啦~~
全部是手工做的,用銼刀等工具,擴孔,從2mm大的空擴到13mm,銼刀一點一點銼出來的。弄得我手上面都是傷。以后打算用protel畫PCB然后送去加工好了,像他們做四軸一樣,多方便啊。300塊我都愿意了…自己磨太痛苦了。
今天主要放圖片哈~
正在曬太陽…等膠水干的日子,也有點點無聊,下面那兩個支架,上面還用纖維膠帶綁著…定型,不然就白費了
(皂片迷失了。。)
機架部分特寫..

軸承直接用鉗子錘進去,然后串上鋁棒,定好位,馬上上膠,大概2個小時后就固定好了

支架的重量,有點重了…如果能用PCB做好,就好了,可以在上面打洞,而且也不需要那么厚的。這個2mm有點夸張了(因此我的手…),其實1.6mm這樣應該剛好合適了。
(照片丟了。。)
加上6mm * 250mm的鋁棒后的質量

組裝上去啦,好帥呀~哈哈 208g 是已經加了兩個舵機在上面的重量了,還是很令人滿意的~

轉軸特寫~很流暢,每一邊2個大軸承,沒有虛位,膠水很給力,缺點是比較重,玻璃鋼難加工!





與飛控無關 - 記剛開始弄飛控那會兒(下)
記錄的是我的飛行器學習的黑歷史,主角是一臺類似 阿凡達里面的雙槳 VTOL (Vertical Take-Off and Landing)飛行器的詳細制作過程。錯字連篇,雖然爛尾,沒有但是..
版權所有,轉載請看

如果沒看過上半部: 與飛控無關 - 記剛開始弄飛控那會兒(上)
2011/5/8又是很久很久沒更新了,覺得有點對比起誰…最近做的事不算多,調好了單片機之間的 SMBus 通信,又做好了硬件的控制系統。
照片沒拍什么,所以今天更新就只是文字的啦~盡管看我廢話在這里。
SMBus 的調試花了很長時間。我本來打算每一幀發送32字節的數據,后來發現不是很夠,雖然有很多數據是不必須發送的,但是如果不發的話,就利于調試。我主要是通過串口發回的數據進行調試的,這樣就糾結了。如果只發送必須的數據,32字節除去幀頭2字節,效驗2字節,還有28字節可用,壓縮一下,完全夠了。
后來為了方便調試,還是決定在原來的基礎上多發一幀的數據,于是每個周期50Hz交換的有效數據就有56字節,夠了…可以把完整的傳感器,CPU占用等數據完全傳輸回去了。可以做到實時不丟幀。
但是,就在這里出了問題,我查了很久,后面才查出來,原來是上一個數據還沒發送完,緩沖區(32字節)不夠大,后來解決了,等發送完了再存進緩沖區就好了。
硬件上不知道怎么固定舵機…繼續糾結,沒有螺絲釘。誰告訴我最近哪里有小朋友玩的四驅車專賣店…
暫時用回形針的固定了一下…不是很好捏
剛剛寫了PPM信號的解碼函數,用定時器3來測時間,直接讀取定時器的寄存器,這樣做行不行,我是一點都不懂,哎哎。先設置成高電平觸發,PPM信號直接接到外部中斷1,在中斷里取定時器3的值。然后切換到低電平觸發。如此反復,就可以實現高低電平都產生中斷,通過判斷時間的長短,還可以分辨出引導段。通過測量不同的高電平寬度,就可以計算出每一個通道的PPM值。
接下來還要寫 50HZ 的 PWM 信號,用來驅動舵機的,應該可以驅動6個通道的舵機,我先做4個通道的 PWM 吧,其實AFN模塊還有蠻多的管教可以用的。
PWM 還需要一個定時器…現在似乎不夠用了,還有一個超聲波測距模塊需要定時器。
AFN:
Timer0 空閑
Timer1 UART波特率
Timer2 SMBus波特率
Timer3 PPM解碼
ABM:
Timer0 提供整個系統的時鐘,ABM 250Hz AFN 50Hz
Timer1 UART 波特率
Timer2 SMBus 波特率
Timer3 空閑
現在整個系統,還有2個空閑的定時器,還有超聲波和PWM需要定時器,這樣的話剛好夠用…如果UART和SMBus用同一個定時器的話,整個系統還可以多出2個定時器。不過這樣SMBus速度就太慢了,只有76k,好像也還好…實在不行的時候還可以這樣做。
Timer3實在不是那么好用,因為不能位尋址,有點郁悶。
2011/5/14今天是周六,最忙的一周終于過去了。上一周,我們一共只有3節大課不用上…累死了。周四晚上進山陪舞蹈隊彩排,周五晚上進山去看舞蹈隊表演…不過還好~女孩子們很給力,得了個二等獎!
周四下午我的“新的”二手鏡頭終于到了,鏡頭是DT16-105。好難找啊…賣家戀戀不舍地幫我包好,寄過來…那包裝實在是..一句話:從3樓砸下去里面的雞蛋都不會破…拿到鏡頭直接得跟舞蹈隊進山彩排了,第一次拍舞臺,感覺好爽~新的鏡頭容易引人注目,總會有人問我價格,當然,不同的人我只能說不同的價格,大概幾百塊到二手價,我都說了。
話題岔開太多了…呃…
回歸正題,要說什么呢,雖然課余時間少得很,但是這一周還是做了很多東西。八路舵機驅動器,一次做成功,完美不抖舵,八位分辨率。PPM 信號解析還沒搭硬件,苦于沒有示波器,還有就是發射機的八顆電池我實在懶得去買。但是這個周末肯定要搞定 PPM 信號。還有就是把電調焊好了,但是還沒敢接上電。焊接功率器件真是費焊錫,還好我5節回家又掰了一大卷過來…并且,找到充電器用的12V電源了,電源來自我高二在“恩山論壇”買的一個路由器(刷了WRT-DD系統)。
有一個比較無語的地方是,如果要 UART 和 SMBus 公用定時器,SMBus 就會慢得出奇。UART 要工作在 9600或者 38400 下的,因為 LEA-5Q 這個 GPS 模塊只支持這兩個波特率。GPS 有 SPI 接口,只是因為相位這種我根本就很反感的東西,所以不打算用 SPI 接口。即使是 38400bps,算下來 SMBus 的波特率才2 5600bps,傳完 64Byte 的數據需要 20ms,我 AFN 的工作周期都有20ms 了。9600bps 更不用考慮了。所以我還是打算讓 UART 和 SMBus 分開各自用一個定時器產生波特率。
如果把無線通信放在ABM里,無線模塊如果能做到11520bps,SMBus 的 ABM->AFN 方向傳輸速度也有差不多 70kbps,這樣的速度還是可以接受的。
這樣一來,如果把舵機驅動放在ABM上面就會好一些,因為還有一個超聲波測距,而定時器里面唯一能48分頻的定時器是Timer0。
現在定時器資源利用改成如下:
AFN:
Timer0 :
Timer1 :UART波特率
Timer2 :SMBus波特率
Timer3 :PPM解碼
ABM:
Timer0 :八路50HZ PWM信號輸出
Timer1 :UART波特率
Timer2 :SMBus波特率
Timer3 :提供整個系統的時鐘,ABM 250Hz AFN 50Hz
以后需要改的時候再改。
我覺得無線通信如果能放在AFN會更好,只是現在還找不到更好的解決方法,不行的話就只能放在ABM了。這樣一來,模塊之間的分工好像就有些不符合原先的意愿了。
有一個小問題,就是ABM的引腳似乎不是很夠用了,如果放八路舵機控制器,管腳就全圓滿了,AFN還剩一堆,F在剛好夠用,就這樣了。先做6路舵機控制器,剩余兩個,一個做工作指示,另一個留來增強ABM/AFN之間的SMBus通信可靠性,主要是怕總線死機,而且現在應用層的通信,雖然有做效驗,但是沒做效驗不通后的回復,相當于UART的單向傳輸而已,沒有應答標志的。不過即使這樣,還經常能把我的虛擬機刷數據刷到死機的,很長時間的通信,甚至一個位都沒錯。贊~
另外,焊接好后我就稱量了一下,所有的重量,到現在為止,工作大概已經完成了50%了吧,離飛起來的日子不遠了。
看圖:

重量,678g,主控電路單獨稱就有100多g了,如果畫板打樣回來的話,重量還會少幾十克。電池也放上去了,還有腳架什么的也放上去了。我能想到的東西都放上去了。
如果能如此下去,總重量在700g之內是可以辦到的,就算加了螺旋槳保護圈,也不會超過750g;再加上尾桿和尾翼,還有控制舵機的話,也可以控制在800g之內。.
這個如果能做到800g以下的重量,就可以很輕松地在上面加上云臺,放上攝像機進行航拍。
無線攝像機(用來做第一人稱操控) 50g以下,3軸或2軸云臺,50g以下,攝像機100多g(用來航拍錄像或拍照)。
總重在1100g這樣,一塊電池飛行時間我估計可以到8~10分鐘。
或者在上面掛載一些幾百克的“西紅柿炸彈”之類的東西~用一個舵機就可以控制兩個投彈~多好玩~哈哈
今天YY就到這里~哈~
2011/5/15昨天剛剛更新…按我這懶人的習慣,起碼要幾個星期后才會更新的…但是,今天真的有必要記錄一下!
其實也不是什么大事…也就是,成功地直接從接收機里直接提取PPM信號了,然后又直接從ABM模塊輸出6路PWM信號驅動舵機了,還有一點點小小的有周期性的抖舵,大概周期有3秒這樣,不知道怎么解決,或者是設備的問題?
我花了 50RMB 買的 PWM轉PPM 板(高手做的,點擊可以看他的帖子)沒用了,直接接接收機效果更好一些,經過那塊板之后反倒沒那么好。
現在還要解決的問題一個是舵機行程問題,這個在AFN里再寫幾十行代碼就行了。另一個問題是如果只接上接收機,沒打開遙控器之前PPM信號會全亂套,然后舵機亂跳,現在的解決方法只能在打開ABM電源之前先打開遙控器,這樣舵機就不會亂串了。
比較感慨的是這次做PPM解碼沒用多少調試時間,雖然第一次上電必出問題,是程序員最熟悉最習慣的方式…
我的PPM信號提取…本來先做一個簡易的,低頻率的,玩具級別的邏輯分析儀&示波器。后來一直沒空就拖到現在了。是我一直沒發表的 FL project 010,以后有時間做出來再發表吧~現在的情況是沒有示波器。還好我想到,我的萬用表是有測頻率的功能(高一的時候花了200多RMB買的一個鉗形表,能測400A的“直流電”的)。于是我上網又看了一遍PPM信號的圖。我的接收機是6通道的,然后分析PPM信號,信號如圖(這個圖是別人的經過整形的圖,大概可以表達意思,借用一下)。萬用表,就是我唯一的工具,我來講一下,我是如何用萬用表找到PPM信號并分析的。

我仔細分析過上面的那個圖,PPM信號是通過高電平的寬度來表示各個通道的值的。于是我就可以通過測量高電平的寬度去取值。我又注意到,6個通道,每一幀數據,一共會有7次電平的漲落,我大概計算了一下,50HZ的PPM信號周期,每個周期有7個漲幅,所以萬用表測出來的頻率應該在 50 x 7 = 350HZ 這樣。然后我就找到了接收機里離PWM輸出最靠近的那個芯片,上網百度一下,找到芯片的資料,希望直接找到芯片的輸入腳。百度之后發現那是一片單片機…囧。然后我就給接收機上電,打開遙控器,把萬用表調整到頻率檔,一個一個管腳地去測,發現有一個管腳 349.XHZ 的頻率!樂死我了!終于給我找到了..因為有的PPM信號在輸入其他芯片的時候,可能是反相的,于是我又打到電壓檔,去測那個引腳。結果為1.幾V的電壓,結合上面的圖,說明這個“西安孵化6通道接收機” PPM 信號在經過最后的單片機之前是反相的。OK,馬上修改AFN的程序。
關于外部中斷,好像只有固定的高電平,低電平有效。我之前在這卡了一下,還打算把外部中斷0和外部中斷1連接在一起,一個設置高電平有效,一個設置低電平有效,這樣設置來解決問題。后來發現根本不用,只需要在電平有效的時候,設置另一個電平有效,這樣就可以在每個電平變化的時候(不管是高->低,還是低->高)都產生中斷了,只需要在中斷里再判斷一下管腳是高電平還是低電平就可以了。
PPM解碼用的是AFN模塊C8051F410的外部中斷1,說實話,這是我第一次用“外部中斷”,以前從未用過這個…不過還好啦,編程很順利,今天直接接上AFN,改了一下相位,就OK了。現在PPM解碼有一百多行C代碼,功能也算完善了,接收機可以熱插拔,不會影響系統。如果要加功能的話,也就是把上面的問題2解決了,在遙控器打開之前,讓接收機不亂跳。解決這個問題在以后是必要的,要實現自主航線,可能會超過PPM信號的距離,到時候得由AFN模塊接手了。所以我打算有關于PPM的各個通道解碼,行程,微調全部放在AFN里,而ABM則負責利用AFN傳來的PPM信號,結合自身計算出來的飛行器姿態進行混空,然后直接進行輸出。
今天確實是個里程碑,實現了遙控->飛控的能力,雖然只是一小步,但是標志著飛控有了硬件的調試能力。
準備就能聽到螺旋槳切空氣的聲音了~~
接下來看圖說話:

上位機也新改寫過了,加了PPM信號的顯示,但是不知道為什么第六通道就是顯示不出來,而ABM上面第六通道我一直用來當供電用,所以也沒測試到。應該是單片機上的問題,以后找到原因再解決好了。

左邊第一塊板..供電模塊,可以接5~18V的電源,用了兩塊L7805CV,有3A的供電能力,在電源是鋰電池的時候,提供舵機和其他5V器件供電用。調試的時候直接接miniUSB口。
左邊第二塊板..AFN模塊
右邊第一塊板..ABM模塊
AFN和ABM上面的兩個黑色的,分別是接收機和舵機。
各種亂糟糟線…

天地飛FT06C,功能偏向CCPM直升機的控,對于固定翼只提供簡單的模式。我用的是固定翼模式,夠用了。

各種亂…飛機裝上螺旋槳的樣子,酷哦~正在調試飛機上的舵機。飛機上的兩個舵機是數字舵機,PWM 頻率可以超過 250HZ。不過我為了兼容性,還是把 PWM 頻率鎖定在 50HZ,桌面上還放著兩個非數字舵機,50HZ 下也可以完美驅動。這四個舵機都是金屬齒輪的,不怕摔了~

主角..西安孵化的接收機。找到PPM信號之后,就在里面引出了線,懶得鉆孔,就直接在這里引出來了,效果還不錯。沒浪費我太多時間去調試。
今天就到這里吧~ 還有三個星期就高考了,想起去年我高考的時候,和同學們一起奮斗,那感覺真好…
2011/5/17好吧…這幾天真是起勁了,連續更新~
昨天弄 IIC 電調,電調是 MK 四軸的,我用來驅動朗宇的無刷電機。一直沒成功,時轉時不轉的,斷斷續續。好像通信并不成功,地址什么的都正確,卻只有在上電的瞬間電機會啟動。我是按地址+八位變量輸出的,就是不正確,看了 MK 的源碼電機驅動部分,也是這樣驅動的。有幾次RP轉了起來,但是也不順暢,這個電調和朗宇的無刷有兼容性問題?我不想再折騰了,馬上決定換掉這兩個電調。
于是馬上上淘寶買了2個“好盈程序的新西達30A電調”,價格 37RMB/個。怎么說,好幾年前,大概初中的時候,我第一次接觸無刷電調,那時候 20A 的需要 200RMB/個,我籌錢買了一個,然后就沒錢買無刷電機了。再后來就買磁鋼,買廢舊光驅 10RMB/個,拆光驅,用光驅電機來 DIY 功率大一點的無刷電機,線圈自己繞,磁鋼擺好位置就用 502 貼好。后來還用鎳氫電池和這個 DIY 的無刷電機,5030 的槳,把我自己做的飛翼飛起來了。再后來,鈴鐺外轉子無刷電機以他的價格優勢,普及了。我就買了一個,但是心里還是覺得那不算數,我心目中的無刷電機是內轉子無刷。再后來,我還沒有機會擁有內轉子無刷,外轉子無刷就遍地都是了,好在他們外形都“專業”了好多~我心里才踏實…
扯遠了…這個 xxd 無刷電調是 pwm 控制的,在啟動的時候是有一些需要注意的地方,我之后會寫好程序。下午拿到快遞(順豐飛了不到24個小時)就趕回宿舍開工了,到現在還沒吃飯(現在是晚上10點)…據說這個電調可以開 250HZ 以上的 PWM 頻率,控制跟舵機一樣,就省的我去弄其他的協議了,由于不是用 IIC 總線的,減少了總線的大小,也避免了幾乎會使整個系統完蛋的總線死機的概率。
插上標準的接收機,馬上啟動遙控器,哇..那聲音,真是太爽了!很流暢,兩個電調和電機都工作得很好。換上EPP1045 的槳,那拉力不是一般的大,飛起來是必須的!實驗了幾分鐘,電調不熱,電池常溫,看來即使是夏天,也不需要什么特殊的散熱措施了。
現在的動力系統配置:
電機:朗宇2212 KV980 X2
電調:新西達 30A     X2
電池:牌子不記得了,11.1V 2200mAh
現在全重有750g這樣,包括所有的東西了,主要是控制電路2塊板,電源板1塊,無線模塊1塊…如果打樣的話,應該可以減輕100g?傊650g是非常理想的!
推重比可以達到3…好夸張!
下面看看今天裝好的圖~

我把幾塊板都連在一起了,這樣方便我收拾桌面,體積好大!如果要直接放在飛機上,比較難哦…
上層是ABM模塊,藍色板是串口透傳,另一邊的綠色板是電源模塊。

AFS上層板,無線透傳,ABM模塊,電源模塊

下層…孤零零的AFN模塊…

在“機翼”上的兩個黃色的,就是今天剛到的無刷電調,都能很好的工作~

嗯…各種亂糟糟的線,還有亂糟糟的飛行器,那塊紅色的是電池 11.1V 2200mAh
右邊那一團…電源線啊,IIC總線啊,串口線啊,電源線啊…
桌子角落上是接收機…
今天就到這里吧~哈哈~
開始寫混空功能咯~2個舵機和2個電調要混空的。
2011/5/23又是很久沒更新了…
從現在開始2個星期內,我可能得停止硬件調試了,原因其一因為要考試,其二…最悲劇的是我在 XP 虛擬機里用VB6 寫的上位機程序,死掉了,死得噼里啪啦的…源代碼全部亂碼!起因是因為一次長時間的 USB 口短路,引起電腦藍屏,虛擬機非法關機…最終結果就是源代碼變成亂碼了。
代碼備份是有的,可惜最近一次是4月21日的了…通訊的協議我幾乎每天都在改,所以早就不是那個樣子了,成品倒還好好的,但是也是因為改了協議,部分功能已經顯示不出來了。后來打算重新寫一個,只做了界面…就聽到日姐姐學習C#,看了 VS2010 的界面,很美哇!受不住誘惑,就去查了其他能編上位機的語言。
期間又嘗試在win7安裝了USB轉串口的驅動,沒想到居然就安裝成功了。之前為什么開虛擬機,其中一個原因就是win7裝不上那個驅動。
我早就受不了 VB6 那個98年產的,到現在也沒更新過的,界面很丑的編譯器了…現在倒安穩了,驅動裝上了,沒得選擇了,果斷換掉VB。于是又開始糾結用什么語言,java 和 C#?C++ 就算了,我在高中的時候已經死過一次了。學Java到時候可以編 android,可以做網站前臺后臺都可以,而 C# 可以也比較靠近 ASP.NET,也可以做網站后臺,相對于java比較簡單。考慮到C#據說比java簡單一點,我現在需要的是快速開發一個上位機代替 VB 那個爛東西,就決定學C#了…
在編第二個上位機的時候,遇到了瓶頸,主要是串口通信的時候有數據延遲的問題。之前的解決方法是每次從緩沖區里取100字節的數據,然后從里面找出完整的一幀32字節來,可以做到實時顯示不延遲,后果是有很多數據會被丟掉。但是這樣畢竟不好,之后的調試不允許這樣了,或者說,需要做到不丟幀。延遲這個問題很嚴重,在VB里面有,我就懷疑是我的虛擬機速度根本不夠解析每一個字節,后來換成幀數據解析,情況好了一點,但是還是有很嚴重的延遲。
單片機發回來的數據一次有3幀,每一幀包括幀頭和效驗一共32字節(兩個數據幀,一個命令幀)。三幀就是96字節了。我發送的頻率是AFN的系統周期,50HZ,串口速度是 115200bps。這樣一來,每秒鐘大概傳輸5800Byte…這樣電腦就都處理不過來了..我了個糾結!即使是現在用VS2010寫出來,延遲還是很嚴重,大概幾秒鐘的延遲!用的是 serialports 類來接受,跟以前在VB里用 MSCOMM 空間接收一樣的后果。
解決方法我想到了,比幀解析和字節解析處理量都小的方法,但是會丟掉最前面1~2幀的數據,應該不是很重要,大不了開機的時候多發一次第一幀。
我就把這個方法叫做:幀同步接收法
原理大概是這樣:
1.一開始先設置接收一個字節就觸發事件
2.判斷達到幀頭2個字節后,設置成接收30個字節觸發事件(這一幀先忽略掉吧,接收也可以)
3.達到30字節后,設置接收32字節(一個幀的長度)觸發事件
4.按順序存入3個不同的byte[30]數組(不需要同步,這里只是寫,另一個地方只是讀)
5.分析其中一幀的關鍵數據就好了(命令幀)。
然后用定時器定時更新界面的數據,更新圖表就行了

第二次在虛擬機里開發的上位機,只用了兩天的時間,界面做好了,通信做好了,其他的還沒做。沒有做后臺的分析和計算。

這是用C#做的上位機,左下角的命令欄是通過互相傳送的命令幀進行調試的,右邊的空的一大塊是做3D姿態顯示和安排一些固定的操控按鈕(起飛,回家,下一個航點…,當然也可以用命令行發送命令)。參數設置用的,地圖是指Google Earth API, 正在學習,結合飛行器傳回來的GPS數據,寫好kml文件后,就可以實時顯示飛行器的位置了!哇哈哈!
2011/5/25剛剛看了看word的左下角 “頁面 55頁”“字數 16,759”… 沉思了3分鐘,終于得出結論,我的廢話太多了…不管了,就這樣費下去吧。等做完之后,我會再寫一篇只有20頁左右的總結性的PDF,多寫技術資料,多寫經驗,少廢話!希望各位還有耐心等下去…我相信我不會讓你等到滄海桑田的~ 哈哈~
剛剛做好了混空,電機的混空還沒測試,舵機的混控已經很完美了,前后擺動的幅度一致,即使推桿拉桿達到極限后,操作方向依然有動作。這樣就安全些了,還把動作的幅度降低了一些,避免扭桿扭得太厲害導致超過舵機連桿的控制范圍。另外,把方向操作衰減了4倍的后才加入舵機混控,我可不想方向操作太過靈敏了。
做這些主要費時間費在調整合適的行程和衰減系數。整整調了我好長一段時間,記錄一下,左舵機 230 50 右舵機 255 80 。
舵機的方向和俯仰都還沒有和姿態積分一起做PI運算,明天或者周末加上,其實做完這個,就可以飛了。電機的PI控制已經做好了,就等上機測試了。
另外,上位機繼續完善,可以說功能越來越強大了,自己都佩服死(自戀ing)。還沒做上位機回傳到下位機的數據,所以右邊的參數調整面板暫時不可用(要不是這樣剛剛也不需要花那么多時間去調行程了),C#下操作數據和字節的轉換有點麻煩,等有時間再做。
還有就是上位機的圖表控件換成我最熟悉的 teechart 2010 推薦使用這個哦~CSDN有破解版下載。期間試過NTGraph MSChart…等等…

看圖就好啦~ 命令欄暫時用作串口數據監控,等我做好回傳程序后,命令調試欄和參數設置就真正有用了。
3D顯示我還沒找到方法,NI的labview 有控件,不知道怎么提取,也許只能,用D3D了…
2011/6/16
至于上次更新是什么時候,我也懶得去看了…有一件事差不多可以確定了,首飛會在家里而不是在學校,因為還有3個星期就放假咯,現在考試又多,不是很有時間做這個。
之前一直在糾結軟件的問題,不管怎么說,還是作出了挺多的成果的。比較自豪的是我發明的那個“幀同步接收法”,我打算在飛行器上面也用這個方法接收電腦或者手機傳上來的數據,這個方法耗CPU實在是夠少的,對系統影響小到不能再小了。還沒優化過就有不錯的效果,對于單片機這種速度更低的器件,幀同步接收法應該是在CPU占用和數據完整性上的最優解了。接收數據時只處理幾個關鍵字節,然后驗證,就沒事了,不需要分析完每一個字節。剩下的字節等CPU空閑了或者需要使用的時候再去處理。
思路已經完整了,等有時間了就寫單片機上的代碼。
其實這段時間也一直在做東西,我說過我不想讓洞洞板飛起來,于是我學了PCB做板,視頻教程看了幾個小時,就開始畫了。遇到了很多問題,有的是通過網上解決的,有的是自己憋得慌憋出來的。
肚子餓死了,外賣還沒來!
看看成果吧,我第一次畫板。排元件排了一個下午,然后自動布線的,電源線還沒改粗。只是擺元件擺得眼花。在5CM*5CM的電路板上塞下兩片單片機,幾個傳感器,N片電源芯片,近十個接口,電阻電容幾十個…只希望你看到圖片不要吐出來。
對外接口有:
12V DC
PPM 信號輸入
ABM/AFN調試接口
PWM 舵機驅動  (6通道,包括電源也做在板上了,獨立2A電流的7805供電)
GPS 接口      (其實就是UART,獨立3.3V AS1117供電)
氣壓傳感器接口(5V供電,ADC轉換)
超聲波測距接口(5V供電,接中斷)
I2C總線接口  (5V對外供電)
Nokia 5110 液晶屏接口
原理圖就先不放出來了,因為太大了,放出來也看不清楚。

電源線還沒改呢,線都是10mil寬的,改完電源線就差不多了。有一個不懂的地方,就是怎么在四個角打上螺絲釘能扭住的地方呢?郁悶。

Altium designer 6.9 大蔥推薦的…
有預覽功能,還是3D的,個人比較偏向藍色或者紅色的板,比較好看吶,雖然貴了50RMB…糾結!不過綠色就免了,我不想第一塊板看起來就那么丑。
絲印層還要調整一下,其他的差不多了。沒有大面積地線的余量,話說第一次做板就做這種那么復雜的,要是沒有自動布線我不知道怎么辦了…眼都花。接口太多,差不多要成篩子了…這是正面,放傳感器單片機用的,背面放電源模塊和電阻電容一堆。
2011/6/20正在打樣…很無語,我最不喜歡的就是等待…但是一般東西都齊全了,我又懶得動手做了。剛剛查了工程圖學的成績,還好沒掛,79分,不算很高,拉學分是大三才該考慮的事…大一的我就別慌張先了。
淘寶了 L3G4200D ADXL345,還在路上,第一次遇到順豐發了三天的情況。這三個傳感器我一共花了138RMB,其實可以花得少一點的,只是曾經在一個賣家那里買過模擬的傳感器和陀螺儀(就是上文我用的那塊紅色的板子)還有磁阻傳感器,和賣家聊得來,也不用擔心買到假貨(這東西有假的不?)。
PCB已經重新修改過了,自己布線花了一個中午和一個下午的時間,第一次布線實在是比較糾結,什么都不懂,線也不聽話。不過最終算是做完啦~
板子已經送到嘉立創打樣了,過兩天就到。相對于上面的,還調整了一點位置,用兩片C8051F410,還能裝逼一下“雙核的哦”
看看板子吧~
阻焊用的是紅色,比較顯眼一點~純粹為了擺炫…也是為了試飛的時候,周圍的同學能一眼看出這上面還多了“電路板”而不是一個普通的模型…

反面,當然要感謝下
(圖丟失)

現在應該糾結的問題是怎么焊接那兩片傳感器,只靠電烙鐵我覺得有點懸,打算做一套預熱的裝置。用最簡單的東西。
用易拉罐做一個小托盤,然后去外面搞點細沙回來,沒有細沙就買一包鹽,然后把鹽或者細沙鋪在托盤上,最后放上電路板。
然后給那兩個傳感器的管腳和電路板上的焊盤上一層錫,然后用蠟燭在托盤下加熱,這樣做可能達不到焊錫的熔點,但是也能使焊錫更容易融化一些,然后再用電烙鐵對著焊盤焊接,再加一點錫,或者不加。不打算做溫度控制。PCB有十塊,燒壞一塊還有9塊…不怕不怕。
一切都得實驗后才知道可行性...不過感覺這樣做應該有效果的
2011/6/21今天已經查到我的PCB已經發過來了,暈死,因為是深圳發過來的,我今早剛被快遞吵起床,從深圳發到桂林,順豐不超過18個小時就到了。明早我還有課呢,要是他發過來我就死定了。
今天呢,繼續無聊,于是給飛機做了尾翼。
說真的,尾翼在這個無人機上可有可無的,它本身的控制能力已經可以進行全方位的控制了,尾翼在這飛機上唯一的作用就是在飛航線的時候使飛機平穩一些。這個尾翼只有升降舵,沒有方向舵,尾翼的形狀大概是120度的三片玻璃鋼板。尾翼和尾架都是0.5mm的玻璃鋼板做的,尾架上有四根牙簽做加固。膠水依舊是504。
雖然用處不是很大。不過裝了尾翼之后看起來更帥了~~
尾翼+尾舵機重量估計在50克整,不是很影響。只是重心要重新調了。剛剛又拆掉機架上固定尾管的部分,11g的重量。覺得好開心啊。現在除掉主控電路,且不裝槳保護器的情況下,重量只有627g。這代表著什么~哈哈。
在室外,重量不到700g,室內(加將保護器)750g以內。對電池,對電調,對馬達都顯得毫無壓力,懸停時小消耗的電流估計在10安以內,2200mah的電池可以飛12分鐘,3000mah的電池可以飛18分鐘…
今天拍了好多圖片~看圖吧~

尾部的支架,牙簽作為支架,現在完全干固后會用鉗子減掉多余的部分用螺絲釘與機架固定在一起。

剪刀靠在那里,做些修正,因為粘的時候發現有些傾斜了。

這是尾翼..不多說了,一樣用牙簽做固定,相當的堅固

整機咯~在宿舍的走廊上完成今天的工作。

換一個角度,尾翼和支架是半透明的,有點軟,不過強度完全足夠了。尾翼可以做升降舵運動,是整個尾翼一起動的,類似金魚的尾巴

可以清晰地看到牙簽的固定,當然里面除了牙簽,里面平行于牙簽的還有玻璃鋼板。

有人好奇旋翼的結構,我就拍兩張清晰的圖給大家看看

另一邊,看上去是不是一樣的?那你就錯了,我安裝的方式是對稱的,看不懂?自己好好想想

稱稱~哈,重量嘛~看下一張圖片

638g,后來又減掉11g,就是627g。除了主控電路,其他的都在上面了哦
主控電路不會超過50g~

槳保護器一起,670多g,還少了一些支架。

這個最終成品應該在60g以下,現在還少了一些支架。這方面設計我遇到點麻煩,不知道怎么固定地好。有幾種方案。
  • 完全剛性的,繼續用0.5mm的玻璃鋼板,6條或者8條支架..(懶得做)
  • 類似自行車條幅一樣,用魚線制作(很難做)
而且固定還郁悶…
算了,以后再做這個保護架。明天PCB就要到了,答應要送一片給Linda美女的,希望她能收藏好哦~
然后實驗一下鹽浴加熱法
今天到此為止咯~明天還要交一篇論文,郁悶
2011/6/22今天板子到了…
焊接LGA封裝實在是一種挑戰,不過就像焊接LQFP一樣,一開始很痛苦,后來焊著焊著,覺得越焊越爽。
費了一個中午,小心翼翼終于把兩個傳感器焊接好了。沒有用鹽浴法…天氣太熱了!

焊接好兩個傳感器之后事情就變得簡單了,LQFP用托焊的方法,其他的…隨便了。
只是四個接口的插口,做得不是很好,打得過孔太小了!插進去費了好大的力氣。下次記得改過來。


待會改程序,然后準備下載到這板子上來了。
希望一次成功不要出錯,至少電路不要出錯了!
2011/9/23很久沒更新了,之前的電路板子設計有問題。
我把兩片C8051F410之間的通訊,ADXL345 L3G4200D 的通訊全部丟到IIC總線上了,又因為我的系統工作速度是250HZ。
實際總線速度最快只有160kbps 導致的結果是系統整個被拖慢了。
沒辦法,現在全部從新設計
最終方案如下
控制器 STM32F103RE   
三軸陀螺儀 L3G4200D
三軸加速度計 ADXL345
三軸磁阻傳感器 HMC5883L
氣壓傳感器 MPX4115A
鐵電儲存器 FM25CL64
GPS LEA-5Q
超聲波傳感器
九軸傳感器全部采用數字傳感器
陀螺儀和加速度計接入STM32的SPI1接口,HMC5883L接入STM32的I2C1接口
MPX4115A接入STM32的ADC
GPS 接入 STM32的USART3。LEA 5Q 擁有38400bps的UART速度,和4HZ 的高速更新率。
FM25CL64 鐵電儲存器接入SPI2 將用來保存配置參數,航點信息
超聲波傳感器接入中斷,用于貼地飛行,自主降落時精確定高
另外STM32負責解碼PPM接收機,混合控制信息后,通過PWM輸出。
PWM設計為6通道(因為管腳沖突,沒能設計成八個通道真是遺憾)
前四通道采用250HZ高速輸出。高電平為0.5~1.5ms,主要用于姿態控制的兩個數字舵機和電調,使飛機具有高速反應能力。
后二通道為標準50HZ PWM輸出,兼容普通舵機
I2C接口將用來拓展其他模塊,例如航行LED燈控制,例如三軸云臺控制模塊等等
唯一的遺憾是沒有加入SD卡的驅動。這個將在V0.3之后的飛控版本上加入!

新的PCB將采用藍色的阻焊油。我一直討厭綠色,寧可多花50RMB!

另外一個更重要的更新是 RT-Thread 將被移植到這塊V0.2的控制板上。
經過前一塊板子的失敗,我深刻了解到,當任務很多時,順序結構將很難勝任。這次我決定在飛行器上移植國產RTOS RT-Thread,以應對多任務的復雜度。
移植版本先暫定0.3.2 之后再考慮0.4 。0.3.2資料相對多一些,我也是第一次接觸RTOS。這幾天查找了很多資料,看了一整本書之后,感覺移植不會有很大的困難,接下來要做的就是要適應在操作系統上編程了。
STM32F103RE 512kB rom 和  64kB ram 足夠我揮霍啦~ 要是能找到合適的TF卡座封裝就好了,直接加TF卡,再移植FAT文件系統,記錄更完整的飛行數據是非常有意義的事情。
新的飛控板將實現自主航行飛行功能。
當然一切都是設想。。。
后天順豐就把新的傳感器和芯片,PCB送到我手上了~~~

就是那么突然,這篇日記式的制作筆記就這么爛尾了
原文將近 70 張圖,2萬多字,可能是因為前面廢話太多了導致寫不下去了吧。。
在這之后,這個雙軸飛行器,曾經嘗試去飛了一次,并不成功,沒有離地就翻了。飛機沒有摔壞。當然,爛尾的只是這個最初的雙軸飛行器,當我最后決定把飛控跑在STM32 + RT-Thread 上之后。更多地精彩和玩法一直在繼續,直到最后成為了。一個從大一開始做的設計



評分

參與人數 1黑幣 +5 收起 理由
B!ueice + 5 絕世好帖!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏9 分享淘帖 頂4 踩
回復

使用道具 舉報

沙發
ID:147926 發表于 2016-11-14 23:47 | 只看該作者
厲害厲害厲害 真的超厲害 受益匪淺 學習到很多
回復

使用道具 舉報

板凳
ID:140358 發表于 2016-11-24 09:15 來自手機 | 只看該作者
bhghdjfgfg
回復

使用道具 舉報

地板
ID:138104 發表于 2017-2-11 07:58 來自手機 | 只看該作者
支持你。我的哥
回復

使用道具 舉報

5#
ID:186732 發表于 2017-4-6 15:59 | 只看該作者
謝謝樓主分享,正需要
回復

使用道具 舉報

6#
ID:185829 發表于 2017-4-14 16:40 | 只看該作者
很下功夫的,學到機械電子軟件硬件一大堆。。。。
回復

使用道具 舉報

7#
ID:184816 發表于 2018-2-4 00:14 | 只看該作者
很厲害 不錯不錯
回復

使用道具 舉報

8#
ID:280876 發表于 2018-7-17 10:59 | 只看該作者
老哥是二院的吧?膜拜優秀校友
回復

使用道具 舉報

9#
ID:498382 發表于 2019-3-26 02:47 | 只看該作者
學習了!!謝謝分享。。
回復

使用道具 舉報

10#
ID:505153 發表于 2019-4-5 02:03 | 只看該作者
地面站軟件是自己寫的嗎?
回復

使用道具 舉報

11#
ID:250717 發表于 2019-4-9 14:01 | 只看該作者
牛逼哄哄啊可以
回復

使用道具 舉報

12#
ID:388013 發表于 2019-5-15 20:42 | 只看該作者
厲害了樓主!
回復

使用道具 舉報

13#
ID:244461 發表于 2019-10-14 12:55 | 只看該作者
很厲害。。。。。
回復

使用道具 舉報

14#
ID:155547 發表于 2020-1-29 21:12 | 只看該作者
RT-Thread操作系統的移植
回復

使用道具 舉報

15#
ID:186249 發表于 2020-5-13 22:00 | 只看該作者
好長啊,寫這么多
回復

使用道具 舉報

16#
ID:1101756 發表于 2023-12-6 10:38 | 只看該作者

厲害厲害厲害 真的超厲害 受益匪淺 學習到很多
回復

使用道具 舉報

17#
ID:993877 發表于 2024-3-1 14:37 | 只看該作者
很厲害 不錯不錯,值得學習!
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产精品伦一区二区三级视频 | 日韩中文一区 | 久色激情 | 日韩a在线| 欧美日韩亚洲国产综合 | 午夜精品一区 | 国产精品国产成人国产三级 | 成人性生交大片 | 99精品一区二区 | 91精品国产综合久久久密闭 | 国产精品一二三区在线观看 | 日本精品一区二区三区在线观看 | 亚洲精品日韩在线观看 | 国产一区二区三区色淫影院 | 欧美a∨| 日韩在线一区二区三区 | 国产在线中文字幕 | 国产日韩欧美一区二区 | 欧美激情精品久久久久久 | 高清视频一区二区三区 | 国产成人精品一区二 | 91成人免费看 | 日韩国产在线 | 在线精品亚洲欧美日韩国产 | 亚洲午夜三级 | av在线播放网址 | 天天弄天天操 | 国产亚洲精品久久久优势 | 色爱区综合 | 国产美女在线播放 | 久久伊人操 | 久草免费在线视频 | 精品国产一区二区三区av片 | 一二三四在线视频观看社区 | 涩涩视频在线看 | 免费观看一级特黄欧美大片 | 日韩一区二区三区av | 懂色av蜜桃av| 国产激情99 | 全部免费毛片在线播放网站 | 性视频一区 |