在智慧製造與自動化檢測領域,工業視覺系統已成為提升生產精度與效率的核心工具。而STM32憑藉其高即時性、低功耗及豐富的外設資源,成為實現工業相機觸發控制與影像同步採集的理想平臺。本文將從硬體選型、觸發邏輯設計、同步控制策略及實戰案例四個維度,系統解析STM32在視覺採集中的關鍵技術,助力開發者構建穩定、穩妥的工業視覺系統。
一、工業視覺系統架構:STM32的核心角色
1.1 典型系統組成
工業視覺系統通常由以下模組構成:
工業相機:支援外部觸發(如GPIO、光耦隔離輸入)的高解析度相機(如Basler、FLIR、海康威視等品牌)。
STM32控制板:負責觸發訊號生成、光源控制、影像採集同步及與上位機通訊。
光源系統:透過PWM或數字訊號控制LED光源的亮度與頻閃(如環形光、背光源)。
上位機/PLC:接收影像資料並執行演算法分析(如缺陷檢測、尺寸測量)。
1.2 STM32的優勢
即時性:透過硬體定時器(TIM)或PWM模組生成納秒級觸發訊號,滿足高速採集需求。
靈活性:支援多種觸發模式(如單次觸發、連續觸發、編碼器同步觸發)。
低成本:相比專用視覺控制器,STM32方案可有所降低以上的硬體成本。
二、工業相機觸發控制:硬體介面與訊號設計
2.1 觸發訊號型別
工業相機通常支援以下觸發方式:
硬體觸發:透過GPIO輸入(如上升沿/下降沿)啟動曝光。
軟體觸發:透過相機SDK傳送指令(如GigE Vision協議的
ForceTrigger命令)。編碼器同步觸發:根據電機編碼器脈衝生成與運動同步的觸發訊號(適用於飛拍場景)。
2.2 STM32硬體介面設計
GPIO觸發:配置為輸出模式,透過
HAL_GPIO_WritePin()生成觸發脈衝。c// 示例:生成10μs寬度的觸發脈衝(STM32 HAL庫)HAL_GPIO_WritePin(TRIGGER_GPIO_Port, TRIGGER_Pin, GPIO_PIN_SET);HAL_Delay(10); // 粗略延時(實際需用定時器或DWT計數器)HAL_GPIO_WritePin(TRIGGER_GPIO_Port, TRIGGER_Pin, GPIO_PIN_RESET);
定時器觸發:使用TIM的PWM模式或輸出比較模式生成精確脈衝。
c// 示例:TIM2通道1生成100kHz觸發訊號(週期10μs,高電平1μs)TIM_OC_InitTypeDef sConfigOC;sConfigOC.OCMode = TIM_OCMODE_PWM1;sConfigOC.Pulse = 1; // 高電平時間(CCR值)sConfigOC.Period = 10; // PWM週期(ARR值)HAL_TIM_PWM_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_1);HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_1);
光耦隔離觸發:透過光耦(如TLP521)隔離STM32與相機,提升抗干擾能力。
2.3 觸發時序最佳化
曝光時間匹配:觸發訊號需與相機曝光時間(由上位機設定)同步,避免影像過曝或欠曝。
延遲補償:測量STM32觸發訊號到相機實際曝光的延遲(通常<1μs),透過軟體調整觸發時刻。
三、影像同步控制:多相機/多感測器協同
3.1 多相機同步採集
硬體同步:透過同一觸發訊號驅動多臺相機(需相機支援級聯觸發)。
軟體同步:STM32分別觸發各相機,並透過時間戳或編碼器位置對齊影像資料。
c// 示例:雙相機同步觸發(使用兩個定時器通道)HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_1); // 觸發相機1HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_2); // 觸發相機2(需相位對齊)
3.2 光源與相機同步
頻閃控制:透過PWM調節光源亮度,並與相機曝光時間同步(如曝光期間光源全亮)。
c// 示例:光源PWM控制(與相機曝光同步)void Camera_ExposureCallback() { HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_1); // 曝光時開啟光源 HAL_Delay(exposureTime); // 曝光持續時間 HAL_TIM_PWM_Stop(&htim3, TIM_CHANNEL_1); // 曝光結束關閉光源}編碼器同步光源:根據運動速度動態調整光源頻閃頻率,避免運動模糊。
3.3 外部事件同步
編碼器觸發:透過STM32的編碼器介面(TIM的編碼器模式)讀取電機位置,在特定位置觸發相機。
c// 示例:編碼器位置觸發(TIM1編碼器模式)if (TIM1->CNT >= targetPosition) { HAL_GPIO_WritePin(TRIGGER_GPIO_Port, TRIGGER_Pin, GPIO_PIN_SET); // 觸發相機 TIM1->CNT = 0; // 重置計數器}感測器聯動:結合光電開關、雷射位移感測器等,實現條件觸發(如檢測到物體時觸發相機)。
四、實戰案例:基於STM32的缺陷檢測系統
4.1 系統需求
相機:500萬畫素工業相機,支援外部觸發。
光源:高頻閃LED環形光。
運動控制:步進電機驅動傳送帶,編碼器反饋位置。
檢測任務:即時檢測產品表面缺陷(如劃痕、汙點)。
4.2 開發步驟
硬體連線:
STM32 GPIO輸出 → 相機觸發輸入(光耦隔離)。
STM32 PWM輸出 → 光源驅動模組。
編碼器訊號 → STM32 TIM編碼器介面。
觸發邏輯實現:
配置TIM2生成1kHz觸發訊號(週期1ms,適配相機較大幀率)。
在編碼器中斷中動態調整觸發相位,有助於支援影像採集位置一致。
同步控制最佳化:
透過示波器測量觸發訊號與光源PWM的相位關係,最佳化時序。
在上位機(如OpenCV或Halcon)中驗證影像對齊精度(誤差<0.1mm)。
效能測試:
連續觸發10萬次,統計丟幀率(目標<專案要求範圍內)。
測量從觸發到影像傳輸至PC的延遲(通常<10ms)。
程式碼示例(STM32編碼器觸發+光源同步):
c// 主迴圈中處理編碼器位置與觸發while (1) { currentPos = TIM1->CNT; // 讀取編碼器位置 if (currentPos >= nextTriggerPos) { HAL_GPIO_WritePin(TRIGGER_GPIO_Port, TRIGGER_Pin, GPIO_PIN_SET); // 觸發相機 HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_1); // 開啟光源 HAL_Delay(exposureTime); HAL_TIM_PWM_Stop(&htim3, TIM_CHANNEL_1); // 關閉光源 HAL_GPIO_WritePin(TRIGGER_GPIO_Port, TRIGGER_Pin, GPIO_PIN_RESET); nextTriggerPos += triggerInterval; // 計算下一次觸發位置 }}五、總結:STM32視覺採集開發的核心要點
觸發訊號設計:根據相機規格選擇GPIO、定時器或編碼器觸發,有助於支援訊號精度與穩定性。
同步控制策略:透過硬體同步(級聯觸發)或軟體同步(時間戳對齊)實現多相機/多感測器協同。
光源與運動控制:結合PWM頻閃與編碼器反饋,最佳化影像質量與檢測效率。
效能驗證:透過示波器、邏輯分析儀及上位機工具測試觸發延遲、丟幀率等關鍵指標。
線上諮詢
電話諮詢
微信諮詢
回到頂部