肖培+薛頂柱+錢鴻志+席嘉俊
摘 要:人參下須的原理是通過比較某一人參須干的直徑是否小于設(shè)定數(shù)值,小于則實行剪切操作的過程。針對這一點,文章設(shè)計了一種基于機器視覺的三軸傳動切割系統(tǒng),系統(tǒng)運用圖像處理技術(shù),將圖像經(jīng)過二值化處理,然后合并成簡單的三維圖像,通過判斷物體的直徑是否小于設(shè)定的數(shù)值,小于則利用三軸傳動切割系統(tǒng)進行切割操作,從而實現(xiàn)對規(guī)則物體的定直徑切割。文章將從機械結(jié)構(gòu)、硬件系統(tǒng)設(shè)計及軟件系統(tǒng)設(shè)計三個方面對系統(tǒng)進行詳細的介紹。
關(guān)鍵詞:機器視覺;三軸傳動;STM32F407ZGT6;二值化;切割系統(tǒng)
機器視覺是研究用計算機來模擬生物視覺的科學技術(shù)[1]。機器視覺自起步到現(xiàn)在,已有幾十年歷史。在這幾十年里,機器視覺蓬勃發(fā)展,各種新概念、新理論不斷涌現(xiàn)。如今,中國作為世界機器視覺發(fā)展最活躍的地區(qū)之一,應(yīng)用范圍涵蓋了國民經(jīng)濟的各個行業(yè)。
人參下須是將人參須與主枝干分離的過程,目前人參下須采用的是人工下須,此種方法耗時耗力,由于這點,本文提出的一種基于機器視覺的三軸傳動切割系統(tǒng),系統(tǒng)運用簡單的圖像處理,結(jié)合三軸傳動技術(shù),可以對規(guī)則物體進行定直徑的切割。以Cortex-M4為內(nèi)核的STM32F4微處理器具有能產(chǎn)生多路PWM輸出的TIM和帶有獨立采樣電路的ADC,其控制系統(tǒng)外圍電路簡單,實時控制速度快,穩(wěn)定可靠,性價比高,非常適合用作三軸傳動系統(tǒng)的驅(qū)動器[2]。
1 系統(tǒng)總體結(jié)構(gòu)設(shè)計
如圖1所示,系統(tǒng)包括PC端、圖像采集端以及控制端。圖像采集端共有兩套圖像采集裝置,負責采集對應(yīng)的圖像;PC端則負責將采集到的圖像數(shù)據(jù)轉(zhuǎn)換成對應(yīng)的控制指令,然后通過串口通信,發(fā)送給控制端;控制端的控制器采用高性能的STM32F407ZGT6開發(fā)板,負責步進電機及切割頭的控制;同時,控制端還有一個5寸的LCD觸控顯示屏,可以顯示切割頭的位置以及對應(yīng)的控制狀態(tài),還可以實時控制系統(tǒng)進行切割操作[2]。
2 系統(tǒng)機械設(shè)備概述
本系統(tǒng)是以切割對象的三軸坐標為基礎(chǔ),將對應(yīng)的三軸坐標轉(zhuǎn)換成機架的空間位移,讓切割頭能夠到達指定切割點的切割系統(tǒng)。系統(tǒng)機械部分由機械平臺、三軸傳動系統(tǒng)和切割頭組成[3]。
系統(tǒng)的機械平臺由30cm×30cm×50cm的鋁型框架搭建而成,三軸傳動系統(tǒng)如圖2所示,以步進電機為動力源,其中xy平面采用H型結(jié)構(gòu),能夠更好的控制xy平面切割的精準度;切割頭由微型高速電機和切割片構(gòu)成;三部分相互結(jié)合,可以實現(xiàn)定點定距切割,同時保證切割的精確性。
3 硬件系統(tǒng)設(shè)計
3.1步進電機控制原理
步進電機是一種可以將電脈沖信號轉(zhuǎn)變?yōu)榻俏灰频臄?shù)字控制電動機。未超載時,通過改變脈沖信號的頻率和脈沖數(shù)就可以改變電機轉(zhuǎn)速和停止的位置。當使用步進電機驅(qū)動器時,只需要給其一個脈沖信號和方向信號,就能使步進電機按照指定的速率和方向轉(zhuǎn)到指定的位置。
3.2 DRV8825驅(qū)動器和cnc shield v3 擴展板
DRV8825 是德州儀器 (TI) 為打印機、掃描儀和其他自動化設(shè)備設(shè)計的集成電機驅(qū)動芯片。它集成了2 個H 橋電路,以及片上1/32微步進分度器,可以驅(qū)動一個雙極型電機,或兩個直流有刷電機[6]。
cnc shield v3 擴展板可用作雕刻機,3D打印機等的驅(qū)動擴展板,擴展板一共有4路步進電機驅(qū)動模塊的插槽,可驅(qū)動4路步進電機,而每一路步進電機都只需要2個IO口,也就是說,6個IO口就可以很好的管理3個步進電機,使用起來非常的方便,告別傳統(tǒng)步進電機操作繁瑣。此處搭配DRV8825驅(qū)動模塊用作三軸傳動系統(tǒng)的驅(qū)動擴展板。
3.3 控制器選型
三軸傳動系統(tǒng)的控制器采用STM32系列中的STM32F407ZGT6,該控制器采用Cortex_M4內(nèi)核,共擁有112個I/O口,這些I/O口可以控制電機的轉(zhuǎn)動速率和旋轉(zhuǎn)方向、LCD觸控屏數(shù)據(jù)的顯示與采集以及切割頭的運動狀態(tài)。
4 軟件系統(tǒng)設(shè)計
4.1PC端圖像處理軟件
4.1.1 圖像二值化
圖像二值化的目的是最大限度的將圖像中感興趣的部分保留下來,在很多情況下,也是進行圖像分析、特征提取與模式識別之前的必要的圖像預處理過程。
本軟件使用的二值化算法為基于谷底最小值的閾值算法,此方法實用于具有明顯雙峰直方圖的圖像,其尋找雙峰的谷底作為閾值。該函數(shù)的實現(xiàn)是一個迭代的過程,每次處理前對直方圖數(shù)據(jù)進行判斷,看其是否已經(jīng)是一個雙峰的直方圖,如果不是,則對直方圖數(shù)據(jù)進行半徑為1(窗口大小為3)的平滑,如果迭代了一定的數(shù)量比如1000次后仍未獲得一個雙峰的直方圖,則函數(shù)執(zhí)行失敗,如成功獲得,則最終閾值取兩個雙峰之間的谷底值作為閾值[7][8]。圖3是效果圖。
4.1.2 軟件流程設(shè)計
PC端圖像處理軟件采用C#語言進行編寫,流程圖如圖4所示,軟件首先從兩個攝像頭各獲取一幅圖片,然后對圖像進行灰度和二值化處理,將處理后的圖片合成三維圖像,然后再調(diào)用對應(yīng)的掃描函數(shù)得出對應(yīng)的切割指令,最后通過串口發(fā)送給控制器。
4.2 控制端軟件
4.2.1 UCOS-II操作系統(tǒng)移植
UCOS-II的前身是UCOS,最早出自于1992年美國嵌入式系統(tǒng)專家Jean J- Labrosse 在《嵌入式系統(tǒng)編程》雜志的5月和6月刊上刊登的文章連載,并把UCOS的源碼發(fā)布在該雜志的BBS 上。本系統(tǒng)移植的是UCOS-II 的2.91版本[9]。
UCOSII的移植,我們只需要修改:os_cpu.h、os_cpu_a.asm 和os_cpu.c 等三個文件即可,其中:os_cpu.h,進行數(shù)據(jù)類型的定義,以及處理器相關(guān)代碼和幾個函數(shù)原型;os_cpu_a.asm,是移植過程中需要匯編完成的一些函數(shù),主要就是任務(wù)切換函數(shù);os_cpu.c,定義一些用戶HOOK函數(shù)。
4.2.2 相關(guān)初始化函數(shù)
系統(tǒng)移植后,如圖5所示,首先需要對系統(tǒng)進行初始化,部分初始化函數(shù)聲明如下:
//6個限位開關(guān)I/O初始化,用于系統(tǒng)位置校正
void RESET_XYZ_Init(void);
//串口初始化
//bound:設(shè)置波特率
void UART_Init(u32 bound);
//獨立看門狗初始化,防止程序跑飛
//prer:分頻數(shù):0-7(只有低三位有效)rlr:自動裝載初值:0-0xFFF
//分頻因子:4*2^prer 但最大只能是256
//rlr:重裝載寄存器值:低11位有效
//時間計算:Tout=((4*2^prer)*rlr)/32 (ms)
void IWGD_Init(u8 prer,u16 rlr);
//切割頭初始化
void Cut_Init(void);
//LCD觸摸屏初始化
void LCD_Init(void);
4.2.3 系統(tǒng)任務(wù)創(chuàng)建
UCOS-II 2.91版本支持最大255個任務(wù),不過對于我們來說,一般64個任務(wù)就足夠了。
整個系統(tǒng)一共創(chuàng)建以下5個任務(wù):
//START任務(wù):執(zhí)行LCD界面初始化,位置校正以及創(chuàng)建以下4個任務(wù)
#define START_TASK_PRIO 5 //設(shè)置任務(wù)優(yōu)先級
#define START_STK_SIZE 64//設(shè)置任務(wù)堆棧大小
OS_STK START_TASK_STK[START_STK_SIZE];//任務(wù)堆棧
void start_task(void *pdata);//任務(wù)函數(shù)
//看門狗任務(wù):防止系統(tǒng)跑飛
#define DOG_TASK_PRIO 4 //設(shè)置任務(wù)優(yōu)先級
#define DOG_STK_SIZE 64//設(shè)置任務(wù)堆棧大小
OS_STK DOG _TASK_STK[DOG _STK_SIZE];//任務(wù)堆棧
void dog_task(void *pdata);//任務(wù)函數(shù)
//串口數(shù)據(jù)接收任務(wù):接收并處理來自串口的數(shù)據(jù)
#define UART_TASK_PRIO 3 //設(shè)置任務(wù)優(yōu)先級
#define UART _STK_SIZE 128//設(shè)置任務(wù)堆棧大小
OS_STK UART _TASK_STK[UART _STK_SIZE];//任務(wù)堆棧
void uart_task(void *pdata);//任務(wù)函數(shù)
//LCD任務(wù):用于LCD的顯示以及接收相關(guān)的操作指令
#define LCD_TASK_PRIO 2 //設(shè)置任務(wù)優(yōu)先級
#define LCD_STK_SIZE 128//設(shè)置任務(wù)堆棧大小
OS_STK LCD_TASK_STK[LCD_STK_SIZE];//任務(wù)堆棧
void lcd_task(void *pdata);//任務(wù)函數(shù)
//輕觸開關(guān)檢測任務(wù):當切割頭越界時,用于重新校正
#define KEY_TASK_PRIO 1 //設(shè)置任務(wù)優(yōu)先級
#define KEY_STK_SIZE 64//設(shè)置任務(wù)堆棧大小
OS_STK KEY_TASK_STK[KEY_STK_SIZE];//任務(wù)堆棧
void key_task(void *pdata);//任務(wù)函數(shù)
5 結(jié)束語
本文設(shè)計的系統(tǒng)現(xiàn)在只能對規(guī)則的物體進行定直徑切割,例如,可以切割圓錐體或者四面體直徑小于某一數(shù)值的部分。相信在接下來的時間里,通過優(yōu)化PC端的圖像處理軟件算法,最終可以完成對不規(guī)則物體的定直徑切割。系統(tǒng)的三軸傳動切割子系統(tǒng)通過升級或更改對應(yīng)的部件,也可以適用于多種場合,例如,3D打印機的機械部分基本都是采用三軸傳動系統(tǒng)。
參考文獻
[1]田原 ,黃合成,譚慶昌,等.基于機器視覺的零件尺寸測量[J].激光與光電子學進展,2010,01:82-90.
[2]張團善,張娜,武玉婷.基于增強型STM32驅(qū)動雙極步進電機的研究[J].電子測量技術(shù),2010,10:16-18+55.
[3]張斌.3D打印驅(qū)動關(guān)鍵技術(shù)研究[D].北京印刷學院,2015.
[4]庫少平,劉晶.基于STM32F10x和MDK的步進電機控制系統(tǒng)設(shè)計[J].武漢理工大學學報,2009,03:107-110.
[5]羅鑫,張峰.基于ARM Cortex-M3的步進電機線性速度控制的實現(xiàn)[J].電氣自動化,2009,05:42-44.
[6]吳迪.基于DRV8825的打印機電機驅(qū)動電路設(shè)計[J].電子技術(shù)與軟件工程,2013,11:62.
[7]J. M. S. Prewitt and M. L. Mendelsohn, “The analysis of cell images,” innnals of the New York Academy of Sciences, 1966,128:1035-1053.
[8]C. A. Glasbey, “An analysis of histogram-based thresholding algorithms,” CVGIP: Graphical Models and Image Processing, 1993,55:532-537.
[9]張洋,劉軍,嚴漢宇,等. 精通STM32F4(庫函數(shù)版)[M].北京:北京航空航天大學出版社, 2015.
作者簡介:肖培(1996-),男,漢族,湖南邵陽,在讀本科生,研究方向:嵌入式開發(fā)。