嵌入式全棧設計思路:STM32G4+ChibiOS+FreeRTOS+PID控制+PFC算法構建高效智能電源管理系統(附代碼示例)

智能電源管理系統是一個基于STM32G4微控制器的高性能數字電源控制解決方案。本項目旨在設計一個功能全面、高效穩定的電源管理系統,可廣泛應用于工業控制、新能源、通信設備等領域。

1.1 系統主要特點

  1. 高精度數字電源控制:利用STM32G4的高性能ADC和定時器,實現精確的電壓電流控制。
  2. 多模塊協同工作:通過CAN總線實現多個電源模塊的協同控制和負載均衡。
  3. 實時監控和保護:集成過壓、過流、過溫等多重保護機制,確保系統安全可靠。
  4. 遠程配置和固件更新:支持通過RS485接口進行遠程參數配置和固件更新。
  5. 高效率運行:采用先進的Buck/Boost拓撲和動態PFC技術,實現高效能量轉換。

1.2 技術棧概覽

  • 微控制器:STM32G474RE (STM32G4系列)
  • 操作系統:ChibiOS/RT 21.11.1
  • 電源管理:數字控制Buck/Boost轉換器
  • 電流感應:INA226高精度電流檢測芯片
  • 通信接口:CAN 2.0B, RS485 (Modbus RTU)
  • 數據采集:內置12位SAR ADC, 5MSPS采樣率
  • 控制算法:數字PID控制,自適應控制
  • 人機界面:0.96" OLED顯示屏,旋轉編碼器
  • 數據存儲:W25Q64 8MB SPI Flash
  • 開發工具:STM32CubeIDE 1.9.0, Qt 5.15.2

2. 系統設計

2.1 硬件設計

系統硬件架構如下:

?

2.1.1 核心控制器

選用STM32G474RE,其主要特性包括:

  • ARM Cortex-M4內核,170MHz主頻
  • 512KB Flash, 128KB SRAM
  • 5個12位ADC,采樣率高達5MSPS
  • 7個高級定時器,支持高分辨率PWM
2.1.2 電源轉換電路

采用同步整流Buck/Boost拓撲,主要組件:

  • 功率MOSFET:IPB020N10N3 (100V, 90A)
  • 驅動IC:UCC27211A-Q1
  • 輸出電感:IHLP-5050FD-01 (10μH)
  • 輸出電容:TDK C5750X6S2W225K250KA (2.2μF, 450V)

Buck/Boost拓撲允許系統在輸入電壓高于或低于輸出電壓時都能正常工作,提高了系統的適應性。同步整流技術顯著提高了轉換效率,特別是在高電流輸出時。

2.1.3 電流檢測

采用Texas Instruments的INA226高精度電流檢測芯片:

  • 16位ADC,可測量范圍±81.92mV
  • 精度:量程的0.1%
  • I2C接口,可編程采樣速率
  • 內置校準和告警功能

將INA226與一個10mΩ精密分流電阻配合使用,可以實現高達±8.192A的電流測量范圍。

2.1.4 通信接口
  1. CAN接口

    • 使用STM32G4內置的FDCAN控制器
    • 外部CAN收發器:TJA1044GT (5Mbps高速CAN)
    • 支持CAN 2.0B協議,用于多模塊通信
  2. RS485接口

    • 使用STM32G4的UART接口
    • 外部RS485收發器:MAX3485
    • 支持Modbus RTU協議,用于遠程監控和配置
2.1.5 人機界面
  • OLED顯示屏:0.96英寸,128x64分辨率,SSD1306控制器
  • 旋轉編碼器:PEC11R-4215F-S0024 (24步/圈),用于用戶輸入
2.1.6 數據存儲

采用Winbond W25Q64JVSSIQ 8MB SPI Flash:

  • 支持SPI/Dual SPI/Quad SPI接口
  • 100,000次編程/擦除周期
  • 用于存儲系統日志和配置參數
2.1.7 溫度監測

