程 鵬 , 朱文興 , 董 亮
(齊齊哈爾大學(xué)通信與電子工程學(xué)院,黑龍江 齊齊哈爾 161003)
近年來,由于人口的增加和對糧食需求的提高,我國農(nóng)業(yè)經(jīng)濟(jì)發(fā)展迅速,有力推動了我國播種機(jī)行業(yè)的發(fā)展。在主要使用傳統(tǒng)的條播機(jī)和穴播機(jī)的同時,還成功研制了多種精密播種機(jī),雖然全國精密播種機(jī)具推廣勢頭比較猛,小麥等幾類常見作物的精密播種機(jī)推廣應(yīng)用迅速,但我國精密播種還并未完全普及,能精密播種的作物仍局限于幾種常見作物,受限于技術(shù)等方面的原因,國內(nèi)播種機(jī)存在效果不理想、效率低等問題[1-3]。
國內(nèi)成熟的機(jī)型相對較少。歐美發(fā)達(dá)國家對播種機(jī)的研究較早,其播種機(jī)研究和開發(fā)的技術(shù)水平很高[4],盡管新型播種機(jī)的開發(fā)時間短,但其對播種的種子適應(yīng)性好、效率高。目前,在播種機(jī)已經(jīng)相當(dāng)完善的背景下,我國不少地方已基本實(shí)現(xiàn)了精密播種。在采用多種新式工作原理的情況下,播種機(jī)控制精準(zhǔn),播種的質(zhì)量很高[5]。
本項(xiàng)目是基于STM32單片機(jī)制作的小型智能自動播種機(jī)。與傳統(tǒng)的自動播種機(jī)相比,更小型,更輕便,更適用于零散土地。相比于傳統(tǒng)的小型手動播種機(jī),避免了大量人力資源的浪費(fèi),解放了勞動力,也提高了農(nóng)業(yè)的生產(chǎn)效率與生產(chǎn)質(zhì)量。本項(xiàng)目的設(shè)計擁有多種播種模式,可適用于不同的地形,播種不同的種子。
小型智能播種機(jī)的系統(tǒng)主要包括主控模塊,電源模塊,驅(qū)動模塊,顯示模塊,聲音模塊,檢障模塊,遠(yuǎn)控模塊,播種模塊,如圖1所示。主控模塊是STM32F103C8T6即意法半導(dǎo)體公司(ST)推出的芯片,電源模塊與驅(qū)動模塊同時由L298N模塊來完成工作,顯示模塊采用Script HMI Controller,聲音模塊選用JQ8900-16P,避障模塊采用HC-SR04,遠(yuǎn)控模塊采用HC-05,播種模塊采用市面上流行的傳統(tǒng)播種機(jī),在此基礎(chǔ)上進(jìn)行改造[6]。
圖1 整體結(jié)構(gòu)設(shè)計圖
主控模塊選擇STM32F103C8T6,除了簡單的I/O口,還具有全雙工異步通信、數(shù)模模數(shù)轉(zhuǎn)換、通用定時器和高級定時器、DMA傳輸數(shù)據(jù)、片內(nèi)FLASH編程、SPI IIC操作等功能。
本設(shè)計主要用到I/O口通用定時器串口SYSTICK等功能。
驅(qū)動STM32F103C8T6單片機(jī)需要5 V電壓,而電機(jī)驅(qū)動則需要6 V ~12 V的電壓,為了解決供電問題采用L298N。
L298N主要由穩(wěn)壓部分和雙H橋直流電機(jī)驅(qū)動芯片兩部分組成,通過穩(wěn)壓部分產(chǎn)生可向單片機(jī)供電的5 V電壓通過雙H橋直流電機(jī)驅(qū)動芯片來控制電機(jī)驅(qū)動[7]。
顯示模塊采用Script HMI Controller,即腳本人機(jī)控制器。該控制器有觸摸屏,采用分離式存儲將程序存儲在TF卡上,方便替換與編寫,可以直接在屏上運(yùn)行自己編寫的可視化程序。此模塊設(shè)計了一套獨(dú)特的仿C代碼,便于開發(fā)人員設(shè)計和編寫,此屏幕支持2路串口和6個擴(kuò)展口,可以充當(dāng)控制系統(tǒng)中的上位機(jī)。
JQ8900-16P有多種控制模式:串口控制模式、線性控制模式、按鍵控制模式。連接一條數(shù)據(jù)線可以直接打開此模塊內(nèi)部儲存,更改控制音頻,使用方便,即插即用,硬件系統(tǒng)穩(wěn)定,可適應(yīng)一些極端環(huán)境。
超聲波避障的原理主要是通過超聲波發(fā)出端發(fā)出超聲波,接收端接收超聲波,根據(jù)接收器收到超聲波的時間來計算發(fā)射點(diǎn)到障礙物的距離。超聲波在空氣中傳播的速度為340 m/s,時間差為t,即發(fā)射點(diǎn)到障礙物的距離D=170*t[8-9]。
使用USB轉(zhuǎn)TTL連接電腦與HC-05,進(jìn)行調(diào)試。首先按下使能按鈕進(jìn)入at模式,當(dāng)串口發(fā)送at、藍(lán)牙模塊回復(fù)ok時,代表成功進(jìn)入at模式。然后使用模塊特有指令進(jìn)行查看或修改相應(yīng)參數(shù),例如“AT+PSWD? ”查看連接密碼,“AT+UART=”修改波特率等。
在原有的基礎(chǔ)上增加hex711稱重傳感器,當(dāng)播種機(jī)缺少種子時及時發(fā)出提醒,避免無種可播。制作相應(yīng)的外部播種鴨嘴輪,適應(yīng)不同種子的不同間距,增加輔助輪,提高播種時行進(jìn)的穩(wěn)定性。
整體軟件運(yùn)行流程如圖2所示。
圖2 整體軟件運(yùn)行流程圖
檢障模塊使用超聲波模塊,為保證測量高電平精準(zhǔn),采用通用定時器捕獲的方式來測量高電平持續(xù)時間輸入。捕獲Input Capture基本原理如下。
定時器針對外部輸入信號或內(nèi)部觸發(fā)信號實(shí)行邊沿捕捉,記錄捕捉時刻計數(shù)器的值。基于這個原理,配合計數(shù)器實(shí)時計數(shù)功能可以對捕捉信號進(jìn)行脈沖寬度的測量,進(jìn)而實(shí)現(xiàn)對周期性波形測量其周期或占空比,或者用來通信解碼。
由于存在輸入高電平時間過長無法測量,以及如何使用一個捕獲通道記錄一次上升沿一次下降沿等問題,采用兩個全局變量作為虛擬寄存器進(jìn)行設(shè)置,其中一個變量負(fù)責(zé)捕獲高電平,另一個變量則負(fù)責(zé)記錄高電平時間。工作流程如圖3所示。
圖3 檢障模塊工作流程圖
單片機(jī)無法通過直接控制電機(jī)來實(shí)現(xiàn)車體的運(yùn)動,因此需要電機(jī)驅(qū)動芯片來解決這個問題。編寫驅(qū)動芯片程序,電機(jī)驅(qū)動芯片由兩個驅(qū)動端口、四個信號輸入端口、兩個使能端口和一個變壓芯片組成。驅(qū)動端口連接電機(jī)正負(fù)極,利用正反轉(zhuǎn)電壓的大小來控制轉(zhuǎn)速。四個信號輸入端用來控制驅(qū)動端電壓方向。使能端通過pwm波形來控制電壓的占空比,從而控制轉(zhuǎn)速。通過這個流程,明確了要實(shí)現(xiàn)的設(shè)計目標(biāo),首先要實(shí)現(xiàn)四個信號輸入,其次要產(chǎn)生pwm波形來控制電機(jī)的轉(zhuǎn)速。四個輸入信號十分容易實(shí)現(xiàn),只需要簡單的I/O口配置,然后通過串口傳來的信息來確定四個信號的高低電平。而產(chǎn)生pwm波要較為復(fù)雜一點(diǎn),首先要明確pwm的定義,即脈沖寬度調(diào)制,通俗一點(diǎn)來說,就是在固定時間里等時間間隔地產(chǎn)生相同時間寬度的高電平或低電平。因此,需要確定固定時間。所以,需要定時器并了解定時器的時間計算。設(shè)置分頻值asd與計數(shù)值act,定時器的時鐘源是固定的Tclk,得出頻率H=Tclk/(asd+1)MHZ,記每一個數(shù)的時間為(asd+1)/Tclk,則總時間T=(act+1)*(asd+1)/Tclk。設(shè)置完總時間后,需要選取產(chǎn)生pwm波的通道,因?yàn)镾TM32引腳數(shù)量有限,一個引腳有許多功能,需要復(fù)用引腳。然后設(shè)置pwm波輸出極性,設(shè)置占空比,就可以輸出想要的波形。將其直接連在驅(qū)動芯片上,可以直接使能[9]。
通過L298N控制直流電機(jī)雖然可以實(shí)現(xiàn),但是整體的驅(qū)動受制于電壓、車體、輪胎等外在因素,很少能正確走出筆直的直線。因此要采用pid算法。
pid算法是在工業(yè)上廣泛應(yīng)用的直線型反饋控制體系,因其操作簡單、便于實(shí)現(xiàn),所以被廣泛應(yīng)用。但存在一定的局限性,只適用于一階齊次的系統(tǒng),面對復(fù)雜的系統(tǒng),只能采用簡化或拆分的方式才能使用pid算法。其中,比例系數(shù)為p,積分為i,微分為d,公式為u=Kp*e+Ki*e總+Kd*Δe。
確定了解決問題的算法,然后要找出真正解決這個問題三個系數(shù)的意義和e。讓車體可以穩(wěn)定直線行走的關(guān)鍵是兩側(cè)車輪速度相同,那么就需要測量車速。使用旋轉(zhuǎn)編碼器測量車速,編碼器電機(jī)轉(zhuǎn)動,編碼器通過A相和B相可以產(chǎn)生脈沖信號,根據(jù)脈沖信號可以計算出輪胎的轉(zhuǎn)速。一般采用4倍頻來求車輪速度,即記錄A相和B相的上升沿和下降沿。
電機(jī)旋轉(zhuǎn)一圈會輸出固定的脈沖數(shù),利用這個脈沖數(shù)來求輪胎的轉(zhuǎn)動速度,即M法測量,V=Mt/M*T(Mt是所設(shè)時間內(nèi)記錄的總脈沖數(shù),M是電機(jī)旋轉(zhuǎn)一圈的脈沖數(shù),T是設(shè)定的時間)??梢酝ㄟ^STM32芯片定時器特有的編碼器接口模式來記錄脈沖數(shù)。
測出車輪速度后,以左邊車輪為基準(zhǔn),進(jìn)行測速。當(dāng)右方車輪速度與左方車輪速度不相等時,進(jìn)行pid調(diào)節(jié)使速度相等,即e=預(yù)期速度(左輪速度)-右輪速度。比例系數(shù)p主要負(fù)責(zé)大體控制以及控制進(jìn)程的快慢,積分i主要負(fù)責(zé)比例系數(shù)無法到達(dá)的小部分控制(即之前錯誤的累計)。微分d主要負(fù)責(zé)當(dāng)速度相差過大時或者輪子被卡住再釋放以及人為操作不當(dāng)時,產(chǎn)生的過矯(現(xiàn)在的錯誤與之前的錯誤作差,產(chǎn)生的方向與前兩項(xiàng)相反)[10]。大體流程如圖4所示。
圖4 測速流程圖
STM32單片機(jī)多采用USART的通信方式,即全雙工異步串口通信。全雙工指的是數(shù)據(jù)的接收端與發(fā)出端在同一時刻,可以互相發(fā)送信息。異步通信指的是在通信過程中每一幀信息之間的間隔是任意的,但是要求每一幀中的字符相隔時間相同。串行通信是指將每一位數(shù)據(jù)通過一條數(shù)據(jù)線傳輸,這種通信方式特別適用于外設(shè)與外設(shè)之間的通信。通過STM32內(nèi)部關(guān)于串口通信的結(jié)構(gòu)體,可以直接設(shè)置波特率、數(shù)據(jù)位、收發(fā)端等。同時,STM32通信也有兩種方式,查詢方式和中斷方式。中斷方式更適用于來回傳輸信息的模式,例如本項(xiàng)目;而查詢模式更適用于只接收命令的下位機(jī)。
顯示模塊是通過顯示模塊自帶的編譯器進(jìn)行編譯,此編譯器存在一套特殊的編譯流程,因?yàn)榧瓤梢詫ο到y(tǒng)內(nèi)部實(shí)現(xiàn)與外部人機(jī)的交互,也可以實(shí)現(xiàn)對外的電信號交互。
它的編譯流程首先要解決人機(jī)交互問題,因此要編輯軟件對外界面。首先,選取想要實(shí)現(xiàn)的功能控件,通過調(diào)節(jié)控件參數(shù)來更改整體布局。其次,通過此編譯器特有的仿C語言編寫控件代碼,實(shí)現(xiàn)控件與人的交互。然后,編寫顯示模塊,硬件參數(shù)與選擇的中控模塊參數(shù)相同,在編寫相應(yīng)的仿C代碼進(jìn)行相應(yīng)的電信號處理。然后進(jìn)行軟件仿真調(diào)試改錯,最后進(jìn)行實(shí)機(jī)檢驗(yàn)。
JQ8900-16P具有多種控制模式:串口控制模式、線性控制模式、按鍵控制模式。為了節(jié)省I/O口并使程序更簡潔,摒棄了串口控制模式和按鍵控制模式,選擇了更為簡單和方便的線性控制模式。線性控制模式是此模塊獨(dú)有的一種通信方式,其通信協(xié)議要求單片機(jī)起始碼引導(dǎo)要大于2 ms,每個字節(jié)之間要求間隔10 ms。高電平持續(xù)時間是低電平持續(xù)時間的三倍,則芯片檢測為高電平;低電平持續(xù)時間是高電平持續(xù)時間的三倍,則表示為低電平。因此,需要準(zhǔn)確的毫秒甚至納秒級的定時,這時如果使用定時器會浪費(fèi)很多資源,也無法做到隨用隨取,所以選用SYSTICK來解決這個問題。SYSTICK定時器是一個24位的節(jié)拍定時器,具有自動重裝初值和中斷的功能。SYSTICK存在的意義是提供必要的時鐘節(jié)拍,在運(yùn)行不同的任務(wù)時提供可以依照的節(jié)拍,類似于演奏中的節(jié)拍器,可以防止演奏出錯,此處即防止程序調(diào)動出錯。SYSTICK定時器除了能服務(wù)于操作系統(tǒng)之外,只要設(shè)置好初值、算好中斷時間、寫好中斷函數(shù),就可以把它作為一個合格的鬧鐘或者鐘表。
本研究設(shè)計并實(shí)現(xiàn)了一款基于STM32的小型智能播種機(jī),介紹了播種機(jī)的整體設(shè)計、模塊設(shè)計和軟件設(shè)計。我國土地遼闊,土地類型多樣,可以用于農(nóng)業(yè)的土地中有一些因?yàn)榈匦蔚孛驳仍蛐纬傻牧闵⒏?,由于無法應(yīng)用大型耕地設(shè)備,只能應(yīng)用人工和一些簡單的機(jī)械設(shè)備,使零散耕地的土地利用率低下,造成了土地資源的極大浪費(fèi),嚴(yán)重影響著土地的集約利用程度,因此本項(xiàng)目具有巨大的現(xiàn)實(shí)意義和應(yīng)用前景。