基于單片機大蒜精包裝系統(tǒng)設(shè)計_第1頁
基于單片機大蒜精包裝系統(tǒng)設(shè)計_第2頁
基于單片機大蒜精包裝系統(tǒng)設(shè)計_第3頁
基于單片機大蒜精包裝系統(tǒng)設(shè)計_第4頁
基于單片機大蒜精包裝系統(tǒng)設(shè)計_第5頁
已閱讀5頁,還剩39頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

河北理工大學(xué)信息學(xué)院 摘要 ix2功能與設(shè)計方案2.1系統(tǒng)功能要求大蒜精包裝系統(tǒng)功能要求中,傳送帶啟??刂品譃閱优c停止兩個狀態(tài),紅外傳感器1完成定位后傳送帶停止,攝像頭模塊對大蒜顏色進行識別,紫色為良品,非紫色大蒜借助電機分揀剔除。紅外傳感器2二次定位后傳送帶停止稱重,依據(jù)預(yù)設(shè)閾值將大蒜分為一級和二級,分揀電機進行分級處理,紅外傳感器3三次定位后傳送帶停止自動封裝。系統(tǒng)配備OLED顯示屏顯示參數(shù)與狀態(tài)信息,按鍵可調(diào)整分級閾值參數(shù),系統(tǒng)需精準識別紫色大蒜,準確剔除非紫色大蒜,重量分級可靠,自動化程度高且操作簡便。2.2系統(tǒng)設(shè)計方案以STM32F103單片機為核心的大蒜精包裝系統(tǒng)設(shè)計方案整合了多種功能模塊,形成完整的自動化分裝流程。系統(tǒng)啟動后,傳送帶載著大蒜向前移動,當?shù)谝粋€紅外傳感器檢測到大蒜到位時,傳送帶立即停止,K210攝像頭啟動并基于HSV色彩空間分析捕獲的圖像,精確識別大蒜是否為紫色品種;若檢測為非紫色大蒜,第一組SG90舵機迅速轉(zhuǎn)動90°,將不合格品推離傳送帶至廢品收集區(qū),保證后續(xù)加工的原料質(zhì)量;紫色大蒜則繼續(xù)前行直至第二個紅外傳感器處停止,HX711重量傳感器隨即啟動測量功能,以±0.5g的高精度獲取大蒜重量,并與預(yù)設(shè)閾值(默認10g,可通過系統(tǒng)按鍵調(diào)整)進行比對;重量超過閾值的大蒜被分類為一級品,低于閾值的歸為二級品,第二組舵機根據(jù)分級結(jié)果轉(zhuǎn)向相應(yīng)角度,將大蒜導(dǎo)入對應(yīng)等級的傳送通道;兩級大蒜分別沿各自通道繼續(xù)前進,當觸發(fā)第三個紅外傳感器時,傳送帶再次停止,第三組舵機控制封裝機構(gòu)將預(yù)先準備好的對應(yīng)規(guī)格包裝袋打開,同時專用導(dǎo)料裝置精確地將大蒜導(dǎo)入包裝袋中,熱封裝置隨即啟動完成密封過程,確保包裝完整性;整個過程中,OLED顯示模塊實時更新系統(tǒng)狀態(tài)、識別結(jié)果、當前重量和處理統(tǒng)計數(shù)據(jù),為操作人員提供直觀信息;系統(tǒng)采用分層軟件架構(gòu),底層驅(qū)動控制硬件,中間層實現(xiàn)功能模塊操作,上層管理工作流程和狀態(tài)轉(zhuǎn)換,各模塊通過明確定義的接口進行數(shù)據(jù)交換,確保信號傳輸穩(wěn)定;關(guān)鍵控制節(jié)點均增設(shè)濾波措施和保護電路,有效應(yīng)對工作環(huán)境中的電磁干擾;傳送帶速度、舵機轉(zhuǎn)動角度和分級閾值等參數(shù)可根據(jù)不同批次大蒜特性靈活調(diào)整,使系統(tǒng)適應(yīng)性強,實現(xiàn)了從原料輸入到成品包裝的全流程自動化,有效提升大蒜加工效率和產(chǎn)品品質(zhì)一致性。圖2.1系統(tǒng)硬件模塊工作框圖2.3器件方案對比2.3.1單片機的選擇方案一:STC12C5A60S2單片機的8051核心結(jié)構(gòu)成本低且易于使用,內(nèi)部芯片包含60KB的Flash程序存儲器和1280字節(jié)RAM,支持ISP/IAP功能,最高工作頻率為35MHz,其8通道10位A/D轉(zhuǎn)換器能夠滿足基本模擬量采集需求,同時在I/O接口方面提供了32個I/O口和2個全雙工UART串口,可應(yīng)對一般通信需求,數(shù)據(jù)總線為8位,運算速度較慢,處理能力有限,復(fù)雜圖像識別算法的運算需求較難滿足,外設(shè)接口較少,在復(fù)雜系統(tǒng)中對多種通信接口的擴展性支持不足,部分功能受限顯著,應(yīng)用受到這些缺陷的顯著性制約[9]。方案二:STM32F103為基于ARMCortex-M3內(nèi)核的32位微控制器,高性能與低功耗特征相當顯著,主頻最高可到72MHz,內(nèi)部包含64KB到128KBFlash存儲器,20KBRAM,運算能力遠超8位單片機,外設(shè)接口豐富,包括多達80個I/O口,3個USART,2個SPI,2個I2C,12位ADC等,復(fù)雜系統(tǒng)的連接需求能夠完全達到。STM32F103能夠支持多種總線協(xié)議,為各類傳感器模塊的連接提供了便利,該芯片支持DMA傳輸,數(shù)據(jù)處理的高效性在圖像處理等要求較高的應(yīng)用中尤為重要。開發(fā)工具逐步完善,庫函數(shù)也逐步增加,開發(fā)難度顯著降低,大蒜精包裝系統(tǒng)需要完成圖像識別與多傳感器數(shù)據(jù)融合等復(fù)雜任務(wù),最終選擇STM32F103作為系統(tǒng)的核心控制器,開發(fā)過程逐步實現(xiàn)[10]。2.3.2顯示模塊的選型方案一:LCD12864液晶顯示模塊采用點陣形式,分辨率為128×64像素,漢字與圖形的顯示都可支持,ST7920控制器在該模塊中使用,接口方式包含8位并行,4位并行和串行等,接口靈活度較高。成本較低且顯示面積大的LCD12864適合較多文字與簡單圖形的顯示,驅(qū)動方式成熟,庫函數(shù)支持也較多,開發(fā)難度不高,對比度不高的LCD12864,在不同角度與光線條件下可讀性較差,功耗較高,刷新速度慢,頻繁更新顯示內(nèi)容的應(yīng)用不適合采用該模塊,體積較大,空間受限系統(tǒng)集成困難[11]。方案二:OLED顯示模塊借助有機發(fā)光二極管技術(shù),自發(fā)光的特性使背光源變得可省,LCD12864分辨率同樣為128×64像素,但顯示效果更佳,高對比度,寬視角與響應(yīng)速度快的特點,使OLED在各種光線條件下都具有良好的可讀性。SSD1306控制器支持I2C,SPI通信接口,該模塊僅需2-4根信號線即可連接單片機,節(jié)省了I/O資源,低功耗,特別是在部分顯示內(nèi)容時更為省電,體積小且厚度薄,便于系統(tǒng)集成,大蒜精包裝系統(tǒng)需在不同環(huán)境下清晰顯示系統(tǒng)狀態(tài)與參數(shù),空間受限,最終選擇OLED顯示模塊作為顯示單元[12]。2.4本章小結(jié)本章詳細說明基于單片機大蒜精包裝系統(tǒng)的功能要求與設(shè)計方案,系統(tǒng)任務(wù)包含大蒜自動定位,顏色識別,分揀,稱重,分級和封裝等,相關(guān)參數(shù)通過OLED顯示。設(shè)計方案以STM32F103單片機為核心,集成多種傳感器與執(zhí)行模塊,采用模塊化設(shè)計理念,硬件選型時對比STC12C5A60S2與STM32F103的性能特點,處理能力更強且外設(shè)接口更豐富的STM32F103作為控制核心,顯示模塊選型對比LCD12864與OLED的各項性能指標后,選擇了對比度高,視角寬,體積小的OLED顯示模塊,系統(tǒng)穩(wěn)定運行基礎(chǔ)在硬件選型中逐步生成。附錄B3系統(tǒng)的硬件設(shè)計3.1STM32F103C8T6單片機STM32F103單片機在系統(tǒng)中為控制單元的核心,封裝形式采用LQFP48,系統(tǒng)設(shè)計包含完整的最小系統(tǒng),電源電路,復(fù)位電路,時鐘電路與下載電路都包含在設(shè)計中。電源部分使用XC6206線性穩(wěn)壓器,將5V電源轉(zhuǎn)換為3.3V供STM32使用,多個濾波電容的配備提升了電源穩(wěn)定性,復(fù)位電路采用RC方式連接到STM32的NRST引腳,系統(tǒng)上電時可穩(wěn)定復(fù)位。時鐘電路包含8MHz主時鐘與32.768KHz低速時鐘,外部晶振提供精確的時鐘源,主時鐘經(jīng)PLL倍頻后工作頻率達到72MHz,下載電路通過SWD接口燒錄與調(diào)試程序,僅需SWDIO與SWCLK兩根信號線完成任務(wù)。STM32F103的外部接口配置豐富,所有I/O口均引至排針,為連接外部模塊提供了方便,紅外傳感器與PA5,PA6,PA7連接,物體位置檢測任務(wù)也包含在其中。SG90舵機連接PB6,PB7,PB8,分揀機構(gòu)的控制借助舵機連接實現(xiàn),HX711重量傳感器模塊與PB12,PB13連接,OLED顯示模塊連接PB14,PB15。繼電器控制電路連接PA12,傳送帶電機的控制也借助繼電器電路連接實現(xiàn),MOS管控制電路連接PA11,低壓控制高壓電路也借助MOS管電路連接實現(xiàn),K210攝像頭模塊連接TX2/RX2串口,通信也借助串口連接實現(xiàn)。BOOT電路設(shè)計在系統(tǒng)中完成,BOOT0與BOOT1引腳可配置多種啟動模式,關(guān)鍵控制信號上增加上拉電阻和濾波電容,抗干擾能力的提升為系統(tǒng)可靠性提供了重要前提,STM32F103單片機低功耗模式包含多種設(shè)計,工作狀態(tài)依據(jù)實際需求進行配置,電池供電時間在系統(tǒng)中逐步延長[13]。圖3.1STM32F103C8T6單片機接線情況3.2紅外傳感器模塊紅外傳感器模塊在系統(tǒng)精確定位中為關(guān)鍵部分,采用反射式設(shè)計,系統(tǒng)包含三個結(jié)構(gòu)相同的紅外傳感器模塊,分別定位大蒜的顏色識別,重量測量和封裝位置。每個模塊都包含一個紅外發(fā)射二極管與一個紅外接收管,二者成一定角度安裝,物體反射紅外光線回接收管時,輸出電平發(fā)生變化,單片機檢測被觸發(fā)。GND連接信號輸出線后,與STM32的PA5,PA6和PA7引腳進行連接,模塊電路設(shè)計中包含比較器電路,完成模擬信號到數(shù)字信號的轉(zhuǎn)換,抗干擾能力也顯著強化,LM393芯片在比較器電路中使用,低功耗與高精度特征顯著,模塊上電位器可調(diào)節(jié)靈敏度,適應(yīng)不同環(huán)境和檢測距離要求,模塊工作電壓為5V,信號輸出為TTL電平,直接兼容STM32輸入電平[14]。紅外傳感器的檢測距離為2-30cm,電位器可調(diào)節(jié),響應(yīng)速度快且延遲時間小于5ms,傳送帶定位精度要求能夠達到,為提高檢測可靠性,經(jīng)過計算后安裝傳感器位置,確保能準確檢測傳送帶上的大蒜。模塊設(shè)計時考慮環(huán)境光干擾因素,采用調(diào)制解調(diào)技術(shù),發(fā)射38KHz調(diào)制的紅外信號,接收端通過帶通濾波器濾除環(huán)境光干擾,檢測準確性提升,模塊采用屏蔽設(shè)計,電磁干擾對檢測結(jié)果的影響減少[15]。圖3.2紅外檢測模塊3.3K210攝像頭模塊K210攝像頭模塊在系統(tǒng)實現(xiàn)大蒜顏色識別功能時,是重要組件,嘉楠科技的KenDryteK210AI芯片為邊緣計算AI芯片,集成機器視覺與聽覺功能,主頻400MHz,內(nèi)置64位雙核處理器,片上SRAM為8MB,可支持卷積神經(jīng)網(wǎng)絡(luò)硬件加速,OV2640圖像傳感器為攝像頭模塊采用,分辨率高達200萬像素,能夠滿足大蒜顏色識別精度要求。K210攝像頭模塊與STM32的連接通過UART串口完成,TX2/RX2引腳為具體連接點,波特率設(shè)置為115200bps,模塊供電采用5V電源,工作電流約100mA。系統(tǒng)借助串口發(fā)送命令,控制K210執(zhí)行顏色識別算法,處理后K210返回結(jié)果,紫色大蒜與非紫色大蒜的區(qū)分任務(wù)可完成,K210攝像頭模塊獨立進行處理,STM32計算負擔減少,系統(tǒng)響應(yīng)速度提高。顏色識別算法于HSV顏色空間下進行分析時,紫色大蒜在HSV空間存在特定的色調(diào),飽和度與亮度范圍,系統(tǒng)借助設(shè)定閾值實現(xiàn)對紫色大蒜的識別,算法的自適應(yīng)閾值調(diào)整功能可應(yīng)對實際應(yīng)用環(huán)境光線變化因素,識別魯棒性顯著提高。K210模塊預(yù)留SD卡接口,顏色識別模型與參數(shù)能夠存儲于SD卡,后期優(yōu)化與更新便于實現(xiàn),實際測試結(jié)果為紫色大蒜識別準確率達到95%以上,精包裝系統(tǒng)要求能夠滿足[16]。圖3.3K210攝像頭模塊3.4OLED顯示模塊OLED屏幕的尺寸為0.96英寸,分辨率為128×64像素,控制芯片為SSD1306,該模塊基于有機發(fā)光二極管技術(shù),自發(fā)光特性顯著,無需背光源,顯示效果清晰且對比度高,適合在各種光線環(huán)境使用,OLED模塊厚度僅為1.4mm,尺寸小巧,安裝于系統(tǒng)控制面板上便于處理。PB14與PB15引腳為SDA和STM32通信的連接點,工作電壓為3.3V,直接由STM32的3.3V電源供電,功耗低且工作電流小于20mA,字符,圖形和混合顯示模式可由模塊支持,系統(tǒng)多樣化顯示需求能夠借助這模塊滿足。系統(tǒng)顯示界面設(shè)計為多頁形式,包含系統(tǒng)狀態(tài)頁,參數(shù)設(shè)置頁和統(tǒng)計信息頁,在系統(tǒng)狀態(tài)頁上,能夠顯示傳送帶當前運行狀態(tài),識別結(jié)果,重量值和封裝狀態(tài);參數(shù)設(shè)置頁中,重量分級閾值不僅可顯示,且能夠借助按鍵進行調(diào)整;統(tǒng)計信息頁里,累計處理大蒜數(shù)量與不同等級數(shù)量的統(tǒng)計信息可以完成顯示,OLED驅(qū)動程序采用分層設(shè)計,底層實現(xiàn)基本顯示功能,上層實現(xiàn)具體界面顯示,顯示刷新按需更新,數(shù)據(jù)變化時僅更新相應(yīng)區(qū)域,顯示效率提高,OLED使用壽命延長[17]。圖3.4OLED顯示模塊3.5HX711重量傳感模塊HX711重量傳感器模塊是實現(xiàn)大蒜重量測量與分級系統(tǒng)里的關(guān)鍵部分,由HX711芯片和壓力傳感器兩部分構(gòu)成,HX711芯片為24位高精度A/D轉(zhuǎn)換器,專為稱重設(shè)計,模塊支持兩通道差分輸入,內(nèi)部可編程增益放大器的增益能夠達到32,64或128倍,不同稱重范圍需求可借助增益設(shè)置適應(yīng)。DT信號線和SCK信號線分別連接STM32的電源,PB12引腳與PB13引腳,工作電壓為5V,系統(tǒng)5V電源供電,HX711通信協(xié)議與SPI存在部分特征重疊,但對時序有特殊要求,SCK信號的時序關(guān)系需要精確控制,系統(tǒng)通過精確控制時序,與HX711實現(xiàn)可靠通信,高精度重量數(shù)據(jù)的獲取也變得可實現(xiàn)。重量數(shù)據(jù)采集流程中包含傳感器校準與數(shù)據(jù)讀取,系統(tǒng)上電后進行零點和滿量程校準,建立數(shù)字量與實際重量的對應(yīng)關(guān)系,測量大蒜重量時,系統(tǒng)讀取HX711輸出的數(shù)字量并轉(zhuǎn)換為實際重量值,之后與預(yù)設(shè)閾值進行比較,完成大蒜重量分級,系統(tǒng)設(shè)計的重量分級精度達到±0.5g,可滿足大蒜分級包裝的精度要求。圖3.6HX711重量傳感模塊3.6SG90舵機模塊系統(tǒng)中SG90舵機模塊是大蒜分揀的執(zhí)行組件,配置了三個SG90舵機,顏色識別后分揀,重量分級后分揀和封裝過程控制分別使用這些舵機,SG90為微型舵機,重量輕,體積小,扭矩可達到1.2kg·cm,大蒜分揀的力矩需求能夠滿足。GND與信號線分別連接STM32的電源和PB6,PB7,PB8引腳,工作電壓為5V,直接由系統(tǒng)5V電源供電,SG90舵機的控制借助PWM信號完成,PWM周期為20ms,脈寬范圍在0.5ms到2.5ms,對應(yīng)舵機轉(zhuǎn)角范圍為0°到180°。STM32的定時器生成精確的PWM信號,舵機轉(zhuǎn)動到指定角度,大蒜分揀的精確性通過舵機的轉(zhuǎn)動實現(xiàn)。舵機控制策略分段進行,工作階段的轉(zhuǎn)角設(shè)定存在不同,顏色識別分揀舵機在識別到非紫色大蒜時,轉(zhuǎn)動到90°位置,使不合格大蒜移出傳送帶;重量分級舵機依據(jù)重量測量結(jié)果轉(zhuǎn)動到對應(yīng)角度,大蒜分揀到不同等級通道;封裝舵機控制封裝機構(gòu)完成大蒜封裝,系統(tǒng)設(shè)計中包含舵機緩啟動與緩?fù)V构δ?,避免機械沖擊,提高系統(tǒng)可靠性與使用壽命。圖3.7SG90舵機模塊3.7 本章小結(jié)本章詳細說明基于單片機大蒜精包裝系統(tǒng)的硬件設(shè)計,以STM32F103單片機為核心完成最小系統(tǒng)設(shè)計,電源,復(fù)位,時鐘與下載電路包含在最小系統(tǒng)中,紅外傳感器模塊實現(xiàn)精確定位,K210攝像頭模塊完成顏色識別,HX711重量傳感器模塊處理重量測量與分級,OLED顯示模塊提供交互界面,SG90舵機模塊執(zhí)行分揀操作,各模塊借助精心設(shè)計的接口電路實現(xiàn)連接,硬件系統(tǒng)在結(jié)構(gòu)與功能完整設(shè)計中逐步完成,硬件設(shè)計過程特別注重可靠性與抗干擾性,電源設(shè)計,信號隔離和濾波措施都進行合理的處理,復(fù)雜環(huán)境里的運行穩(wěn)定性能也受到保證,各功能模塊精細設(shè)計與優(yōu)化之后,硬件性能達到預(yù)期要求,為軟件開發(fā)和系統(tǒng)功能實現(xiàn)奠定了基礎(chǔ)。5系統(tǒng)的測試4系統(tǒng)的軟件設(shè)計4.1軟件介紹Keil5為ARM公司開發(fā)的集成環(huán)境,專為ARM處理器量身設(shè)計,本系統(tǒng)的軟件開發(fā)借助Keil5MDK工具完成,項目管理,代碼編輯,編譯,下載與調(diào)試功能在Keil5中應(yīng)俱全。主流ARM微控制器像STM32F103等同樣包含在支持中,CMSIS庫集成于開發(fā)環(huán)境,硬件抽象層的標準化使開發(fā)者訪問處理器特性與外設(shè)功能的接口愈加簡明。Keil5支持C/C++與匯編語言編程,本系統(tǒng)開發(fā)主要采用C語言,軟件架構(gòu)設(shè)計中應(yīng)用分層思想,底層為硬件驅(qū)動層,包含GPIO,UART,I2C,SPI等基礎(chǔ)外設(shè)驅(qū)動內(nèi)容;中間層實現(xiàn)功能模塊層,紅外傳感器,K210攝像頭,HX711重量傳感器,OLED顯示,舵機控制等功能模塊的驅(qū)動與控制在中間層完成;上層為應(yīng)用層,系統(tǒng)狀態(tài)管理,工作流程控制與用戶交互功能在應(yīng)用層實現(xiàn),軟件模塊間通信通過明確定義的接口進行,代碼的可維護性與可擴展性顯著提升。系統(tǒng)軟件設(shè)計中包含狀態(tài)機模式,軟件內(nèi)定義了多個工作狀態(tài),具體包含空閑,顏色識別,重量分級,封裝和設(shè)置等狀態(tài),傳感器觸發(fā)或用戶按鍵操作實現(xiàn)狀態(tài)的轉(zhuǎn)換,各狀態(tài)下執(zhí)行不同的處理邏輯,功能需求在這些設(shè)計中完成實現(xiàn),項目中對STM32F103的時鐘系統(tǒng)進行配置,主頻達到72MHz,實時處理需求能夠滿足系統(tǒng)要求。圖4.1Keil_5軟件界面4.2軟件程序的設(shè)計4.2.1主程序流程圖圖4.2系統(tǒng)邏輯流程圖系統(tǒng)軟件的主程序流程是整個運行過程的核心,硬件上電后逐步進入初始化階段,完成時鐘配置,GPIO設(shè)置,外設(shè)啟動和中斷配置等任務(wù),參數(shù)設(shè)置從Flash中讀取,例如重量分級閾值等信息,為運行做前提性配置。主循環(huán)采用狀態(tài)機結(jié)構(gòu)進行控制,空閑時檢測啟動信號,信號觸發(fā)后繼電器控制傳送帶啟動并進入運行狀態(tài),運行狀態(tài)下,系統(tǒng)對三個紅外傳感器狀態(tài)實時監(jiān)測,依據(jù)檢測結(jié)果觸發(fā)顏色識別,重量分級或封裝操作。操作完成后,傳送帶恢復(fù)運行,進入下一輪檢測,主程序流程還包含故障檢測與處理機制,當異常情況觸發(fā)時,系統(tǒng)停止運行并顯示錯誤提示,等待人工干預(yù)處理。4.2.2按鍵函數(shù)子流程圖圖4.3按鍵程序流程圖按鍵子程序負責(zé)處理用戶輸入,實現(xiàn)人機交互功能,通過中斷檢測按鍵狀態(tài)變化,同時結(jié)合定時器完成去抖與長按檢測,按鍵按下,釋放和長按三種事件在子程序中定義,狀態(tài)機用于管理按鍵處理流程。在參數(shù)設(shè)置模式下,上鍵與下鍵調(diào)整參數(shù)值,確認鍵保存設(shè)置并切換到下一參數(shù)項,子程序?qū)?shù)有效性進行驗證,確保輸入值在有效范圍內(nèi)。按鍵響應(yīng)采用非阻塞設(shè)計,處理完成后立即返回主程序,避免對系統(tǒng)實時性造成任何不良影響,F(xiàn)lash存儲管理子程序負責(zé)保存按鍵設(shè)置的參數(shù)到Flash中,斷電后設(shè)置內(nèi)容仍可保留。4.2.3顯示函數(shù)子程序流程圖圖4.4顯示函數(shù)子程序流程圖子程序?qū)LED顯示模塊的管理為用戶界面的運行與顯示功能的分層處理,底層驅(qū)動部分完成I2C通信協(xié)議的運行,包含OLED初始化,清屏,坐標設(shè)置,字符圖形顯示等基本功能,上層界面管理定義了多個頁面,系統(tǒng)狀態(tài)頁,參數(shù)設(shè)置頁和統(tǒng)計信息頁,按鍵觸發(fā)頁面切換邏輯,每個頁面刷新頻率與邏輯特定化,狀態(tài)頁實時顯示傳送帶狀態(tài),識別結(jié)果,當前重量與封裝狀態(tài);參數(shù)設(shè)置頁顯示當前參數(shù)值并調(diào)整界面;統(tǒng)計頁顯示運行統(tǒng)計數(shù)據(jù),數(shù)據(jù)更新按需進行,僅在變化時刷新相應(yīng)區(qū)域,減少I2C總線占用,提高系統(tǒng)響應(yīng)速度。4.3本章小結(jié)本章描述基于單片機大蒜精包裝系統(tǒng)的軟件設(shè)計,開發(fā)工作在Keil5MDK集成環(huán)境完成,使用C語言編程實現(xiàn)各項功能,軟件架構(gòu)采用分層設(shè)計,包含硬件驅(qū)動,功能模塊與應(yīng)用層,層間通過清晰定義的接口通信。系統(tǒng)設(shè)計基于狀態(tài)機模式,定義多個工作狀態(tài),事件驅(qū)動狀態(tài)轉(zhuǎn)換,復(fù)雜控制邏輯在設(shè)計中完成,主程序流程控制整體運行,實現(xiàn)傳送帶控制,傳感器監(jiān)測與異常處理功能。按鍵子程序處理用戶輸入時,同時實現(xiàn)參數(shù)調(diào)整與模式切換功能,顯示子程序管理OLED顯示,用戶界面直觀性顯著,軟件各模塊協(xié)同工作,系統(tǒng)功能順利實現(xiàn),精心設(shè)計的軟件完成大蒜自動識別,分揀,稱重與封裝功能,預(yù)期設(shè)計目標達到。5系統(tǒng)的測試5.1軟硬件調(diào)試5.1.1硬件調(diào)試系統(tǒng)硬件調(diào)試采用模塊化策略,首先驗證STM32F103最小系統(tǒng)的電源、時鐘和下載電路功能,隨后重點對K210視覺傳感器模塊進行深入調(diào)試:通過UART接口與計算機連接確認基礎(chǔ)功能,調(diào)整攝像頭安裝高度(15cm)和角度(略微前傾5°)以獲得最佳視場,設(shè)計四點LED輔助光源創(chuàng)建均勻照明環(huán)境(500-600lux)消除陰影干擾,收集100組紫色與非紫色大蒜樣本進行圖像采集和HSV色彩特性分析,確定最優(yōu)識別參數(shù)(H=240°-280°,S>30%,V>20%),并在不同時段和光照條件下進行多輪測試調(diào)整自適應(yīng)閾值;紅外傳感器模塊通過調(diào)節(jié)電位器設(shè)置2-10cm的最佳檢測距離;HX711重量傳感器使用標準砝碼進行多點校準建立線性對應(yīng)關(guān)系;舵機模塊調(diào)整PWM參數(shù)(周期20ms,脈寬0.5-2.5ms)確保精確角度控制;最后進行整體聯(lián)調(diào),檢查模塊間電氣兼容性和時序關(guān)系,增加關(guān)鍵信號路徑的屏蔽措施提高系統(tǒng)抗干擾能力,硬件調(diào)試完成后系統(tǒng)各模塊功能穩(wěn)定,為軟件開發(fā)提供可靠平臺。5.1.2軟件調(diào)試軟件調(diào)試采用自底向上的測試策略,首先驗證底層驅(qū)動(GPIO、UART、I2C、PWM)功能,隨后重點調(diào)試K210視覺識別模塊軟件:設(shè)計并驗證STM32與K210之間的通信協(xié)議(包頭0xAA、命令字節(jié)、數(shù)據(jù)長度、校驗和),在K210上優(yōu)化HSV色彩空間轉(zhuǎn)換和閾值分割算法,通過MaixPy環(huán)境可視化中間處理結(jié)果調(diào)整參數(shù),實現(xiàn)樣本自學(xué)習(xí)功能適應(yīng)不同批次大蒜特性,優(yōu)化代碼結(jié)構(gòu)將平均處理時間控制在200ms內(nèi),并針對各種異常情況(光照不足、攝像頭故障、通信中斷)設(shè)計錯誤檢測和恢復(fù)機制;其他功能模塊的軟件調(diào)試包括紅外傳感器去抖動算法、HX711數(shù)據(jù)采集與過濾優(yōu)化、OLED顯示刷新策略和舵機速度控制算法;應(yīng)用層調(diào)試驗證狀態(tài)機轉(zhuǎn)換邏輯、完整工作流程、用戶界面和故障處理機制;最后進行軟硬件集成測試,使用真實大蒜樣品多批次測試并迭代優(yōu)化,系統(tǒng)最終性能達到預(yù)期目標:顏色識別準確率95%以上,重量分級誤差±0.5g以內(nèi),處理速度30個/分鐘,確保大蒜精包裝系統(tǒng)在實際工作環(huán)境中穩(wěn)定可靠運行。5.2實物展示系統(tǒng)運行后,三個紅外傳感器安裝在傳送帶不同位置,用于物體檢測,K210攝像頭安裝于第一個檢測點上方,角度可調(diào),能夠保證最佳識別效果。重量傳感器安裝在第二個檢測點,舵機分揀機構(gòu)安裝在檢測點后方,系統(tǒng)測試結(jié)果表明,顏色識別準確率達95%,重量分級誤差控制在±0.5g內(nèi),系統(tǒng)處理速度可達30個/分鐘,實物運行過程流暢,各功能模塊協(xié)調(diào)工作,設(shè)計要求能夠滿足,大蒜全自動精確包裝能夠完成。圖5.1系統(tǒng)實物圖5.3本章小結(jié)本章詳細說明基于單片機大蒜精包裝系統(tǒng)的測試過程與結(jié)果,系統(tǒng)測試形式包含單元測試,集成測試和系統(tǒng)測試,全面驗證功能與性能指標。單元測試階段,硬件模塊與軟件模塊獨立完成測試,單元功能正確性實現(xiàn)驗證,集成測試階段,模塊間接口與交互功能完成驗證,集成問題逐步處理。系統(tǒng)測試階段,完整系統(tǒng)進行功能與性能測試,實際工作條件下的可靠性與性能也受到驗證,系統(tǒng)測試與優(yōu)化后,各種實際問題逐步處理,穩(wěn)定性與性能提升,實物展示部分描述系統(tǒng)實際構(gòu)建情況與測試結(jié)果,各項性能指標達到預(yù)期設(shè)計目標,測試結(jié)果表明,該系統(tǒng)可準確識別紫色大蒜,重量精確測量并分級,自動封裝功能實現(xiàn),實用價值顯著。結(jié)論結(jié)論結(jié)論本文設(shè)計并實現(xiàn)了一種基于STM32F103單片機的大蒜精包裝系統(tǒng),傳統(tǒng)大蒜包裝存在效率低,質(zhì)量不穩(wěn)定和人工成本高等問題,這些在系統(tǒng)中都避免。系統(tǒng)采用模塊化設(shè)計思想,紅外傳感器定位,K210攝像頭顏色識別,HX711重量傳感器,OLED顯示,SG90舵機控制與繼電器控制等模塊集成于系統(tǒng)內(nèi),大蒜自動定位,顏色識別,分揀,稱重,分級與封裝功能也一并實現(xiàn),硬件電路與軟件算法精心設(shè)計優(yōu)化后,系統(tǒng)顏色識別準確率達95%,重量分級誤差控制在±0.5g內(nèi),處理速度可達30個/分鐘,預(yù)期設(shè)計目標完成。系統(tǒng)具有結(jié)構(gòu)緊湊、該系統(tǒng)操作簡便,識別準確,分級精確,實用性強,能夠推廣應(yīng)用于大蒜產(chǎn)業(yè),農(nóng)產(chǎn)品精細化包裝因為該系統(tǒng)的成功研發(fā)提供了新思路,對提升農(nóng)產(chǎn)品包裝自動化水平,降低人工成本,提高包裝質(zhì)量都具有相當?shù)姆至?,未來系統(tǒng)優(yōu)化可進一步提高處理速度與識別準確率,擴展功能,適應(yīng)更多農(nóng)產(chǎn)品包裝需求。參考文獻參考文獻[1]曹鋒,曹永安,薛明,等.一種番茄醬用灌裝裝置:,CN216764306U[P].2022.[2]趙春雨,姜波,袁林.番茄醬灌裝控制系統(tǒng)的優(yōu)化設(shè)計[J].自動化儀表,2008,29(4):39-39.[3]涂曉軍,王衛(wèi)東,張新來,等.一種番茄醬生產(chǎn)用灌裝裝置:,CN216660536U[P].2022.[4]曹鋒,曹永安,曹思萌.一種番茄醬灌裝機用番茄醬內(nèi)部空氣壓排裝置:,CN114291369A[P].2022.[5]潘其華,邾路路,胡中斌.一種用于食品番茄醬加工的自動封罐機:,CN215625101U[P].2022.[6]吳文智,吳鵬.一種番茄醬灌裝輸送裝置:,CN215249513U[P].2021.[7]覃中雁,陳進廣,覃知廣,等.一種自動灌裝設(shè)備:,CN216038605U[P].2022.[8]占秋燕.一種用于香油自動灌裝設(shè)備:,CN112174079A[P].2021.[9]黃樹紅,付小強,徐理平,等.用于草甘膦生產(chǎn)線的自動灌裝機:,CN210012571U[P].2020.[10]孫國梁.油制辣椒自動灌裝機設(shè)計與研究[D].貴州大學(xué),2015.[11]段文軍,石卓棟,徐志剛,等.基于PLC的防爆全自動灌裝設(shè)備控制系統(tǒng)設(shè)計[J].包裝工程,2014,35(5):5.[12]張詩淋.啤酒灌裝貯液缸液位控制方法研究[J].制造業(yè)自動化,2023,45(1):4.[13]龐家友,候勇.全自動負壓式液體灌裝機:CN,CN2274632Y[P].[14]毛青鐘,陳寶良,徐春顯,等.自動化控制系統(tǒng)在黃酒灌裝生產(chǎn)中的應(yīng)用[J].釀酒,2022(002):049.[15]管選偉,孫國浩.一種藥液自動灌裝設(shè)備:,CN114772533A[P].2022.[16]孫瑞,陳全世,羅海濤,等.一種全自動灌裝機:,CN216837070U[P].2022.[17]李科宏,賴鏡安,何慶中,等.全自動灌裝生產(chǎn)線:,CN215711739U[P].2022.[18]梁增提,廖金團,梁家興,等.基于LabVIEW和超聲波傳感器的受電弓試驗平臺設(shè)計[J].科學(xué)技術(shù)創(chuàng)新,2022(20):4.[19]徐松,華朝鋒,田雷,等.一種超聲波換能器定位裝置及測試裝置:,CN212459536U[P].2021.[20]夏興宇,張正勇.基于STM32的超聲波物位檢測系統(tǒng)的設(shè)計[J].2021.附錄B附錄A原理圖:附錄B部分源程序:/*USERCODEBEGINHeader*//*********************************************************************************@file:main.c*@brief:Mainprogrambody*******************************************************************************@attention**Copyright(c)2022STMicroelectronics.*Allrightsreserved.**ThissoftwareislicensedundertermsthatcanbefoundintheLICENSEfile*intherootdirectoryofthissoftwarecomponent.*IfnoLICENSEfilecomeswiththissoftware,itisprovidedAS-IS.********************************************************************************//*USERCODEENDHeader*//*Includes*/#include"main.h"#include"tim.h"#include"usart.h"#include"gpio.h"/*Privateincludes*//*USERCODEBEGINIncludes*/#include"./HAL/key/key.h"#include"./HAL/OLED/OLED.h"#include"./HAL/HX711/hx711.h"/*USERCODEENDIncludes*//*Privatetypedef*//*USERCODEBEGINPTD*/voidKey_function(void); //按鍵函數(shù)voidMonitor_function(void); //監(jiān)測函數(shù)voidDisplay_function(void); //顯示函數(shù)voidManage_function(void); //處理函數(shù)/*USERCODEENDPTD*//*Privatedefine*//*USERCODEBEGINPD*///串口2的數(shù)據(jù)獲取/*USERCODEENDPD*//*Privatemacro*//*USERCODEBEGINPM*//*USERCODEENDPM*//*Privatevariables*//*USERCODEBEGINPV*/uint8_tkey_num,flag_display; //按鍵與顯示變量uint16_ttime_1ms; //計時變量1msuint8_ttime_500ms; //500ms標志位_BoolFlag_Key;_Boolflag_step; //步驟標志位uint32_tmaopi,weight; //毛皮、重量變量uint32_tweight_H=10;_Boollevel; //等級_BoolFlag_Level; //等級標志位uint16_tServos_1=2500; //舵機uint16_tServos_2=2500;uint8_tlevel1_num,level2_num; //數(shù)量uint8_tFlag_pack; //打包標志位uint8_tuart2_value;//串口傳的單個數(shù)據(jù)//串口的儲存數(shù)組,串口的接收時間,串口存值的數(shù)量uint8_tuart2_buf[2048],uart2_time,uart2_num;uint8_tuart2_rx_flag;//串口的獲取值的標志位/*USERCODEENDPV*//*Privatefunctionprototypes*/voidSystemClock_Config(void);/*USERCODEBEGINPFP*//*USERCODEENDPFP*//*Privateusercode*//*USERCODEBEGIN0*//***********按鍵設(shè)置函數(shù)*****/voidKey_function(void){key_num=Chiclet_Keyboard_Scan(); //按鍵掃描if(key_num!=0) //有按鍵按下{switch(key_num){case1: //按鍵1,切換界面(flag_display==1)?(flag_display=0):(flag_display++);break; case2: //按鍵2 if(flag_display==0) { if(weight>weight_H) level=1; else level=0; Flag_Level=1; } else { if(weight_H<5000) weight_H++; }break; case3: //按鍵3 if(flag_display==0) { HAL_GPIO_TogglePin(MOTOR_GPIO_Port,MOTOR_Pin); Flag_Key=1; } else { if(weight_H>0) weight_H--; }break;default:break;}}}/***********監(jiān)測函數(shù)*****/voidMonitor_function(void){if(time_500ms==1){time_500ms=0; weight=Hx711_Get_Weight(maopi);}}/***********顯示函數(shù)*****/voidDisplay_function(void){OLED_Clear();switch(flag_display) //根據(jù)不同的顯示模式標志位,顯示不同{case0: if(!Flag_Level) { OLED_ShowString(28,16,"重量:",OLED_8X16); OLED_ShowNum(68,16,weight,4,OLED_8X16); OLED_ShowString(8,40,"按下S2確定重量",OLED_8X16); } else { if(level) OLED_ShowString(24,24,"重量為一級",OLED_8X16); else OLED_ShowString(24,24,"重量為二級",OLED_8X16); }break;case1: OLED_ShowString(16,16,"設(shè)置重量閾值",OLED_8X16); OLED_ShowNum(48,40,weight_H,4,OLED_8X16);break;}OLED_Update();}/***********處理函數(shù)*****/voidManage_function(void){ if(!HAL_GPIO_ReadPin(IR1_GPIO_Port,IR1_Pin)) { if(HAL_GPIO_ReadPin(MOTOR_GPIO_Port,MOTOR_Pin)&&Flag_Key==0) { if(uart2_buf[0]=='N'&&uart2_buf[1]=='O') Servos_1=1500; memset(uart2_buf,0,sizeof(uart2_buf)); HAL_GPIO_WritePin(MOTOR_GPIO_Port,MOTOR_Pin,GPIO_PIN_RESET); flag_step=1; } } elseif(!HAL_GPIO_ReadPin(IR2_GPIO_Port,IR2_Pin)) { HAL_GPIO_WritePin(MOTOR_GPIO_Port,MOTOR_Pin,GPIO_PIN_RESET); } elseif(!HAL_GPIO_ReadPin(IR3_GPIO_Port,IR3_Pin)) { if(HAL_GPIO_ReadPin(MOTOR_GPIO_Port,MOTOR_Pin)&&Flag_Key==0) { flag_step=1; if(level==0) { Servos_2=1500; level2_num++; } else { level1_num++; } HAL_GPIO_WritePin(MOTOR_GPIO_Port,MOTOR_Pin,GPIO_PIN_RESET); } } if(level1_num>=6) { Flag_pack=1; level1_num=0; } if(level2_num>=6) { Flag_pack=2; level2_num=0; }} /*USERCODEEND0*//***@briefTheapplicationentrypoint.*@retvalint*/intmain(void){/*USERCODEBEGIN1*//*USERCODEEND1*//*MCUConfiguration*//*Resetofallperipherals,InitializestheFlashinterfaceandtheSystick.*/HAL_Init();/*USERCODEBEGINInit*//*USERCODEENDInit*//*Configurethesystemclock*/SystemClock_Config();/*USERCODEBEGINSysInit*//*USERCODEENDSysInit*//*Initializeallconfiguredperipherals*/MX_GPIO_Init();MX_TIM1_Init();MX_USART2_UART_Init();MX_TIM4_Init();/*USERCODEBEGIN2*/HAL_TIM_Base_Start_IT(&htim1); //定時器1中斷使能 HAL_UART_Receive_IT(&huart2,&uart2_value,1);/*定時器4pwm初始化*/HAL_TIM_PWM_Start(&htim4,TIM_CHANNEL_1);HAL_TIM_PWM_Start(&htim4,TIM_CHANNEL_2);HAL_TIM_PWM_Start(&htim4,TIM_CHANNEL_3);/*USERCODEEND2*//*Infiniteloop*//*USERCODEBEGINWHILE*/OLED_Init(); //顯示屏初始化 Hx711_GPIO_Init(); maopi=Hx711_Get_Maopi(); while(1){Key_function(); //按鍵函數(shù)Monitor_function(); //監(jiān)測函數(shù)Display_function(); //顯示函數(shù)Manage_function(); //處理函數(shù)/*USERCODEENDWHILE*//*USERCODEBEGIN3*/__HAL_TIM_SET_COMPARE(&htim4,TIM_CHANNEL_2,Servos_2);//舵機的角度控制__HAL_TIM_SET_COMPARE(&htim4,TIM_CHANNEL_3,Servos_1);//舵機的角度控制}/*USERCODEEND3*/}/***@briefSystemClockConfiguration*@retvalNone*/voidSystemClock_Config(void){RCC_OscInitTypeDefRCC_OscInitStruct={0};RCC_ClkInitTypeDefRCC_ClkInitStruct={0};/**InitializestheRCCOscillatorsaccordingtothespecifiedparameters*intheRCC_OscInitTypeDefstructure.*/RCC_OscInitStruct.OscillatorType=RCC_OSCILLATORTYPE_HSI;RCC_OscInitStruct.HSIState=RCC_HSI_ON;RCC_OscInitStruct.HSICalibrationValue=RCC_HSICALIBRATION_DEFAULT;RCC_OscInitStruct.PLL.PLLState=RCC_PLL_ON;RCC_OscInitStruct.PLL.PLLSource=RCC_PLLSOURCE_HSI_DIV2;RCC_OscInitStruct.PLL.PLLMUL=RCC_PLL_MUL16;if(HAL_RCC_OscConfig(&RCC_OscInitStruct)!=HAL_OK){Error_Handler();}/**InitializestheCPU,AHBandAPBbusesclocks*/RCC_ClkInitStruct.ClockType=RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;RCC_ClkInitStruct.SYSCLKSource=RCC_SYSCLKSOURCE_PLLCLK;RCC_ClkInitStruct.AHBCLKDivider=RCC_SYSCLK_DIV1;RCC_ClkInitStruct.APB1CLKDivider=RCC_HCLK_DIV2;RCC_ClkInitStruct.APB2CLKDivider=RCC_HCLK_DIV1;if(HAL_RCC_ClockConfig(&RCC_ClkInitStruct,FLASH_LATENCY_2)!=HAL_OK){Error_Handler();}}uint16_tpack_time;/*USERCODEBEGIN4*/voidHAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef*htim){ staticuint16_tServos_time,Key_time; staticuint16_twait; staticuint16_tdis_time; if(htim->Instance==htim1.Instance) //定時器1觸發(fā)中斷{(time_1ms<=6000)?(time_1ms++):(time_1ms=0);if(!(time_1ms%500))time_500ms=1; if(Servos_1==1500||Servos_2==1500) { Servos_time++; if(Servos_time>=800) { Servos_1=2500; Servos_2=2500; } } else Servos_time=0; if(Flag_Key) { Key_time++; if(Key_time>=2500) Flag_Key=0; } else Key_time=0; if(flag_step) { wait++; if(wait>=1000) { wait=0; flag_step=0; HAL_GPIO_WritePin(MOTOR_GPIO_Port,MOTOR_Pin,GPIO_PIN_SET); Flag_Key=1; } } if(flag_

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論