使用MAX31855KASA+熱電偶數字轉換器:

  • 冷端補償K型熱電偶數字轉換器
  • 14位分辨率,0.25°C
  • SPI接口
  • 用于監測關鍵部件溫度,實現過溫保護

2.2 軟件設計

軟件架構采用分層設計,如下圖所示:

?

2.2.1 操作系統

采用ChibiOS/RT 21.11.1實時操作系統:

  • 優先級基于的搶占式多任務調度
  • 低內存占用(約8KB ROM,2KB RAM)
  • 快速上下文切換(約200個時鐘周期)
  • 豐富的同步原語(互斥量、信號量、事件標志等)
2.2.2 主要軟件模塊
  1. 電源控制模塊

    • 實現數字PID控制算法
    • 自適應控制策略,根據負載變化調整參數
    • PWM生成與同步整流控制
  2. 數據采集模塊

    • 高速ADC采樣(電壓、電流)
    • INA226電流檢測芯片數據讀取
    • 溫度數據采集和處理
  3. 保護機制模塊

    • 過壓保護
    • 過流保護
    • 過溫保護
    • 軟啟動控制
  4. 通信模塊

    • CAN協議棧實現(多模塊通信)
    • Modbus RTU協議實現(遠程監控)
  5. 人機界面模塊

    • OLED顯示驅動
    • 旋轉編碼器輸入處理
    • 菜單系統實現
  6. 數據存儲模塊

    • Flash讀寫驅動
    • 日志記錄系統
    • 參數存儲與恢復
  7. 系統管理模塊

    • 任務調度
    • 電源狀態管理
    • 錯誤處理和系統恢復
2.2.3 任務劃分
任務名稱優先級周期功能描述
controlTask100μs電源控制算法執行
adcTask200μsADC數據采集和處理
protectionTask1ms系統保護檢查
communicationTask10ms通信協議處理
uiTask50ms用戶界面更新
dataLogTask1s數據記錄到Flash
2.2.4 關鍵算法實現
2.2.4.1 PID控制算法

PID(比例-積分-微分)控制是電源管理系統中最核心的算法之一,用于精確控制輸出電壓和電流。

typedef struct {float Kp, Ki, Kd;           // PID參數float error_sum, last_error; // 積分誤差和上一次誤差float output_min, output_max; // 輸出限幅
} PID_Controller;float PID_Update(PID_Controller* pid, float setpoint, float measurement) {float error = setpoint - measurement;// 比例項float P = pid->Kp * error;// 積分項(帶積分限幅)pid->error_sum += error;pid->error_sum = CLAMP(pid->error_sum, -10.0f, 10.0f);float I = pid->Ki * pid->error_sum;// 微分項float D = pid->Kd * (error - pid->last_error);pid->last_error = error;// 計算輸出float output = P + I + D;// 輸出限幅output = CLAMP(output, pid->output_min, pid->output_max);return output;
}

說明:

  • 該PID算法實現了基本的比例、積分和微分控制。
  • 使用了積分限幅來防止積分飽和。
  • 輸出限幅確保控制信號在合理范圍內。
2.2.4.2 自適應PID參數調整

為了應對不同負載條件,我們實現了一個簡單的自適應PID參數調整算法。

