調查開放原始碼電子速度控制器,評估我們是應該建構自訂 ESC 還是使用現有方案
在打造自訂飛行控制系統時,第一個需要做的決策之一就是是否要外購 ESC,還是自己設計。4-in-1 ESC 市場已經成熟 — FlipSky、T-Motor 和 Hobbywing 都提供定價具競爭力的精煉硬體。但我們需要權衡一些取捨:韌體透明度、電流偵測準確性、馬達控制演算法,以及將硬體調整為我們特定外觀尺寸的彈性。
這促使我們調查 VESC — 一個由 Benjamin Vedder 設計的開放原始碼 ESC 平台,將電子速度控制的可能性推向極限。
VESC 專案最初以韌體為中心的倡議起步,後來發展成完整的開放原始碼硬體平台。與馬達控制演算法是黑盒的專有 ESC 不同,VESC 堆疊 — 韌體和硬體 — 完全透明。這對我們很重要,因為這意味著我們可以研究電流偵測設計、PWM 產生方法、BEMF 測量技術,以及無感場定向控制(FOC)的實作。
VESC 生態系支援多種馬達類型和配置,從簡單的有刷馬達到帶有霍爾感測器或編碼器回饋的複雜三相無刷馬達。其最新一代包括:
| Revision | Time | Source | Description |
|---|---|---|---|
| V1 ~ V3 | 2012 ~ 2014/01 | N/A | Not released. As Benjamin’s bio, he started VESC project in 2012, but the first public release is in 2014/01. |
| V4.0 | 2014-01 | http://vedder.se/2014/01/a-custom-bldc-motor-controller/ | First public release |
| V4.X? | 2014-08-21? | https://github.com/vedderb/bldc-hardware | First commit of this github project |
| V4.6? | 2014-08-25 | https://vedder.se/2015/01/vesc-open-source-esc/ | Revised version, start “VESC” trademark, blog posted on 2015-01 |
| V4.5 | 2014-09-06 | 4e1188bf91284a7c05fe4ae373cc99b7b6556afe | Revised to v4.5 |
| V4.10 | 2015-10-05 | c52f15411cdf9a3b9bc6a8af2e016f65923176e6 | Connected HW SPI NSS pin and moved temperature pin for that |
| V4.12 | 2016-02-03 | 4f6162064f90ffa2c29c21e483bc92634683765a | Added another capacitor to GVDD in the DRV8302 |
| V4.1x | 2016-05-13 | f1c65014d0caab5d99d888fc3025377861ac6ae2 | Last commit in Github |
| V4.20 | 2022-03-04 | https://github.com/makerbase-mks/VESC-MKS/blob/main/04_Hardware/V4.20 | Makerbase MKS forked VESC, named v4.20 |
| V6.4 | 2016-11-13 | VESC_6.pdf on vena-project.com | VESC SIX, first release |
| V6 High Power | 2018-01-17 | vesc_75_300.pdf on vena-project.com | VESC 75/300, high power version |
| V6.5 | 2018-02-27 | VESC_6_plus.pdf on vena-project.com | VESC 6 Plus, with more capacitors |
| V6 MK5 | 2020-12-09 | VESC_6_mk5.pdf on vena-project.com | VESC 6 MK5, with better layout |
V4.x 使用兩個分流電阻器進行電流偵測,而更新的 V6 使用三個分流電阻器進行更精確的三相電流監控。V4 硬體完全開放原始碼,提供 KiCAD 專案檔案,而 V6 只提供原理圖 — 作為我們評估能從中學習的內容,這是有價值的區別。
我們從 VESC 4.12 硬體設計開始,它是基於 FlipSky Benjamind ESC,可透過各種線上市場取得。KiCAD 專案可在 github.com/vedderb/bldc-hardware 取得,v4.12 的 4f61620 commit 給了我們堅實的基礎。
FlipSky 4.12 板子的韌體編譯很直接:
make flipsky_412
記憶體佔用情況如下:
| 區域 | 已用大小 | 區域大小 | 使用率 |
|---|---|---|---|
| flash | 15,312 B | 16 KB | 93.46% |
| flash2 | 436,352 B | 475,120 B | 91.84% |
| ram0 | 108,288 B | 128 KB | 82.62% |
| ram4 | 63,200 B | 62 KB | 99.55% |
| libif | 2 KB | 2 KB | 100.00% |
flash2 區域特別值得注意 — 它用於儲存 NVM(非揮發性記憶體)資料,包括設定、馬達設定和校準參數。這種方法對我們自己的韌體設計很有研究價值。
BLDC 的 編譯系統 可以列舉出目前有支援的電路板以及支援的配置.
❯ make
*NOTE* Sanitized disallowed variable 'TMPDIR' from environment
This Makefile is known to work on Linux and Mac in a standard shell environment.
Here is a summary of the available targets:
...
[Firmware]
fw - Build firmware for default target
supported boards are: 100_250 100_250_mkiii 100_250_mkiii_no_limits 100_250_no_limits 100_500 100_500_no_limits 140_300
40 410 410_0005ohm 410_005ohm 410_no_limits 45 46 46_0005ohm 46_33k 48 49 60 60_75 60_75_mk2 60_75_mk2_no_limits 60_75_no_limits
60_mk3 60_mk3_no_limits 60_mk4 60_mk4_no_limits 60_mk5 60_mk5_no_limits 60_mk6 60_mk6_hp 60_mk6_hp_no_limits 60_mk6_max
60_mk6_no_limits 60_no_limits 60v2_alva 60v2_alva_mk1 60v2_alva_mk2 75_100 75_100_V2 75_100_V2_0005ohm
75_100_V2_005ohm 75_100_V2_no_limits 75_100_no_limits 75_300 75_300_mkiv 75_300_mkiv_no_limits 75_300_no_limits 75_300_r2
75_300_r2_no_limits 75_300_r3 75_300_r3_no_limits 75_600 75_600_no_limits Cheap_FOCer_2 Cheap_FOCer_2_V09
Cheap_FOCer_2_V09_no_limits Cheap_FOCer_2_no_limits ENNOID_150V_mk8 JetFleetF6_20s JetFleetF6_24s JetFleetF6_32s Little_FOCer
Little_FOCer_V3 Little_FOCer_V3_1 Little_FOCer_V4 RSR_DD_V1 RSR_DD_V1_005 RSR_DD_V2 RSR_DD_V2.1 TRONIC_250R Thor300_20s Thor301
Thor400 Thor400v2 a100s_v4 a200s_v2.1 a200s_v2.2 a200s_v3 a200s_v4 a200s_v41 a50s_dual_12s a50s_dual_8s a50s_v22_12s a50s_v22_12s_hg
a50s_v22_6s a50s_v22_6s_hg a50s_v23_12s a50s_v23_20s a50s_v23_6s a50s_v23_8s a50s_v23c_12s a50s_v23c_8s adv200 adv500 axiom basic basic_025
basic_035 basic_035_no_limits das_mini das_rs duet duet_no_limits edu edu_no_limits es19 example flipsky_110_300 flipsky_110_300_no_limits
flipsky_412 flipsky_412_no_limits flipsky_60 flipsky_60_mk5 flipsky_60_mk5_no_limits flipsky_60_no_limits flipsky_75
flipsky_75_no_limits fsesc_75_200_alu fsesc_75_200_alu_no_limits fsesc_75_300 gesc go_foc_dv6_pro go_foc_dv6_pro_no_limits
go_foc_g300 go_foc_g300_no_limits go_foc_hi200 go_foc_hi200_no_limits go_foc_hv200 go_foc_hv200_no_limits go_foc_m100
go_foc_m100_no_limits gp hd60 hd60_no_limits hd75 hd75_no_limits itr_x1 ka160 luna_bbshd luna_m600 luna_m600_Rev5 luna_m600_Rev5_60V
maxim_120 maxim_120_no_limits maxim_150 maxim_150_no_limits maximp_120 maximp_120_no_limits maximp_150 maximp_150_no_limits mbot mini4
minim minim_no_limits mksesc_100_300_hp mksesc_100_300_hp_no_limits mksesc_75_100_old mksesc_75_100_old_no_limits mksesc_75_100_v2 mksesc_75_100_v2_no_limits mksesc_75_100_v2_old mksesc_75_100_v2_old_no_limits mksesc_75_200_v2 mksesc_75_200_v2_no_limits
mksesc_75_200_v2_old mksesc_75_200_v2_old_no_limits mksesc_84_100_hp mksesc_84_100_hp_no_limits mksesc_84_200_hp mksesc_84_200_hp_no_limits
pronto pronto_no_limits r2 raiden7 rb rd2 resc rh solo solo_no_limits sparkf spesc stormcore_100d stormcore_100d_no_limits
stormcore_100d_parallel stormcore_100d_v2 stormcore_100d_v2_no_limits stormcore_100dx stormcore_100dx_no_limits stormcore_100dx_parallel
stormcore_100s stormcore_100s_no_limits stormcore_60d stormcore_60d+ stormcore_60d+_no_limits stormcore_60d_no_limits
stormcore_60dxs stormcore_60dxs_no_limits str365 str365_150 str365_150_no_limits str365_no_limits str500 str500_01 str500_hp
str500_hp_no_limits str500_no_limits uavc_omega uavc_qcube ubox_single_100 ubox_single_100_no_limits ubox_single_75
ubox_single_75_no_limits ubox_single_80 ubox_single_80_no_limits ubox_single_85_200 ubox_single_85_200_no_limits
ubox_v1_75_micro ubox_v1_75_micro_no_limits ubox_v1_75_typec ubox_v1_75_typec_no_limits ubox_v2_100 ubox_v2_100_no_limits
ubox_v2_75 ubox_v2_75_no_limits unity unity_no_limits uxv_sr warrior6 x12_pro24 x12_pro30
fw_<board> - Build firmware for target <board>
對於 VESC 4.12,主要的配置選項是分流電阻器的值,這會影響電流偵測的靈敏度和精確性。如果選用通用電路板 410, 則可用的配置包括以下幾種:
410, 預設配置410_0005ohm, 使用 0.0005 歐姆的分流電阻器進行電流偵測410_005ohm, 使用 0.005 歐姆的分流電阻器進行電流偵測410_no_limits, 不使用任何電流限制的配置VESC 6 在電流偵測能力上有了顯著提升。透過使用三個分流電阻器(每相一個),它為每相提供獨立的電流測量,實現更精確的 FOC 控制 — 這在低速和動態操縱時尤其重要。
然而,VESC 6 只開放原理圖,不開放完整的配置。這意味著我們可以研究電路設計,但如果我們想要生產 VESC 6 等級的板子,就需要自己做 PCB 配置。FlipSky V6 板子可取得(有些最基本的款式只要 8 美元),因此購買一塊進行拆解分析是一條可行的道路。
大多數 FPV 無人機使用基於佔空比的簡單 ESC,接受 PWM 信號並直接轉換為馬達功率。這些 ESC 便宜、簡單且運作良好。但對於需要精確馬達控制的應用 — 自主懸停、減震、電流限制飛行包絡,或再生制動 — VESC 的 FOC 能力提供了有意義的優勢。
VESC 平台也提供豐富的遙測數據:每相實時電流、馬達溫度估算、輸入電壓、RPM 估算等。這些數據通路可以以標準 ESC 遙測無法提供的方式來影響我們的飛控演算法。
目前,我們保持開放態度。初期建置將使用市場上經過驗證的 4-in-1 ESC — 現成方案的质量和可靠性難以超越。但 VESC 研究對兩個原因有價值:
學習:VESC 的硬體和韌體是任何想建構馬達控制器的優秀參考設計。KiCAD 專案檔案讓我們完整掌握電源級設計、微控制器選擇和週邊電路。
未來能力:隨著我們的應用向更自主和精確控制的飛行發展,能夠設計具有 FOC、電流限制和豐富遙測等進階功能的自訂 ESC 將成為一項資產,而非奢侈。
github.com/vedderb/bldc-hardware 的 VESC 專案是任何對開放原始碼馬達控制感興趣的人的寶庫。即使我們不在最終設計中使用 VESC 硬體,研究它也會影響我們所做的每一個 ESC 相關決策。
下一步是設置測試平台,將 VESC 韌體燒錄到 FlipSky 4.12 板子上,並將其馬達控制特性與我們初期建置中使用的 ESC 進行比較。我們希望在做出任何硬體決策之前,量化平順度、電流偵測準確性和遙測豐富度方面的差異。