
這類帶練項目最值得關注的不是“做完了”而是能不能把真題拆成可復現的步驟讓不同基礎的人都能跟著走通。很多人看電賽真題覺得無從下手要么是卡在硬件選型要么是代碼邏輯理不清要么是調試半天沒結果。這個“24H題全部完成”的帶練核心價值在于提供了一個從讀題、分析、硬件搭建、代碼編寫到調試驗證的完整閉環。如果你是第一次接觸電賽或者想系統性地補強某個方向的實戰能力跟著一個能把所有細節都講清楚的流程走一遍比只看零散的資料要有效得多。下面我不會只講“做了什么”而是按實際備賽和解題的順序把整個流程拆成環境準備、硬件搭建、軟件邏輯、調試排錯和最終驗證幾個部分。每個部分都會解釋為什么這么做以及如果遇到問題應該先檢查哪里。1. 先明確“24H題”到底在考什么以及你需要準備什么電賽的“24H題”通常指在24小時內完成的綜合設計題它考察的不是單一知識點而是快速將多個技術模塊如傳感器、控制器、執行器、通信、算法整合成一個可運行系統的能力。題目可能涉及控制類、測量類、信號處理類等。在開始動手前必須先把題目要求徹底拆解。1.1 題目拆解從功能要求到技術模塊拿到題目后不要急著畫電路或寫代碼。第一步是逐句分析題目要求把“實現XX功能”翻譯成具體的技術動作。例如一個典型的控制類題目可能要求“設計一個系統使小車沿黑色引導線行駛并在指定位置通過無線通信上報當前坐標。”拆解后至少包含以下技術模塊傳感器模塊用什么檢測黑線常用灰度傳感器或攝像頭。用什么測量坐標可能是編碼器、視覺定位或超聲波測距。控制模塊主控芯片選什么STM32、Arduino、ESP32還是其他這決定了開發環境和庫的支持。執行模塊小車電機驅動用什么L298N、TB6612還是集成驅動板通信模塊無線通信選Wi-Fi、藍牙還是NRF24L01上報的數據格式和協議是什么電源模塊整個系統供電方案電池選型、電壓轉換如5V、3.3V穩壓。算法模塊PID控制參數怎么調路徑識別算法怎么寫坐標計算邏輯是什么我建議拿出一張紙或打開一個文檔左邊列題目原文要求右邊對應寫出可能的技術方案和備選器件。這一步的目的是建立“需求-技術”映射表避免后續邊做邊改方向跑偏。1.2 環境與物料準備清單化核對避免中途卡殼根據上一步的技術方案列出詳細的物料清單和軟件環境。這是很多新手容易栽跟頭的地方——東西沒備齊或者版本不兼容。硬件物料清單示例主控板STM32F103C8T6最小系統板 *1電機驅動TB6612FNG模塊 *1電機TT減速電機帶編碼器 *2傳感器紅外灰度傳感器TCRT5000 *3-5個用于巡線電源18650電池兩節及電池盒、AMS1117-5.0和3.3穩壓模塊通信ESP-01S WiFi模塊用于上報數據結構件小車底盤、輪子、萬向輪、銅柱、螺絲螺母包連接件杜邦線公對公、公對母、母對母若干、面包板初期調試用工具萬用表、電烙鐵、焊錫絲、螺絲刀、剝線鉗軟件環境準備開發環境Keil MDKSTM32、Arduino IDE 或 PlatformIO如果主控是Arduino/ESP32。驅動ST-Link/V2下載器驅動、CH340串口驅動確保電腦能識別設備。必備庫根據通信模塊如WiFi庫、NRF24L01庫和傳感器如編碼器庫提前安裝好。調試工具串口調試助手如SSCOM、XCOM、邏輯分析儀可選用于深層次時序分析。關鍵點在焊接或接線前先用萬用表測量所有電源節點的電壓確保沒有短路或電壓異常。軟件環境裝好后先寫一個最簡單的串口打印“Hello World”程序測試開發環境、下載器和主控板是否工作正常。這個“冒煙測試”能排除80%的基礎環境問題。2. 硬件搭建從分模塊驗證到系統集成步步為營硬件最忌諱一上來就把所有線都接好再上電。一旦冒煙排查極其困難。正確的順序是分模塊供電、測試最后再系統聯調。2.1 電源與主控最小系統搭建首先確保“大腦”和“心臟”是好的。連接電池到穩壓模塊輸出5V和3.3V。用萬用表測量輸出電壓是否準確、穩定。將3.3V和GND連接到STM32的對應引腳通常為3.3V和GND。注意STM32的IO口電壓是3.3V切勿接入5V否則可能損壞芯片。連接ST-Link下載器的SWDIO、SWCLK、GND到STM32對應引腳連接電腦。在Keil里嘗試下載一個空程序確認能正常連接和下載。編寫一個讓某個LED如果板載有閃爍的程序下載運行驗證主控能正常工作。2.2 執行機構電機驅動模塊測試在電機接入驅動板之前先測試驅動邏輯。將電機驅動模塊如TB6612的VM電機電源接5VVCC邏輯電源接3.3V或5V看模塊手冊GND共地。將驅動模塊的AIN1、AIN2、BIN1、BIN2控制信號線連接到STM32的四個普通IO口PWMA、PWMBPWM速度控制線連接到STM32的定時器PWM輸出引腳。先不接電機寫一段測試代碼依次給AIN1/AIN2高低電平組合01正轉10反轉00剎車11剎車同時用萬用表電壓檔測量驅動模塊對應電機的輸出端A01/A02之間的電壓。當設置為正轉時應能測到一個電壓差如5V。這證明控制邏輯通路是通的。確認無誤后斷開電源接上電機。上電后再運行測試代碼觀察電機是否按預期方向轉動。用手輕輕捏住電機軸感受一下力矩是否正常。2.3 傳感器模塊逐一手動測試每個傳感器單獨測試確保它能正確感知環境并輸出信號。灰度傳感器接好VCC5V、GND和OUT信號線接到STM32的IO口或ADC口。寫代碼循環讀取該引腳的電平或ADC值。用一張白紙和黑膠帶在傳感器下方移動觀察串口打印的數值變化。記錄下在白紙和黑線上的典型數值用于后續判斷閾值。編碼器如果電機帶編碼器接線通常有VCC、GND、A相、B相。寫一個中斷程序在編碼器A相變化時讀取B相電平判斷正反轉并計數。手動轉動電機輪子觀察串口輸出的計數值是否隨轉動方向正確增減。無線模塊如ESP-01S先通過USB轉TTL模塊單獨測試。連接VCC(3.3V)、GND、TX、RX用AT指令測試其能否正常連接Wi-Fi并通信。確認模塊本身OK后再將其接入主控板的串口注意電平轉換ESP-01S是3.3V電平。核心原則每個模塊都必須在“孤立”環境下驗證功能正常并記錄下關鍵參數如閾值、電壓、通信速率。這些參數是后續軟件邏輯的基石。3. 軟件邏輯編寫從狀態機思維到代碼實現硬件調通后軟件不是一股腦地寫一個大循環。對于實時性要求高的嵌入式系統狀態機State Machine是清晰、可靠的編程模型。3.1 定義系統狀態與事件以巡線小車為例我們可以定義幾個主要狀態STATE_IDLE空閑狀態等待啟動命令。STATE_LINE_FOLLOWING巡線狀態。STATE_POSITION_REPORTING到達點位上報坐標狀態。STATE_ERROR出錯狀態如脫線、傳感器故障。事件則包括EVENT_START收到開始指令。EVENT_LINE_LOST檢測不到線。EVENT_POSITION_REACHED編碼器計數達到預設值認為到達指定位置。EVENT_REPORT_DONE數據上報完成。3.2 核心控制算法實現以PID巡線為例巡線不是簡單的“左偏就右轉”。多灰度傳感器巡線通常采用位置式PID控制。誤差計算假設使用5個傳感器從左到右編號為0-4。定義一個“位置誤差”變量error。當只有中間傳感器2號檢測到黑線時error0。只有最左邊傳感器0號檢測到時error-2只有最右邊4號檢測到時error2。如果多個傳感器同時檢測到可以取加權平均。這個error就是PID的輸入。PID計算// 偽代碼示例 float Kp 1.0, Ki 0.01, Kd 0.2; // PID參數需要實際調試 float error_current calculate_error(); // 本次誤差 float error_integral error_current; // 誤差積分 float error_derivative error_current - error_last; // 誤差微分 float output Kp * error_current Ki * error_integral Kd * error_derivative; error_last error_current;output即為控制量。output0表示需要右轉output0表示需要左轉。輸出映射將output映射到左右電機的PWM占空比。// 假設 base_speed 是基礎速度 left_motor_speed base_speed output; right_motor_speed base_speed - output; // 還需要對速度進行限幅防止超過PWM最大值 left_motor_speed constrain(left_motor_speed, 0, MAX_PWM); right_motor_speed constrain(right_motor_speed, 0, MAX_PWM);參數調試這是精髓。先設Ki0, Kd0只調Kp讓小車能大致跟著線走但會振蕩。然后加入Kd抑制振蕩。最后加入很小的Ki消除靜態誤差。一定要在實車上調仿真沒用。3.3 多任務與時間管理一個系統里可能有巡線高頻、編碼器計數高頻、坐標計算中頻、無線通信低頻、可能阻塞等任務。在STM32上可以用定時器中斷來劃分時間片。用一個1ms的定時器中斷作為系統心跳在中斷服務函數里設置標志位。在主循環中查詢這些標志位來執行不同頻率的任務。while(1) { if (flag_1ms) { flag_1ms 0; read_sensors(); // 1ms讀一次傳感器 pid_calculate(); // 1ms計算一次PID } if (flag_10ms) { flag_10ms 0; update_motor_speed(); // 10ms更新一次電機速度 } if (flag_100ms) { flag_100ms 0; check_position(); // 100ms檢查一次是否到達目標位置 } if (uart_received_data) { process_wifi_command(); // 收到Wi-Fi數據則處理 } }這樣能保證關鍵控制回路PID的實時性又不會因為等待慢速通信而卡死。4. 系統聯調與問題排查從現象倒推原因當所有模塊單獨工作正常但整合起來出問題時系統化的排查方法比盲目嘗試更有效。4.1 常見問題與排查順序現象小車完全不動。第一步查電源。用萬用表測量主控板、驅動板、電機的供電電壓是否正常。特別是電機驅動板的VM電機電源電壓是否足夠通常需要比電機額定電壓稍高。第二步查控制信號。用邏輯分析儀或示波器如果沒有可以寫代碼讓控制IO口定時翻轉用萬用表測電壓變化檢查STM32輸出給電機驅動模塊的PWM和方向信號是否正常。第三步查軟件初始化。確認定時器用于PWM、GPIO、中斷的初始化代碼是否正確特別是時鐘是否使能。現象小車能動但巡線亂跑沖出軌道。第一步查傳感器數據。在巡線狀態下把5個灰度傳感器的實時ADC值通過串口打印出來。觀察在黑線和白紙上時數值是否穩定閾值設置是否合理例如ADC值500為黑線800為白紙。第二步查誤差計算。打印計算出的error值。小車在線上時error是否在0附近小幅波動偏離時error的正負和大小是否符合預期第三步查PID輸出和電機速度。打印output、left_motor_speed、right_motor_speed。觀察output的變化是否平滑電機速度賦值是否正確是否左右搞反了。第四步機械檢查。傳感器離地高度是否合適通常1-2cm是否安裝牢固車輪是否打滑現象無線通信不穩定時斷時續。第一步查電源。ESP-01S等模塊對電源紋波敏感確保其3.3V電源干凈、電流充足最好單獨一路LDO供電。第二步查接線與電平。TX/RX線是否接反STM32的串口TX應接模塊的RX。確保電平匹配3.3V對3.3V。第三步查軟件配置。波特率、停止位、校驗位是否與模塊設置一致發送和接收的代碼是否有緩沖區溢出的可能第四步查網絡環境。Wi-Fi信號強度如何路由器是否有連接數限制嘗試用固定的本地IP避免DHCP問題。4.2 調試技巧利用好串口打印串口是嵌入式調試的“眼睛”。不要只打印“OK”或“ERROR”。要打印有信息量的狀態數據。結構化打印可以定時打印一個包含所有關鍵變量的數據包。// 示例每100ms打印一次 printf([%lu] E:%d,O:%.2f,L:%d,R:%d,P:%d\n, system_tick, error, output, left_speed, right_speed, position_count);[系統滴答] 誤差:值,輸出:值,左速:值,右速:值,位置:值條件觸發打印在狀態切換、發生錯誤時打印并附帶上下文信息。if (line_lost) { printf(WARN: Line lost at tick%lu, last error%d\n, system_tick, last_error); }把這些日志保存下來對于分析偶發性問題非常有幫助。5. 優化與提升從“做出來”到“做得好”在基本功能實現后可以考慮以下幾個方面進行優化這往往是比賽拿高分的關鍵。5.1 性能優化控制頻率提升如果PID計算和電機更新放在1ms中斷里可以考慮能否優化算法將周期縮短到500us獲得更快的響應。代碼效率減少浮點運算在無FPU的MCU上很慢使用定點數運算。查表法代替復雜計算。電源管理采用高效率的DC-DC穩壓模塊替代LDO減少發熱延長電池續航。在不需要全速時動態降低電機PWM頻率或主頻。5.2 穩定性與魯棒性增強軟件濾波對傳感器ADC值進行滑動平均濾波或中值濾波消除毛刺。// 滑動平均濾波示例 #define FILTER_LEN 5 int adc_buffer[FILTER_LEN] {0}; int buffer_index 0; int filtered_value 0; adc_buffer[buffer_index] read_adc(); buffer_index (buffer_index 1) % FILTER_LEN; filtered_value 0; for(int i0; iFILTER_LEN; i) { filtered_value adc_buffer[i]; } filtered_value / FILTER_LEN;異常處理增加超時機制。例如通信發送后如果200ms內沒收到應答則重發或進入錯誤狀態。巡線丟失超過2秒則停車報警。參數自適應能否根據電池電壓微調PWM占空比補償電壓下降導致的速度變化能否根據賽道彎曲程度自動微調PID參數5.3 功能擴展與創新點在滿足題目基本要求的基礎上思考加分項。人機交互增加一個OLED屏幕實時顯示速度、誤差、狀態、電池電壓等信息。上位機監控通過無線通信將關鍵數據發送到電腦上位機可以用Python的PyQt或Tkinter簡單編寫實現曲線繪制、參數遠程調整。路徑記憶與優化第一次運行記錄編碼器位置和轉向第二次運行時自動復現并優化速度。多車協同如果題目允許設計簡單的通信協議實現兩輛小車之間的跟隨或避讓。完成所有這些步驟你不僅“做完了”一道24H真題更重要的是掌握了一套應對嵌入式綜合設計項目的通用方法論需求拆解 - 模塊化驗證 - 狀態機編程 - 系統化調試 - 迭代優化。這套方法的價值遠超過某一道題目的答案本身。下次再遇到新的賽題你就能更快地抓住重點避開深坑把時間和精力集中在真正的創新和優化上。