void PID_Adapt(PID_Controller* pid, float error) {float abs_error = fabs(error);if (abs_error > 5.0f) {pid->Kp *= 1.1f;  // 誤差大時增大Kp} else if (abs_error < 1.0f) {pid->Kp *= 0.9f;  // 誤差小時減小Kp}pid->Kp = CLAMP(pid->Kp, 0.1f, 10.0f);  // 限制Kp的范圍
}

說明:

  • 根據誤差大小動態調整Kp參數。
  • 當誤差較大時,增大Kp以提高響應速度。
  • 當誤差較小時,減小Kp以提高穩定性。
  • Kp的值被限制在0.1到10之間,防止過度調整。
2.2.4.3 軟啟動算法

軟啟動算法用于在系統啟動時緩慢增加輸出電壓,避免突然的電流沖擊。

typedef struct {float target_voltage;       // 目標電壓float current_voltage;      // 當前電壓float ramp_rate;            // 斜率 (V/s)uint32_t last_update_time;  // 上次更新時間
} SoftStart;void SoftStart_Init(SoftStart* ss, float target, float rate) {ss->target_voltage = target;ss->current_voltage = 0.0f;ss->ramp_rate = rate;ss->last_update_time = HAL_GetTick();
}float SoftStart_Update(SoftStart* ss) {uint32_t now = HAL_GetTick();float elapsed_time = (now - ss->last_update_time) / 1000.0f;ss->last_update_time = now;ss->current_voltage += ss->ramp_rate * elapsed_time;if (ss->current_voltage >= ss->target_voltage) {ss->current_voltage = ss->target_voltage;return -1.0f;  // 軟啟動完成}return ss->current_voltage;
}

說明:

  1. SoftStart?結構體包含了軟啟動所需的所有參數:

    • target_voltage: 最終要達到的目標電壓
    • current_voltage: 當前輸出電壓
    • ramp_rate: 電壓上升的速率(V/s)
    • last_update_time: 上次更新的時間戳
  2. SoftStart_Init?函數用于初始化軟啟動參數:

    • 設置目標電壓和斜率
    • 初始電壓設為0
    • 記錄初始時間戳
  3. SoftStart_Update?函數實現了軟啟動的核心邏輯:

    • 計算自上次更新以來的時間間隔
    • 根據時間間隔和斜率增加當前電壓
    • 如果達到或超過目標電壓,則返回-1表示軟啟動完成
    • 否則返回當前電壓值

使用這個軟啟動算法可以實現電壓的平滑上升,減少啟動時的浪涌電流,保護電源和負載。在實際應用中,可以將這個算法集成到主控制循環中,在系統啟動或重啟時調用。

2.2.4.4 動態功率因數校正 (PFC) 算法

動態功率因數校正算法用于改善電源的功率因數,提高能源利用效率。

typedef struct {float voltage_rms;   // 電壓有效值float current_rms;   // 電流有效值float power_factor;  // 當前功率因數float target_pf;     // 目標功率因數float duty_cycle;    // PWM占空比
} PFC_Controller;void PFC_Update(PFC_Controller* pfc, float voltage, float current) {// 更新RMS值(使用簡化的移動平均法)pfc->voltage_rms = (pfc->voltage_rms * 0.9f) + (fabsf(voltage) * 0.1f);pfc->current_rms = (pfc->current_rms * 0.9f) + (fabsf(current) * 0.1f);// 計算功率因數(簡化計算,假設電壓和電流同相位)float apparent_power = pfc->voltage_rms * pfc->current_rms;float active_power = voltage * current;pfc->power_factor = active_power / apparent_power;// 調整PWM占空比以改善功率因數float pf_error = pfc->target_pf - pfc->power_factor;pfc->duty_cycle += pf_error * 0.01f;  // 簡單的比例調節// 限制占空比在有效范圍內pfc->duty_cycle = CLAMP(pfc->duty_cycle, 0.1f, 0.9f);
}float PFC_GetDutyCycle(PFC_Controller* pfc) {return pfc->duty_cycle;
}

說明:

  1. PFC_Controller?結構體包含了PFC所需的參數:

    • voltage_rms?和?current_rms: 電壓和電流的有效值
    • power_factor: 當前計算得到的功率因數
    • target_pf: 目標功率因數(通常接近1)
    • duty_cycle: 用于控制功率因數的PWM占空比
  2. PFC_Update?函數實現了PFC的核心邏輯:

    • 使用簡化的移動平均法更新電壓和電流的RMS值
    • 計算當前功率因數(這里使用了簡化計算,假設電壓和電流同相位)
    • 根據當前功率因數和目標功率因數的誤差調整PWM占空比
    • 將占空比限制在10%到90%之間,確保系統穩定性
  3. PFC_GetDutyCycle?函數用于獲取當前的PWM占空比,以便控制功率開關

使用說明:

  • 在主控制循環中定期調用?PFC_Update?函數,傳入實時的電壓和電流采樣值
  • 使用?PFC_GetDutyCycle?獲取計算得到的PWM占空比,并應用到功率控制電路
  • 根據實際系統特性,可能需要調整占空比調節的比例系數(當前為0.01)

注意事項:

  1. 這是一個簡化的PFC算法,實際應用中可能需要更復雜的相位檢測和控制策略。
  2. 功率因數的計算假設了電壓和電流同相位,這在實際系統中可能并不準確。更精確的實現應該考慮相位差。
  3. 移動平均法用于RMS計算是一種近似方法,對于快速變化的信號可能不夠準確。在高精度要求的場合,應考慮使用真RMS計算方法。
  4. 占空比的調整使用了簡單的比例控制,可能需要根據系統特性調整或采用更復雜的控制策略(如PI控制)。
  5. 算法沒有考慮電網頻率變化,在某些應用中可能需要頻率跟蹤功能。

改進建議:

  1. 實現相位檢測:使用零交叉檢測或DFT(離散傅里葉變換)來準確測量電壓和電流的相位差。
  2. 增加自適應控制:根據負載特性自動調整控制參數。
  3. 添加諧波分析:在某些應用中,可能需要考慮諧波對功率因數的影響。
  4. 實現軟啟動:在PFC啟動時,逐漸增加占空比以避免突然的電流沖擊。
  5. 故障檢測:添加過壓、過流等保護機制。

示例代碼擴展:

// 添加相位檢測功能
void PFC_DetectPhase(PFC_Controller* pfc, float voltage, float current) {// 使用零交叉檢測或其他方法檢測相位// 這里僅為示意,實際實現可能更復雜static float last_voltage = 0;if (voltage >= 0 && last_voltage < 0) {// 電壓零交叉點pfc->voltage_phase = 0;}if (current >= 0 && pfc->last_current < 0) {// 電流零交叉點,計算相對于電壓的相位差pfc->current_phase = (HAL_GetTick() - pfc->last_voltage_zero) / (1000.0f / 50.0f) * 360.0f;}last_voltage = voltage;pfc->last_current = current;
}// 更精確的功率因數計算
float PFC_CalculatePowerFactor(PFC_Controller* pfc) {return cosf(pfc->current_phase * PI / 180.0f);
}// 添加到主更新函數
void PFC_Update(PFC_Controller* pfc, float voltage, float current) {PFC_DetectPhase(pfc, voltage, current);// ... 其他更新邏輯 ...pfc->power_factor = PFC_CalculatePowerFactor(pfc);// ... 繼續原有的控制邏輯 ...
}

3. 系統集成

3.1 硬件集成

  1. PCB設計:使用Altium Designer進行四層PCB設計,考慮EMI/EMC布局。
  2. 熱管理:為關鍵組件(如功率MOSFET和電感)設計適當的散熱方案。
  3. 接口設計:包括電源輸入/輸出端子、通信接口(CAN, RS485)、調試接口(JTAG/SWD)。

3.2 軟件集成

  1. 驅動層集成:將各硬件驅動(ADC, PWM, CAN, RS485等)整合到ChibiOS的HAL層。
  2. 中間件集成:將FatFS文件系統與W25Q64 Flash驅動結合,實現數據存儲功能。
  3. 應用層集成:將PID控制、PFC算法、保護機制等模塊組合成完整的應用程序。

3.3 固件更新機制

實現基于CAN總線或RS485的在線固件更新功能:

typedef struct {uint32_t firmware_version;uint32_t firmware_size;uint32_t crc32;
} FirmwareHeader;bool UpdateFirmware(uint8_t* new_firmware, uint32_t size) {FirmwareHeader* header = (FirmwareHeader*)new_firmware;// 驗證固件if (CalculateCRC32(new_firmware + sizeof(FirmwareHeader), size - sizeof(FirmwareHeader)) != header->crc32) {return false;}// 擦除FlashFLASH_Erase(FIRMWARE_START_ADDRESS, header->firmware_size);// 寫入新固件FLASH_Write(FIRMWARE_START_ADDRESS, new_firmware + sizeof(FirmwareHeader), header->firmware_size);// 驗證寫入if (memcmp((void*)FIRMWARE_START_ADDRESS, new_firmware + sizeof(FirmwareHeader), header->firmware_size) != 0) {return false;}// 更新啟動標志UpdateBootFlag(header->firmware_version);return true;
}

4. 測試與驗證

4.1 單元測試

使用Unity測試框架對關鍵模塊進行單元測試:

void test_PID_controller(void) {PID_Controller pid = {1.0f, 0.1f, 0.01f, 0, 0, -100, 100};TEST_ASSERT_FLOAT_WITHIN(0.1f, 50.0f, PID_Update(&pid, 100, 50));TEST_ASSERT_FLOAT_WITHIN(0.1f, 25.0f, PID_Update(&pid, 100, 75));
}void test_soft_start(void) {SoftStart ss;SoftStart_Init(&ss, 12.0f, 1.0f);TEST_ASSERT_FLOAT_WITHIN(0.1f, 1.0f, SoftStart_Update(&ss));// Simulate 1 second passingss.last_update_time -= 1000;TEST_ASSERT_FLOAT_WITHIN(0.1f, 2.0f, SoftStart_Update(&ss));
}

4.2 集成測試

  1. 功能測試:驗證所有功能模塊的協同工作。
  2. 性能測試:測試系統在不同負載條件下的響應時間和穩定性。
  3. 壓力測試:在極限條件下運行系統,如最大負載、高溫環境等。
  4. 長期可靠性測試:連續運行系統至少 1000 小時,監控性能變化。

測試用例示例:

void test_full_system_startup(void) {// 模擬系統啟動SystemInit();// 驗證軟啟動TEST_ASSERT_TRUE(WaitForVoltageStable(12.0f, 5000));  // 等待電壓穩定在12V,超時5秒// 驗證PFC功能TEST_ASSERT_FLOAT_WITHIN(0.05f, 0.98f, GetPowerFactor());  // 功率因數應該接近1// 驗證通信功能TEST_ASSERT_TRUE(TestCANComm());TEST_ASSERT_TRUE(TestModbusComm());
}void test_load_transient_response(void) {// 設置初始負載SetLoad(5.0f);  // 5A負載// 等待系統穩定Delay(1000);// 突然增加負載SetLoad(10.0f);  // 增加到10A// 檢查電壓恢復時間uint32_t recovery_time = MeasureVoltageRecoveryTime(11.5f, 12.5f);TEST_ASSERT_LESS_THAN(500, recovery_time);  // 恢復時間應小于500ms
}

4.3 EMC/EMI 測試

  1. 傳導發射測試:確保系統符合 CISPR 22/EN 55022 標準。
  2. 輻射發射測試:驗證系統在正常運行時不會產生過量電磁干擾。
  3. 抗擾度測試:測試系統對外部電磁干擾的抵抗能力,包括 ESD、浪涌等。

5. 項目總結

本智能電源管理系統項目成功實現了以下目標:

  1. 基于 STM32G4 的高性能數字控制電源系統,支持精確的電壓和電流調節。
  2. 實現了先進的 PFC 算法,顯著提高了系統的功率因數。
  3. 集成了多種保護機制,確保系統在各種條件下安全可靠運行。
  4. 通過 CAN 和 Modbus 協議實現了靈活的通信和遠程管理功能。
  5. 軟啟動和自適應控制算法提高了系統的穩定性和適應性。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/45634.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/45634.shtml
英文地址,請注明出處:http://en.pswp.cn/web/45634.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

HTML5+CSS3小實例:純CSS實現奧運五環

實例:純CSS實現奧運五環 技術棧:HTML+CSS 效果: 源碼: 【HTML】 <!DOCTYPE html> <html lang="zh-CN"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-sca…

Spring MVC中Restful風格引入

一&#xff0c;RESTful概述 在現代Web應用開發中&#xff0c;RESTful架構風格已成為一種標準實踐&#xff0c;特別是在構建可擴展的Web服務時。Spring MVC提供了全面的支持來構建遵循REST原則的Web服務。我在此介紹如何在Spring MVC中實現RESTful風格的Web服務&#xff0c;并通…

【八大排序】java版(上)(冒泡、快排、堆排、選擇排序)

文章目錄 一、冒泡排序(重點)思路代碼 二、快排(面試重點)思路代碼 三、堆排序(面試重點)思路代碼 四、選擇排序思路代碼 一、冒泡排序(重點) 思路 前后兩兩數據進行比較&#xff0c;小的數據往前走&#xff0c;大的數據往后走&#xff0c;每一輪結束之后&#xff0c;最大的數…

網頁數據抓取:融合BeautifulSoup和Scrapy的高級爬蟲技術

網頁數據抓取&#xff1a;融合BeautifulSoup和Scrapy的高級爬蟲技術 在當今的大數據時代&#xff0c;網絡爬蟲技術已經成為獲取信息的重要手段之一。Python憑借其強大的庫支持&#xff0c;成為了進行網頁數據抓取的首選語言。在眾多的爬蟲庫中&#xff0c;BeautifulSoup和Scrap…

在Android Jetpack Compose中實現夜間模式

在Android Jetpack Compose中實現夜間模式 隨著用戶對夜間模式需求的增加,Android開發者需要掌握如何在應用中實現這一功能。Jetpack Compose作為現代Android UI工具包,提供了簡便且靈活的方式來實現夜間模式。本文將詳細介紹如何在Jetpack Compose中實現夜間模式,包括配置…

Linux系統之玩轉fortune命令

Linux系統之好玩的fortune命令 一、fortune命令介紹1.1 fortune簡介1.2 fortune中英文 二、本地環境介紹2.1 本地環境規劃2.2 本次實踐介紹 三、檢查本地環境3.1 檢查本地操作系統版本3.2 檢查系統內核版本 四、fortune英文版的使用4.1 安裝fortune英文版4.2 命令幫助4.3 fortu…

69、Flink 的 DataStream Connector 之 Kafka 連接器詳解

1.概述 Flink 提供了 Kafka 連接器使用精確一次&#xff08;Exactly-once&#xff09;的語義在 Kafka topic 中讀取和寫入數據。 目前還沒有 Flink 1.19 可用的連接器。 2.Kafka Source a&#xff09;使用方法 Kafka Source 提供了構建類來創建 KafkaSource 的實例。以下代…

安卓手機刷入Magisk面具教程

手機如果想獲取 Root 權限&#xff0c;刷入面具是必要的做法。本期文章將會教你如何刷入 Magisk 面具。 準備工作 Magisk: 關注微信公眾號 heStudio Community回復 magisk 獲取下載鏈接。第三方 Recovery&#xff08;官方 Recovery 能玩出什么花樣&#xff1f;&#xff1f;&a…

PDM系統:企業產品數據管理、PDM系統哪個好

PDM系統&#xff1a;企業產品數據管理、PDM系統哪個好 在當今這個數據驅動的時代&#xff0c;企業產品數據管理&#xff08;PDM&#xff09;系統已成為企業提升競爭力、加速產品創新、優化生產流程的關鍵工具。PDM系統不僅是一個技術平臺&#xff0c;更是企業實現數字化轉型的重…

防火墻負載分擔,帶寬策略

一、實驗拓撲圖 二、實驗要求 12&#xff0c;對現有網絡進行改造升級&#xff0c;將當個防火墻組網改成雙機熱備的組網形式&#xff0c;做負載分擔模式&#xff0c;游客區和DMZ區走FW3&#xff0c;生產區和辦公區的流量走FW1 13&#xff0c;辦公區上網用戶限制流量不超過100M&a…

昇思25天學習打卡營第23天|基于MobileNetv2的垃圾分類

基于MobileNetv2的垃圾分類 1、實驗目的 了解熟悉垃圾分類應用代碼的編寫&#xff08;Python語言&#xff09;&#xff1b;了解Linux操作系統的基本使用&#xff1b;掌握atc命令進行模型轉換的基本操作。 2、MobileNetv2模型原理介紹 MobileNet網絡是由Google團隊于2017年提…

在 Debian 12 上安裝 budgie-extras-common 包

在 Debian 12 上安裝 budgie-extras-common 包&#xff1a; 安裝前的準備 更新 apt 數據庫&#xff1a; 使用 apt-get:sudo apt-get update或者使用 apt:sudo apt update如果使用 aptitude&#xff08;通常不在 Debian 默認安裝中&#xff09;&#xff0c;首先需要安裝它&…

效能工具:執行 npm start 可直接切換proxy代理UR后直接啟動項目

1) 背景: 我們項目是2個前端3個后端的配置。前端和每個后端都有需要調試的接口。 因此經常切換vite.congig.js中的proxy后端代理鏈接&#xff0c;是挺麻煩的。 于是我研究如何能快速切換后端URL&#xff0c;所幸懶人有懶福&#xff0c;我找到了Inquirer 和 fs&#xff0c; 實…

根據日志繪制障礙物輪廓點和中心點

繪制log中的障礙物凸包點&#xff0c;首先給出log日志中的障礙物的凸包點 [Info]-[PointCloudHandle:88]:[2024-07-14,09:55:41.052]-back obj size 6 [Info]-[PointCloudHandle:92]:[2024-07-14,09:55:41.052]-back obj size 6 cur idx 1 [Info]-[PointCloudHandle:93]:[2024…

極客筆記【收藏】

1. 鴻蒙調試命令&#xff08;adb&#xff09;&#xff1a; OH HDC命令使用指南|極客筆記 2. 添加selinux 權限 Android 根據AVC報錯添加Selinux 權限|極客筆記

【面試題】Golang 鎖的相關問題(第七篇)

目錄 1.Mutex 幾種狀態 1. 鎖定狀態&#xff08;Locked&#xff09; 2. 未鎖定狀態&#xff08;Unlocked&#xff09; 3. 喚醒狀態&#xff08;Woken&#xff09; 4. 饑餓狀態&#xff08;Starving&#xff09; 5. 等待者計數&#xff08;Waiters Count&#xff09; 總結…

STM32+TMC2209控制步進電機正反轉。

STM32F103ZET6TMC2209控制步進電機正反轉 1. 步進電機介紹2 驅動器TMC2209介紹2.1 引腳圖及其功能2.2 細分介紹2.3 TMC控制驅動器接法 3 控制器介紹3.1 確定控制引腳3.2 UBEMX配置3.2.1 GPIO配置3.2.2 NVIC配置3.2.3 RCC配置3.2.4 SYS配置3.2.5 USRAT2配置&#xff08;PS:沒用上…

單相電機或風扇接電容的具體接線方法示例

單相電機或風扇接電容的具體接線方法示例 如下圖所示&#xff0c;單相電機引出3根繞組線&#xff08;不同品牌或型號的電機&#xff0c;引出線的顏色可能會有差異&#xff09;&#xff0c; 那么如何進行接線呢&#xff1f; 首先&#xff0c;跳過萬用表測量主、副繞組的阻值…

Unable to obtain driver using Selenium Manager: Selenium Manager failed解決方案

大家好,我是愛編程的喵喵。雙985碩士畢業,現擔任全棧工程師一職,熱衷于將數據思維應用到工作與生活中。從事機器學習以及相關的前后端開發工作。曾在阿里云、科大訊飛、CCF等比賽獲得多次Top名次。現為CSDN博客專家、人工智能領域優質創作者。喜歡通過博客創作的方式對所學的…