# Avionics Software Development ###### tags: `Avionics` ## Architecture SoC: ESP32S3 Framework: FreeRTOS Source Code: https://github.com/wilicw/Avionics-RTOS/blob/features/FreeRTOS/main/main.c <!--  --> <!-- ## Tasks --> ## FSM Design - Init - Initialize all peripheral - Check all sensors - Ground - Buzzer - Counting - Count form 30 to 0 - Launch - Igintion - Accelerate detection - Apogee - Deploy - Deploy cubesat - DeAcce - Deploy parachute - Altitude Detection - TouchGround - Crash ## Tasks ### Overview 航電程式由多個優先級不同的任務(Task)組成,這些任務負責資料蒐集、記錄與控制火箭本身,底層使用 FreeRTOS 分配 CPU 時間與任務間的通訊。  ### Control Logic `void fsm_task(void* args)` Control Logic 為整個系統中優先級最高的 Task,其中包含了一個有限狀態機(FSM)並定義了所有載具可能會出現的狀態,包含 `FSM_INIT`(初始化)、 `FSM_GROUND`(地面狀態)、 `FSM_RASING`(上升階段)、 `FSM_APOGEE`(最高點)、`FSM_PARACHUTE`(開啟主降落傘)、 `FSM_DETACH`(部署立方衛星)、 `FSM_FALING`(下降階段)、 `FSM_DEPLOY` (部署酬載)、`FSM_TOUCH_GROUND`(觸地)、`FSM_END`(結束記錄),並依據系統時間、Sensors Driver Task 所讀取到的感測器數值進行狀態間的變換。 ### Sensors Driver `static void sensors_loop(TimerHandle_t xTimervoid)` Sensors Driver Task 以 1000Hz 的頻率運行(除其中 GPS 為 1Hz ),負責蒐集慣性測量單元、氣壓計與衛星定位模組的資料,分別寫入到 `imu_instance` `pressure_altitude_instance` 等 structure 中供 control logic 讀取,同時將資料寫入到 ESP-IDF 提供的 log 中。  ### Communication 原先規劃將通訊部分獨立成一個單獨的 Task,單由於實際執行的工作與 Logger 相似,故併入 Logger Task。 ### Logger Logger 使用了 ESP-IDF 中 `esp_log_` 的記錄函式庫進行資料記錄,藉由 Virtual filesystem (VFS) component 將航電板上的 microSD 掛載成可供 C 函式庫讀寫的界面(file-like interface)並講 log 中的資料寫入 microSD 卡與藉由 LoRa 模組發送到地面接收端。  <!-- ## Reference https://docs.zephyrproject.org/latest/boards/xtensa/esp32/doc/index.html -->
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up