第 10 章:上位機調參與安全機制(總整理)¶
本章學習目標
- 知道飛控怎麼把資料傳給上位機、你又怎麼用它調參
- 看懂這台的四道安全防線(含電壓帶你算一次)
- 把第 0~9 章串成一張完整的資訊流圖
10.1 什麼是上位機(地面站)?它有什麼用¶
「上位機」是對岸常用的詞,字面是「上面的電腦」,其實就是電腦端的一個軟體, 拿來跟「下位機」(飛控本身那顆 STM32)溝通。在無人機圈,它更常被叫做地面站(Ground Station)。
一句話:上位機=你在電腦上開的程式,用一條線(USB/串口)或無線連到飛機, 用來「看飛機在想什麼、調飛機的設定」。
它的主要用途有四個:
| 用途 | 做什麼 |
|---|---|
| 📈 看波形 / 遙測 | 即時顯示姿態角、陀螺、油門、電壓…的曲線,飛行中或測試時觀察 |
| 🎛️ 調參數 | 改 PID、靈敏度等(邊看波形邊調效果) |
| 🧭 校準 | 加速度計水平校準、遙控行程校準等 |
| 🐞 除錯 | 飛機怪怪的時候,從資料找出是哪個感測器或哪段邏輯出問題 |
常見的上位機:
- ANO 匿名地面站(ANO_TC):你這台用的就是它(國產、適合學習)。
- Betaflight Configurator:FPV 穿越機最主流。
- Mission Planner / QGroundControl:給 Ardupilot / PX4 那種大型自駕飛控用。
🚗 比喻:上位機就像修車廠的電腦診斷儀——插上車子接口,就能看引擎轉速、油溫、故障碼,還能改設定。 飛控的「診斷儀」就是上位機。
它怎麼跟飛控對話:ANO 匿名協議¶
飛控透過串口,用 ANO 匿名協議把資料打包送到電腦上的 ANO_TC 地面站。
封包格式很簡單(HAL/ANO_DT.c):
- 幀頭
0xAA 0xAA:收方靠它認出「一包開始了」。 - 功能碼:這包是姿態?是感測器原始值?是電壓?
- 校驗和:把前面位元組加起來取低 8 位,收方重算一次比對,防止傳輸出錯。
飛機每隔固定時間(第 1 章的 Duty_20ms / Duty_4ms)就送一包,所以你能在上位機即時看到波形。
10.2 用上位機調參的流程¶
- 飛控接電腦(串口),打開
ANO_TC,選對 COM 埠與鮑率。 - 勾選要看的資料(姿態角、陀螺、PID 的 desired/measured…),畫成波形。
- 試飛或手動晃動,觀察波形找問題(抖?跟不上?過衝?)。
- 調整 PID,再看波形,反覆收斂。
這台的 PID 是「編譯進去」的
這份韌體的增益寫在 USER/INIT.c 的 pid_param_Init(),改參數要改原始碼再重新燒錄
(不像有些飛控能從上位機即時寫入並存進 Flash)。
所以這台的上位機主要價值是「看波形、找方向」,調好的數字要回去改 pid_param_Init()。
調參順序記得第 4 章的原則:先內環、後外環;先姿態、再高度、再光流。
10.3 四道安全防線¶
飛控不是「能飛」就好,更要「出事時別釀大禍」。這台有四道防線:
① 獨立看門狗 IWDG(防程式卡死)¶
main() 開了看門狗,逾時約 1 秒。主迴圈每跑完一圈就 IWDG_Feed() 餵狗;
萬一某段程式卡死(例如感測器 I2C 通訊卡住),狗沒被餵到 → 自動重啟 MCU,給飛機一個恢復機會。
② 低電壓檢測(防過放摔機)¶
Voltage_Check()(CONFIG/ADC.c,20Hz)用 ADC 量電池電壓:
| CONFIG/ADC.c | |
|---|---|
帶你算一次:12 位元 ADC(0~4095)、參考 3.3V(=3300mV)、外部用了 1/2 分壓(所以乘 2)。
假設讀到 ADC = 2480:
那個
+= 0.2f * (... - voltage)又是一階低通濾波(還記得第 2.5 節嗎?同一招),把電壓讀數濾平穩。 電壓過低時程式會用 LED 警告,提醒你該降落了——避免鋰電池過放損壞或空中沒電墜機。
③ 失控保護 Failsafe(防斷訊亂飛)¶
第 6 章看過:遙控訊號斷掉 → 搖桿回中、油門緩降。靠 Duty_1000ms 的訊號強度統計判斷「還連著嗎」。
④ 解鎖/緊急停機(防誤觸與失控)¶
- 預設上鎖,要刻意手勢才解鎖(第 6 章)。
ALL_flag.unlock == EMERGENT時,PID 與馬達立即停止——緊急情況一鍵切斷動力。
10.4 把整台飛機串起來(全課程總圖)¶
恭喜你走到這裡!下面這張圖把第 0~9 章串成一條完整的資訊流——從感測器到馬達:
flowchart TD
subgraph sensors ["感官(第 2 章)"]
G["陀螺/加速度<br/>MPU6050"]
B["氣壓<br/>SPL06"]
F["光流<br/>PMW3901"]
end
G --> AT["姿態解算<br/>四元數+Mahony(第 3 章)"]
RC["遙控搖桿<br/>(第 6 章)"] --> MODE{"飛行模式<br/>(第 6 章)"}
F --> FP["光流位置/速度環<br/>(第 8 章)"]
B --> HP["高度環/速度環<br/>(第 7 章)"]
MODE --> OUT["角度外環<br/>(第 4 章)"]
FP --> OUT
AT --> OUT
OUT --> IN["角速度內環<br/>(第 4 章)"]
HP --> MIX
IN --> MIX["馬達混控<br/>(第 5 章)"]
MIX --> PWM["PWM → 四顆馬達<br/>(第 5 章)"]
SCH["排程器每 2~1000ms 分時驅動這一切(第 1 章)"]
每一個方塊,你現在都能說出「它在做什麼、用哪個感測器、對應哪段程式」——這就是你最初想要的: 把任何一台多旋翼的原理、硬體、程式三者對起來。
10.5 起飛前安全檢查清單¶
每次飛行前過一遍
- 螺旋槳裝對方向、鎖緊;調參/測試時先拆槳。
- 電池電量充足、插緊(看上位機電壓,對照 10.3 ②)。
- 開機時飛機靜止水平放好(讓陀螺/氣壓校準正確,第 2、7 章)。
- 確認遙控連線正常、低電量保護有效。
- 先小油門解鎖測試姿態方向對不對,再到空曠安全場地起飛。
- 特技/極限飛行:足夠高度、空曠無人、戴護目鏡(第 9 章)。
10.6 思考題(綜合)¶
- 用 10.3 ② 的公式,若上位機顯示電壓掉到 3.5V,反推 ADC 讀數大約是多少?
- 看門狗能救「程式卡死」,但救不了「邏輯算錯」。請各舉一個你在前面章節學到的、屬於這兩類的例子。
- 對著 10.4 的總圖,挑一條路徑(例如「光流定點」),把它經過的每一個方塊、每一章、每個感測器完整說一遍——這是檢驗你是否真的學通的最好方法。
10.7 本章對應的原始碼¶
| 檔案 | 看什麼 |
|---|---|
HAL/ANO_DT.c、HAL/ANO_Data_Transfer.c |
ANO 協議打包與收發 |
USER/main.c |
看門狗 IWDG_Init/Feed |
CONFIG/ADC.c |
Voltage_Check() 電壓檢測 |
HAL/remote.c |
失控保護、解鎖、緊急停機 |
🎉 全 11 章完成。 你已經把這台飛機從上電、感測、解算、控制、混控、到各種飛行模式與安全機制, 完整走了一遍。接下來最好的學習,就是對著真機、開著上位機,一邊飛一邊驗證每一章學到的東西。