二維點樣平臺設(shè)計畢業(yè)
《二維點樣平臺設(shè)計畢業(yè)》由會員分享,可在線閱讀,更多相關(guān)《二維點樣平臺設(shè)計畢業(yè)(41頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、淮南師范學(xué)院2014屆本科畢業(yè)論文 畢業(yè)論文(設(shè)計) 論文題目: 二維點樣平臺設(shè)計 學(xué)生姓名: 胡大千 學(xué) 號: 1008020210 所在院系: 電氣信息工程學(xué)院 專業(yè)名稱: 自動化 屆 次: 2014 屆 指導(dǎo)教師: 苗磊 目 錄 前 言 2 1 總體方案設(shè)計 2 1.1 總體方案實現(xiàn)框圖 2 1.2 軟硬件開發(fā)環(huán)境和工具 3 2 二維點樣平臺上位機設(shè)計 3 2.1 Visual Basic語言概述 3 2.2 程序編寫 4 2.3 錯誤處理和調(diào)試 10
2、 2.4 程序發(fā)布 11 3 二維點樣平臺下位機設(shè)計 11 3.1 單片機硬件電路設(shè)計 11 3.2 單片機軟件程序設(shè)計 13 4 系統(tǒng)測試 16 4.1 上位機串口通信測試 16 4.2 下位機電路和通信測試 17 5 總結(jié) 18 參考文獻: 18 3 淮南師范學(xué)院2014屆本科畢業(yè)論文 二維點樣平臺設(shè)計 學(xué)生:胡大千(指導(dǎo)老師:苗磊) (淮南師范學(xué)院電氣信息工程學(xué)院) 摘 要:二維點樣在各行各業(yè)中都得到重要的運用,其工作原理是上位機通過控制步進電機在X、Y方向的拍數(shù)比實現(xiàn)對二維空間的精確定位并進行點樣。本課題以VB6.0為平臺并通過與上位機的通訊實
3、現(xiàn)點樣定位控制和對點樣進程進行模擬實現(xiàn)。 關(guān)鍵字:點樣;步進電機;上位機;VB;通訊 Two-dimensional Point Sample Platform Students: Hu Daqian(Guidance Teacher: Miao Lei) (College of Electrical and Information Engineering ,Huainan Normal University) Abstract:Two-dimensional point sample is important in all walks of life, its workin
4、g principle is the upper machine by controlling step motor than the number of beats in the X, Y direction implementations are precise positioning and of two-dimensional space. This topic in VB6.0 by use of the platform and through communication with PC to realize the control and the positioning of t
5、he sample points simulated implementation sample process. Key words:Sample points; Stepping motor; PC; VB; communication 前 言 隨著科學(xué)技術(shù)的不斷進步,機械產(chǎn)業(yè)朝著微型化,精密化發(fā)展,零件的微小化與運動位移的高速化、衡量化是未來的主要研究方向之一,其精準(zhǔn)的位置控制即準(zhǔn)確無誤的定位技術(shù)顯得日益重要。因此,開發(fā)功能實用,定位精確度高的定位平臺運動系統(tǒng)具有廣闊的應(yīng)用前景。 二維點樣平臺作為空間三維定位的重要組成部分,也可以說是二維定位平臺在國內(nèi)外取得了
6、較快的發(fā)展。二維定位平臺是完成X、Y維精確定位的工作平臺。它在微機電系統(tǒng)、微電子、納米制造、納米電子及航空航天等眾多高科技領(lǐng)域都發(fā)揮著重要作用,隨著科技的進步,這種重要性日益增強。生活中常見的一些機器如電子廠車間的高速機、點膠機等。 在日常生活中我們能過接觸最多最常見的二維點樣平臺也就是車間的點膠機了,點膠機是一種對流體進行控制并將流體進行點滴、涂覆于產(chǎn)品表面或產(chǎn)品內(nèi)部的自動化機器??蓪崿F(xiàn)二維、三維的路徑點膠,能夠高效精準(zhǔn)的進行點膠。其應(yīng)用的行業(yè)也非常的寬廣,可以在電子行業(yè)中進行手機按鍵點膠,手機電池封裝,光學(xué)器件加工等;在工業(yè)電氣方面可以對電容,變壓器,繼電器,按鈕等進行粘接灌封,對電機線
7、圈進行涂膠,對電器柜門進行封邊涂膠。 本設(shè)計就是以我在聯(lián)寶實習(xí)期間對點膠機的操作進行實際的理論驗證而設(shè)計一個基于VB平臺的二維點樣平臺。用VB設(shè)計上位機軟件控制界面,能夠設(shè)置待點樣行數(shù)、列數(shù)及行列間距,并對點樣進程進行模擬。設(shè)計相應(yīng)插補算法。單片機通過串口通信接收上位機所給的坐標(biāo)控制X、Y步進電機,實現(xiàn)點樣定位控制。 1 總體方案設(shè)計 1.1 總體方案實現(xiàn)框圖 本設(shè)計分兩部分設(shè)計,一部分是基于Visual Basic的二維點樣平臺的設(shè)計,另一部分是基于51單片機的下位機設(shè)計,兩者之間通過串口通信。系統(tǒng)框圖如圖1所示。 圖1 系統(tǒng)框圖 上位機設(shè)計部分主要是設(shè)置相應(yīng)的控制界面(
8、打開串口、手動點樣、自動點樣)和實現(xiàn)串口通信,當(dāng)手動點樣、自動點樣或回原點操作時,會通過串口將相應(yīng)的X軸和Y軸的坐標(biāo)值傳給下位機。為了直觀看到坐標(biāo)位置和移動軌跡,在上位機上設(shè)計了二維坐標(biāo)顯示區(qū)。 下位機是由51單片機控制一個系統(tǒng),當(dāng)接收到串口數(shù)據(jù)時,對數(shù)據(jù)進行分析,提取出上位機發(fā)送的坐標(biāo)值,驅(qū)動X軸和Y軸步進電機,實現(xiàn)二維點樣。51單片機的串口通信部分利用51單片機內(nèi)部的串口資源與外部串行端口電平轉(zhuǎn)換電路(即RS232)來實現(xiàn)。 1.2 軟硬件開發(fā)環(huán)境和工具 軟件開發(fā)環(huán)境包括Microsoft Visual Basic 6.0[1] [15] [21]和Keil uVision C51
9、V4.1[2]。硬件開發(fā)環(huán)境是Proteus 7.8 SP2[4]。調(diào)試工具包括Virtual Serial Port Driver 6.9和串口調(diào)試助手V1.0。 Visual Basic是Microsoft公司開發(fā)的一種“可視化”的Windows應(yīng)用程序開發(fā)工具。Microsoft Visual Basic 6.0是用來開發(fā)上位機的平臺。 Keil uVision C51是一種兼容單片機C語言軟件開發(fā)的系統(tǒng),是由德國Keil Software公司(ARM公司之一)出品。包含標(biāo)準(zhǔn)的Keil C編譯器、宏匯編器、調(diào)試器、實時內(nèi)核、單板計算機和仿真器,支持所有的251系列微控制器。在本設(shè)計中
10、使用Keil C51是對51單片機程序進行編譯、調(diào)試和下載[2] [5] [7 [9]。 Proteus軟件是英國Lab Center Electronics公司出版的EDA工具軟件。它既具有其它EDA工具軟件的仿真功能,又能仿真單片機及外圍器件??梢哉f是目前最好的單片機仿真軟件。本設(shè)計中利用Proteus在單片機中加載Keil生成的HEX文件對步進電機的運動進行模擬。 為了讓上位機發(fā)送的數(shù)據(jù)能夠傳送給Proteus仿真的單片機,這里選用Virtual Serial Port Driver 6.9軟件,它可以模擬串口通信,虛擬出一對串口,這樣兩者之間就無需物理連接,即可以串口的形式進行通信
11、[4] [12]。 串口調(diào)試工具很多,本系統(tǒng)采用常用的串口調(diào)試助手V2.1,其功能簡單,在本系統(tǒng)設(shè)計中主要用來調(diào)試上位機程序和測試下位機的串口通信功能。 2 二維點樣平臺上位機設(shè)計 2.1 Visual Basic語言概述 Visual Basic是一種語言簡單、易學(xué)、易用的軟件,適用于開發(fā)Windows環(huán)境下的 各類應(yīng)用程序,并增加了結(jié)構(gòu)化、可視化程序設(shè)計語言的功能,引入了“面向?qū)ο蟆焙汀笆录?qū)動”等先進思想,支持ActiveX控件(用于Web或其它支持這一技術(shù)的程序中)、VBS(VBScript,VB的腳本語言,用于Web開發(fā))和VBA(VB For Application,嵌入
12、式VB語言,用于對一些流行軟件進行二次開發(fā)),對網(wǎng)絡(luò)、多媒體和數(shù)據(jù)庫的編程有良好的支持,擁有完全的中文界面和幫助系統(tǒng)[1] [15] [21]。 Visual Basic6.0主要有以下幾個特點:編程可視化、面向?qū)ο蟮某绦蛟O(shè)計、事件驅(qū)動的編程機制,以及結(jié)構(gòu)化的程序設(shè)計。 Visual Basic的可視化設(shè)計工具可以把Windows界面設(shè)計的復(fù)雜性“封裝”起來,利用Visual Basic提供的各種設(shè)計工具,程序開發(fā)人員只需按照程序界面的設(shè)計要求,在窗體中畫出各種“控件”,并設(shè)置這些對象的屬性,這樣程序設(shè)計人員就不需要為界面設(shè)計編寫代碼而浪費時間,只需要編寫實現(xiàn)程序功能代碼。因此,程序設(shè)計的
13、效率會大大提高。 面向?qū)ο蟮某绦蛟O(shè)計語言將整個現(xiàn)實世界或者其中的一部分看作是由不同種類的對象構(gòu)成的。各種類型的對象之間通過發(fā)送消息進行聯(lián)系,消息能夠激發(fā)對象作出相應(yīng)的反應(yīng),從而構(gòu)成一個運動的整體。Visual Basic屬于事件驅(qū)動的編程機制,由事件控制著程序運行的流向。事件是可以由窗體或控件識別的操作。在響應(yīng)事件時,事件驅(qū)動應(yīng)用程序執(zhí)行指定的代碼。 Visual Basic是一種接近自然語言和人類的邏輯思維方式并具有結(jié)構(gòu)化程序設(shè)計的控制結(jié)構(gòu)。1966年,Bohra和Jacopini提出了結(jié)構(gòu)化程序設(shè)計的三種基本結(jié)構(gòu),即順序結(jié)構(gòu)、選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)。這三種基本結(jié)構(gòu)是Visual Basic
14、程序設(shè)計的核心。 2.2 程序編寫 該部分利用VB設(shè)計上位機控制平臺,實現(xiàn)手動和自動設(shè)置待點樣行列數(shù);實現(xiàn)回原點操作,模擬顯示點樣當(dāng)前位置和運動軌跡,設(shè)置的坐標(biāo)值能通過串口通信發(fā)送到下位機,下位機在對步進電機進行驅(qū)動運行后能將相應(yīng)的坐標(biāo)返回給上位機實現(xiàn)點樣定位控制并將相應(yīng)的坐標(biāo)在二維坐標(biāo)顯示區(qū)顯示出來。 2.2.1 創(chuàng)建標(biāo)準(zhǔn)項目文件 本設(shè)計需要創(chuàng)建一個基于Standard.EXE的項目。先打開Visual Basic 6.0,然后打開“文件”中的“新建工程”,然后選擇新建“標(biāo)準(zhǔn)EXE”即可,如圖2所示。這樣就 創(chuàng)建了一個標(biāo)準(zhǔn)EXE的項目文件[1]。 圖2 創(chuàng)建標(biāo)準(zhǔn)EXE項目
15、文件 2.2.2 加入串口通信控件 MSComm控件是Microsoft公司為了簡化Windows下串行通信編程而提供的一種ActiveX控件,它為應(yīng)用程序提供了通過串行接口收發(fā)數(shù)據(jù)的簡便方法。MSComm控件給出事件驅(qū)動和查詢兩種方式。事件驅(qū)動有程序響應(yīng)及時的優(yōu)點,開發(fā)者只需在每個事件中添加自己的程序。查詢方式在某些情況下更便捷,但其實質(zhì)也是事件驅(qū)動。程序的每個關(guān)鍵功能之后,可以通過查詢CommEvent屬性值來查詢事件和錯誤。 默認(rèn)的控件工具欄沒有MSComm控件,因此需要打開菜單欄“工程”下面的“部件”(跳出如圖3所示的對話框,找到“Microsoft Comm Control 6
16、.0”,點擊確定完成添加)將MSComm控件加到工具欄中。 圖3 添加MSComm控件 MSComm控件的許多屬性都是需要開發(fā)者根據(jù)自己的需要進行設(shè)置。將MSComm控件添加到工程的Form框中,點擊MSComm控件即可在右邊的屬性欄對其進行設(shè)置。MSComm控件有許多重要的屬性,如CommPort設(shè)置端口號;Settings設(shè)置波特率、奇偶檢驗、數(shù)據(jù)位和停止位;PortOpen設(shè)置并返回通信端口的狀態(tài),也可以打開或關(guān)閉端口;Input從接收緩沖區(qū)返回或刪除字符;Output向傳輸緩沖區(qū)寫一個字符串。根據(jù)本設(shè)計需要,設(shè)置端口號CommPort固定為4,Settings設(shè)置為“9600,
17、n,8,1” [12]。 2.2.3 設(shè)計程序主界面 Visual Basic最大的好處就是他的可視化。對于主界面的設(shè)計,只需要選擇需要的工具在Fram上添加、移動,操作簡單方便。 選擇Frame在窗體上分出四個部分,分別是串口通信、手動點樣、自動點樣和點樣坐標(biāo)顯示?!按蜷_端口”、“回原點”以及上下左右移動坐標(biāo)等按鈕采用CommandButton工具。坐標(biāo)輸入和坐標(biāo)顯示采用TextBox工具。為了直觀顯示端口連接狀態(tài),本設(shè)計使用Shape工具畫了一個圓點,當(dāng)未連接的時候顯示黑色,處于連接狀態(tài)的時候顯示綠色。為了實時且直觀展示坐標(biāo)所在位置,本設(shè)計用PictureBox工具,在其上面畫出坐標(biāo)
18、和顯示當(dāng)前坐標(biāo)的圓點。主界面設(shè)計如圖4所示。 圖4 主界面設(shè)計 坐標(biāo)的實現(xiàn)是使用Visual Basic的畫線功能。Scale 用來定義刻度,例如Picture1.Scale (-10,,110)-(110, -10),定義左上角座標(biāo)為(-20,120),右下角座標(biāo)為(110,-20)。Line用來畫線,例如Picture1.Line (0, 0)-(110, 0), vbBlack,這句話是在(0,0)坐標(biāo)和(110,0)坐標(biāo)之間畫一條白色的線。DrawWidth 用來定義線寬。Picture1的坐標(biāo)程序如下所示: Picture1.Cls Picture1.ScaleMod
19、e = 5 Picture1.Scale (-10, 110)-(110, -10) ‘繪橫坐標(biāo) Picture1.DrawWidth = 2 Picture1.Line (0, 0)-(110, 0), vbBlack Picture1.DrawWidth = 1 Picture1.Line (0, 10)-(100, 10), vbWhite Picture1.Line (0, 20)-(100, 20), vbWhite ‘繪坐標(biāo)縱線 Picture1.DrawWidth = 2 Picture1.Line (0, 0)-(0, 110), vbBlack
20、 Picture1.DrawWidth = 1 Picture1.Line (10, 0)-(10, 100), vbWhite Picture1.Line (20, 0)-(20, 100), vbWhite 指定位置顯示原點O Picture1.CurrentX = -5 Picture1.CurrentY = 0 Picture1.Print "O" … 2.2.4 參數(shù)輸入和控制實現(xiàn) 本點樣控制平臺的使用必須先打開端口,只有串口設(shè)備號和本平臺的設(shè)備號一致時才能進行通信。當(dāng)用戶點擊“打開端口”時,先檢查端口號是否存在或者已經(jīng)被打開。當(dāng)端口號正確之后將端口打開,即MSC
21、omm1.PortOpen = Ture,改變圓點的顏色為綠色,指示端口已經(jīng)被打開,并且按鍵名稱更改為“關(guān)閉端口”。如果端口不正確,那么根據(jù)錯誤代碼,跳出消息框提示用戶錯誤原因。端口控制的代碼如下所示: Private Sub Command5_Click() If Command5.Caption = "關(guān)閉端口" Then MSComm1.PortOpen = False Command5.Caption = "打開端口" Shape1.FillColor = RGB(0, 0, 0) Else If Test_COM(4) = True Th
22、en MSComm1.PortOpen = True Command5.Caption = "關(guān)閉端口" Shape1.FillColor = RGB(0, 255, 0) End If End If End Sub 檢測端口號函數(shù) Private Function Test_COM(com_num As Integer) As Boolean If Command5.Caption = "打開端口" Then On Error GoTo Comm_Error MSComm1.CommPort =
23、 com_num 這里接收傳入的串口號 MSComm1.PortOpen = True MSComm1.PortOpen = False Test_COM = True 如果返回1,表示串口可用 Exit Function Comm_Error: If Err.Number = 8002 Then MsgBox "串口不存在,請配置串口號為COM4!" ElseIf Err.Number = 8005 Then MsgBox "串口已打開!"
24、 Else MsgBox "其它錯誤" End If Test_COM = False 如果出錯,則返回0 Exit Function Resume Next End If End Function 上下左右移動按鈕和回原點按鈕控制原理一樣,即當(dāng)有Click點擊事件時,改變坐 標(biāo)的值,如“Y+”按鈕被按下時,那么將當(dāng)前坐標(biāo)的Y軸坐標(biāo)加一,然后將改變后的坐標(biāo)值發(fā)送出去。為了在上位機上直觀看到坐標(biāo)的移動軌跡,那么需同時移動坐標(biāo)圓點的位置以及更改TextBox中的
25、坐標(biāo)值。圓點的移動用Move函數(shù),如Point1.Move 20, 30是將Point1點的Left移動到20刻度處,Top移動到30刻度處。數(shù)據(jù)的發(fā)送使用MSComm控件Output屬性。每次點擊操作需要發(fā)送XY兩個數(shù)值,所以首先定義兩個字節(jié): Dim sendbyte(1) As Byte。 本系統(tǒng)設(shè)計X軸和Y軸坐標(biāo)都在0-100以內(nèi),為了方便下位機區(qū)分接收到的數(shù)據(jù),發(fā)送之前將X軸坐標(biāo)值和十六進制H80相“與”,這樣X軸數(shù)據(jù)最高位為1,Y軸數(shù)據(jù)最高位為0,下位機就可以通過數(shù)據(jù)的最高位來判斷收到的數(shù)據(jù)是X軸坐標(biāo)還是Y軸坐標(biāo)。這種做法對下位機來說省去了繁瑣的數(shù)據(jù)解析工作,簡單方便。具體的代
26、碼如下所示: Private Function SendXY(xv As Integer, yv As Integer) As Boolean 發(fā)送xy坐標(biāo) SendXY = False If MSComm1.PortOpen Then sendbyte(0) = xv Or &H80 sendbyte(1) = yv MSComm1.Output = sendbyte SendXY = True End If End Function 自動采樣需要用戶輸入三組坐標(biāo)值,然后點擊開
27、始,數(shù)據(jù)每隔一秒發(fā)送一組,同時移動二維坐標(biāo)顯示區(qū)的圓點,并顯示坐標(biāo)移動軌跡。因為需要定時每秒發(fā)送一次,所以這里用了一個定時工具Timer。Timer的Interval用來設(shè)置定時時間,單位為毫秒,本設(shè)計設(shè)置為1000,也就是一秒中斷一次。當(dāng)用戶輸入三組數(shù)據(jù)并點擊“開始”按鈕之后,會打開定時器,延時時間到的時候進入Timer函數(shù),在該函數(shù)中每秒發(fā)送 一組坐標(biāo),三組發(fā)送完成之后關(guān)閉定時器。此外,對三組數(shù)據(jù)的輸入進行限制,當(dāng)輸 入為空或者大于100則跳出消息框提示用戶輸入正確的數(shù)值,錯誤提示如圖5所示。 圖5 輸入超出范圍報錯 2.3 錯誤處理和調(diào)試 界面和代碼編寫完成并不代表工作的結(jié)
28、束,最艱苦的就是對完成的程序的處理和調(diào)試。錯誤通常有語法錯誤、運行錯誤和邏輯錯誤。語法錯誤很容易修改,對于運行錯誤和邏輯錯誤,可以根據(jù)Visual Basic的錯誤提示進行修改。舉個例子來說,如果MSComm控件的Settings設(shè)置為“9600,n,9,1”,運行時會報錯,跳出對話框“Invalid property value”。 有時候捕獲了錯誤代碼,但是不應(yīng)該只向用戶顯示錯誤信息代碼,而且大多數(shù)額用戶是不知道這些錯誤代碼的含義。為了將錯誤代碼翻譯成對改錯誤的描述,可以將捕獲的錯誤代碼傳給Visual Basic提供的Error函數(shù),在給函數(shù)完成對錯誤代碼的解釋。在本設(shè)計中,當(dāng)打開不
29、存在的端口時會捕獲到錯誤代碼8002,這個錯誤號的含義是無效的端口號(comPortInvalid)。在本程序中是這么處理的: On Error GoTo Comm_Error … Comm_Error: If Err.Number = 8002 Then MsgBox "串口不存在,請配置串口號為COM4!" … 2.4 程序發(fā)布 調(diào)試好程序之后,雖然沒有錯誤出現(xiàn),但該應(yīng)用程序還只是源文件,只能在Visual Basic的編譯環(huán)境中運行,因此需要制作成可執(zhí)行文件。 Visual Basic很容易生成“.exe”文件。方法是選擇“文件”菜單下的“生成Mak
30、e project1.exe”選項,在跳出來的對話框中修改文件名,然后確認(rèn)即可,這樣就完成了二維點樣平臺上位機的開發(fā)工作了[1]。 3 二維點樣平臺下位機設(shè)計 3.1 單片機硬件電路設(shè)計 點樣平臺下位機以AT89C51單片機為控制核心,串口通信模塊用來接收上位機發(fā)送的坐標(biāo)數(shù)據(jù),外加兩個步進電機用來模擬點樣平臺的二維電機控制。下位機驅(qū)動步進電機運動流程圖如圖6所示 圖6下位機控制步進電機流程圖 3.1.1 51單片機最小系統(tǒng) AT89C51是應(yīng)用廣泛的8位單片機,它擁有4K的FLASH,128字節(jié)的RAM,兩個16位的定時器,可編程串行中斷,以及低功耗閑置和掉電模式。 AT89
31、C51單片機最小系統(tǒng)包括單片機主控、時鐘電路和復(fù)位電路。如圖7所示。 時鐘電路選用外部12M晶振,并聯(lián)兩個30pf的電容幫助起振。復(fù)位電路是由電阻、電容和按鍵組成的上電復(fù)位和按鍵復(fù)位。 圖7 單片機最小系統(tǒng) 為了直觀顯示系統(tǒng)運行狀態(tài)和步進電機運行狀態(tài),本設(shè)計中添加了三個LED指示燈,用來指示運行狀態(tài),如圖8所示。 圖8LED狀態(tài)指示燈 3.1.2 串口通信電路 RS232接口上通信時要12V的電壓才能識別,也就是高低電平為12V和0V,但是51單片機的高低電平為5V和0V,所以單片機和電腦的串口通信需要高平轉(zhuǎn)換。實際的電路中需要加入電平轉(zhuǎn)換芯片,如MAX232或PL2303
32、。本設(shè)計使用Proteus仿真,Protues帶有串口仿真元件COMPIM,它集成了TTL-RS232電路的。設(shè)好波特率即可實現(xiàn)串口通信。為了查看單片機串口通信數(shù)據(jù),仿真中加入Virtual Terminal虛擬終端。該部分電路如圖9所示。 圖9 串口通信電路 3.1.3 二維步進電機電路 為了模擬二維坐標(biāo)電機的轉(zhuǎn)動,本系統(tǒng)設(shè)計了兩組步進電機,X軸步進電機和Y軸步進電機。由于單片機驅(qū)動能力有限,最大只有25mA,需要外加驅(qū)動電路。ULN2003 是高耐壓、大電流復(fù)合晶體管陣列,由七個硅NPN 復(fù)合晶體管組成。當(dāng)輸入5V電壓時,輸出電流高達500mA。所以本設(shè)計選ULN2003
33、驅(qū)動四線制步進電機。設(shè)計電路如圖10所示。 圖10 步進電機驅(qū)動電路 3.2 單片機軟件程序設(shè)計 單片機軟件部分主要是串口通信程序、步進電機控制程序和接收到數(shù)據(jù)后的邏輯處理和控制程序。 3.2.1 51單片機串口程序 51單片機內(nèi)部有一個可編程的雙向全雙工串行通信接口。該接口有4種工作方 式,以適用于不同場合。波特率由單片機內(nèi)部的定時器/計數(shù)器產(chǎn)生,可以用軟件進行設(shè)置。 51單片機內(nèi)部的串口擁有兩個物理上相互獨立的接收、發(fā)送緩沖器SBUF,可以同時接收和發(fā)送數(shù)據(jù),兩個緩沖器占用同一個地址(99H)。 本設(shè)計選用波特率9600bit/s,根據(jù)12M時鐘晶振算出裝載值,并且開啟接
34、收中斷。接受到數(shù)據(jù)時進去進去中斷函數(shù)進行相應(yīng)的處理。串口初始化代碼如下收中斷。當(dāng)接收到數(shù)據(jù)時進去中斷函數(shù)進行相應(yīng)的處理。串口初始化代碼如下: void init() { TMOD=0x20; //定時器1工作方式2 TH1=0xfd; //裝載初值,波特率設(shè)置為9600 TL1=0xfd; TR1=1; //啟動定時器1 SM0=0; //設(shè)置串口工作方式1 SM1=1; REN=1; //允許串口接收 EA=1; //開總中斷 ES=1; //開串口中斷
35、 } 串口產(chǎn)生接收中斷,RI硬件置位,在串口接收中斷函數(shù)里必須軟件清除接收中斷標(biāo)志。接收中斷入口函數(shù)如下所示: void ser()interrupt 4 { RI=0; //接受中斷標(biāo)志位 … } 3.2.2 步進電機程序 步進電機工作原理簡單,本設(shè)計中選用四線制步進電機,每一條線導(dǎo)通,步進電機會旋轉(zhuǎn)一個角度,如果順序?qū)?,那么電機就會正轉(zhuǎn)。如果逆序?qū)ǎ敲措姍C反轉(zhuǎn),通過改變線線之間導(dǎo)通時間可以改變轉(zhuǎn)速。本設(shè)計的步進電機可以通過坐標(biāo)判斷而相應(yīng)的正轉(zhuǎn)或翻轉(zhuǎn)。電機驅(qū)動函數(shù)如下: void StepX(char xy, char m, char n); 該
36、函數(shù)有三個參數(shù),第一個參數(shù)xy用來選擇電機,xy為1的時候控制X軸電機,xy為2的時候控制Y軸電機;第二個參數(shù)m是調(diào)整的角度;第三個參數(shù)n是選擇正轉(zhuǎn)反轉(zhuǎn),n為1時正轉(zhuǎn),n為0時反轉(zhuǎn)。 3.2.3 控制邏輯程序 該部分是通過對串口接收到的數(shù)據(jù)進行解析,然后驅(qū)動步進電機的轉(zhuǎn)動。串口接收到數(shù)據(jù)時會觸發(fā)接收中斷,在中斷函數(shù)里不做處理,只把它存到一個隊列里,主函數(shù)判斷到隊列中有數(shù)值的時候會依次讀取,并判斷數(shù)值是X軸坐標(biāo)數(shù)據(jù)還是Y軸坐標(biāo)數(shù)據(jù)。X軸Y軸的判斷是通過數(shù)據(jù)的最高位來判斷的,因為在設(shè)計上位機的時候,考慮到數(shù)據(jù)在0-100之間,可以通過最高位來標(biāo)識,如果是X軸坐標(biāo)數(shù)據(jù)那么把最高位置1,否則置0。
37、這樣單片機處理起來就簡單方便多了,單片機接到數(shù)據(jù)之后將最高位去除,然后送給相應(yīng)的步進電機就可以了。步進電機的控制是由步進電機的當(dāng)前坐標(biāo)值和接收到的新的坐標(biāo)值決定的,如果新的坐標(biāo)值大于當(dāng)前坐標(biāo)值,那么正轉(zhuǎn),否則反轉(zhuǎn)。轉(zhuǎn)動的角度即是當(dāng)前值和接收的坐標(biāo)值之間的差值。 因為步進電機旋轉(zhuǎn)需要時間,而上位機可能會連續(xù)發(fā)送多個數(shù)據(jù),所以需要定義一個隊列,用來存儲上位機發(fā)送過來的數(shù)據(jù),在主函數(shù)中進行讀取和控制。隊列的定義: #define len 20 //隊列長度 uchar Value[len]; //存數(shù)數(shù)組 uchar head = 0;
38、 //隊列頭 uchar tail = 0; //隊列尾 uchar cnt = 0; //隊列中的數(shù)據(jù)個數(shù) 在接收中斷程序中將數(shù)據(jù)存入隊列,程序如下: void ser()interrupt 4 { RI=0; //清除接受中斷標(biāo)志位 if(cnt < len) { Value[tail]=SBUF; if(++tail == len) tail = 0; cnt++; } } 程序中還設(shè)計了三個LED狀態(tài)指示燈,系統(tǒng)運行時打開LED1,X軸步進電機運行時打開LED2,Y軸
39、步進電機運行時打開LED3,停止運行時關(guān)閉相應(yīng)的LED。 4 系統(tǒng)測試 4.1 上位機串口通信測試 使用Virtual Serial Port Driver 6.9虛擬出一對串口,將COM3和COM4連接起來,這樣就可以在電腦上進行串口通信測試了[4]。如圖11所示。 圖11虛擬串口軟件 使用串口調(diào)試助手和本課題設(shè)計的串口控制平臺進行通信,查看通信是否正常,測試圖如圖12所示。 圖12 上位機平臺和串口調(diào)試助手通信測試 經(jīng)測試,二維點樣平臺和串口調(diào)試助手通信正常。手動采樣、自動采樣和回原點操作都能發(fā)送出正確的二維坐標(biāo)數(shù)值。 4.2 下位機電路和通信測試 驗證二維點
40、樣平臺功能正常之后,使用它和單片機進行通信。單片機啟動仿真按鈕,上位機測試手動發(fā)送、自動發(fā)送和回原點操作,測試發(fā)送數(shù)據(jù)是否正確,數(shù)據(jù)接收是否正確,電機轉(zhuǎn)動是否正常,以及指示燈狀態(tài)是否正常[12]。 判斷單片機接收到的數(shù)據(jù)是否和上位機發(fā)送的一致,可以打開Virtual Terminal觀察,串口接收到的數(shù)據(jù)可以實時的顯示出來。測試如圖13所示。 圖13 上位機和單片機通信測試 當(dāng)有數(shù)據(jù)接收到時,可以看到步進電機轉(zhuǎn)動和LED狀態(tài)燈點亮,轉(zhuǎn)動方向和角度和上位機發(fā)送的一致。整體測試如圖14所示。 圖14 單片機系統(tǒng)仿真 經(jīng)測試,串口通信部分能接收到正確的數(shù)據(jù),單片機能驅(qū)動X軸和Y軸步
41、進電機正轉(zhuǎn)或反轉(zhuǎn)一定角度,旋轉(zhuǎn)方向和角度都和上位機發(fā)送的一致,LED燈能正確指示系統(tǒng)和步進電機運行狀態(tài)。系統(tǒng)各個模塊運行穩(wěn)定。 5 總結(jié) 本課題設(shè)計了基于Visual Basic的二維點樣控制平臺和基于51單片機的串口通信控制系統(tǒng)。上位機實現(xiàn)串口通信,當(dāng)手動點樣、自動點樣或回原點操作時,會將相應(yīng)的X軸和Y軸的坐標(biāo)值傳給下位機。下位機是由51單片機控制一個系統(tǒng),當(dāng)接收到串口數(shù)據(jù)時,對數(shù)據(jù)進行分析,提取出上位機發(fā)送的坐標(biāo)值,驅(qū)動X軸和Y軸步進電機,實現(xiàn)二維點樣。經(jīng)測試各部分工作正常,達到了本課題的設(shè)計目標(biāo)。 由于本人時間和精力有限,有很多需要改進和完善的地方。上位機控制平臺可以添加更多功能,
42、界面可以做的更美觀。單片機控制系統(tǒng)可以選用更強大的單片機,比如低功耗的16單片機MSP430或者運行更快的基于Cotex-M3內(nèi)核的32位STM32單片機[6] [9]。 參考文獻: [1]李雁翎等.Visual Basic程序設(shè)計基礎(chǔ)教程(第二版)[M]人民郵電出版社2012.1 [2]楊加國等.單片機原理與應(yīng)用及C51程序設(shè)計(第二版)[M]清華大學(xué)出版社2011.10 [3]周榮富.電子線路CAD [M]北京大學(xué)出版社2011.12 [4]陳忠平.基于Proteus的51系列單片機設(shè)計與仿真(第二版) [M]電子工業(yè)出版社2012.5 [5]陳曾平.電路設(shè)計基礎(chǔ) [M]北
43、京高等教育出版社.2003:100-110. [6]肖洪兵.跟我學(xué)用單片機 [M]北京航空航天大學(xué)出版社.2002.8. [7]何立民.單片機應(yīng)用技術(shù)大全 [M]北京航空航天大學(xué)出版社,1994. [8]邱光源等.電路基礎(chǔ)[M]高等教育出版社 1998. [9]沈紅衛(wèi).基于單片機的智能系統(tǒng)設(shè)計與實現(xiàn) [M]北京:電子工業(yè)出版社,2005.1 [10]康華光.電子技術(shù)基礎(chǔ)數(shù)字部分 [M]北京高等教育出版社,2000. [11]郁有文,常健 傳感器原理及工程應(yīng)用 [M]電子科技大學(xué)出版社,2008.7 [12][Visual.Basic數(shù)據(jù)采集與串口通信測控應(yīng)用實戰(zhàn)].李江全等.掃
44、描版. [13]梅麗鳳,王艷秋,汪毓鐸,張軍. 單片機原理及接口技術(shù) [M]清華大學(xué)出版社 2006 [14]蔡朝洋. 單片機控制實習(xí)與專題制作 [M]北京航空航天大學(xué)出版社2006.11 [15]楊忠寶,康順哲.VB語言程序設(shè)計 [M]人民郵電出版社2010.12 [16]夏繼強.單片機實驗與實踐教程 [M]北京航空航天大學(xué)出版社,2001. [17]王運堅.VISUAL BASIC 6.0 應(yīng)用指南 [M]人民郵電出版社1998 19 附錄 附錄1 上位機設(shè)計界面 附錄2 上位機程序 Dim xx, yy As Long Dim timercoun
45、t As Integer Dim sendbyte(1) As Byte Private Sub Command5_Click() If Command5.Caption = "關(guān)閉端口" Then MSComm1.PortOpen = False Command5.Caption = "打開端口" Shape1.FillColor = RGB(0, 0, 0) Else If Test_COM(4) = True Then MSComm1.PortOpen = True Command5.
46、Caption = "關(guān)閉端口" Shape1.FillColor = RGB(0, 255, 0) End If End If End Sub 檢測端口信號函數(shù) Private Function Test_COM(com_num As Integer) As Boolean If Command5.Caption = "打開串口" Then On Error GoTo Comm_Error MSComm1.CommPort = com_num 這里接受傳入的串口號
47、 MSComm1.PortOpen = True MSComm1.PortOpen = False Test_COM = True 如果操作成功,則說明當(dāng)前串口可用,返回1,表示串口可用 Exit Function Comm_Error: If Err.Number = 8002 Then MsgBox "串口不存在,請配置串口號為COM4!" ElseIf Err.Number = 8005 Then MsgBox "串口
48、已打開" Else MsgBox "其它錯誤" End If Test_COM = False 如果出錯,則返回0 Exit Function Resume Next End If End Function Private Function SendXY(xv As Integer, yv As Integer) As Boolean 發(fā)送xy坐標(biāo) SendXY = False If MSComm1.
49、PortOpen Then sendbyte(0) = xv Or &H80 sendbyte(1) = yv MSComm1.Output = sendbyte SendXY = True End If End Function Private Sub Command8_Click() If (TextX1(intger).Text = "X1" Or TextX1(intger).Text = "" Or TextY1.Text = "Y1" Or TextY1.Text = "" _
50、 Or TextX2.Text = "X2" Or TextX2.Text = "" Or TextY2.Text = "Y2" Or TextY2.Text = "" _ Or TextX3.Text = "X3" Or TextX3.Text = "" Or TextY3.Text = "Y3" Or TextY3.Text = "") Then MsgBox "請輸入三組點樣坐標(biāo)(0-100之間的數(shù)值)!" Else If CInt(TextX1(intger).Text) <= 100 And CInt(TextY1.Text) <= 100 And
51、 CInt(TextX2.Text) <= 100 _ And CInt(TextY2.Text) <= 100 And CInt(TextX3.Text) <= 100 And CInt(TextY3.Text) <= 100 Then Timer1.Enabled = True Command8.Enabled = False timercount = 0 Point1.Move CInt(TextX1.Text) - Point1.Width / 2, CInt(TextY1.Text) + Po
52、int1.Height / 2 Textx.Text = CInt(Point1.Left + Point1.Width / 2) Texty.Text = CInt(Point1.Top - Point1.Height / 2) Else MsgBox "輸入數(shù)值必須在0-100之間" End If End If End Sub Private Sub Timer1_Timer() timercount = timercount + 1 If timercount = 1 Then Po
53、int1.Move CInt(TextX1(intger).Text) - Point1.Width / 2, CInt(TextY1.Text) + Point1.Height / 2 Textx.Text = CInt(TextX1(intger).Text) Texty.Text = CInt(TextY1.Text) SendXY CInt(TextX1(intger).Text), CInt(TextY1.Text) End If If timercount = 2 Then Point1.Move CInt(TextX2.Text) -
54、Point1.Width / 2, CInt(TextY2.Text) + Point1.Height / 2 Textx.Text = CInt(TextX2.Text) Texty.Text = CInt(TextY2.Text) SendXY CInt(TextX2.Text), CInt(TextY2.Text) End If If timercount = 3 Then Point1.Move CInt(TextX3.Text) - Point1.Width / 2, CInt(TextY3.Text) + Point1.Height /
55、2 Textx.Text = CInt(TextX3.Text) Texty.Text = CInt(TextY3.Text) SendXY CInt(TextX3.Text), CInt(TextY3.Text) timercount = 0 Timer1.Enabled = False Command8.Enabled = True End If End Sub Private Sub CommandYP_Click() Y+操作 If (Point1.Top - Point1.Height / 2) < 100 T
56、hen Point1.Move Point1.Left, Point1.Top + 1 Textx.Text = CInt(Point1.Left + Point1.Width / 2) Texty.Text = CInt(Point1.Top - Point1.Height / 2) SendXY CInt(Point1.Left + Point1.Width / 2), CInt(Point1.Top - Point1.Height / 2) End If End Sub Private Sub CommandXM_Click() X-操作 If (Point1.Le
57、ft + Point1.Width / 2 - 1) > 0 Then Point1.Move Point1.Left - 1, Point1.Top Textx.Text = CInt(Point1.Left + Point1.Width / 2) Texty.Text = CInt(Point1.Top - Point1.Height / 2) SendXY CInt(Point1.Left + Point1.Width / 2), CInt(Point1.Top - Point1.Height / 2) End If End Sub Private Sub Comman
58、dXP_Click() X+操作 If (Point1.Left + Point1.Width / 2) < 100 Then Point1.Move Point1.Left + 1, Point1.Top Textx.Text = CInt(Point1.Left + Point1.Width / 2) Texty.Text = CInt(Point1.Top - Point1.Height / 2) SendXY CInt(Point1.Left + Point1.Width / 2), CInt(Point1.Top - Point1.Height / 2) End If
59、 End Sub Private Sub CommandYM_Click() Y-操作 If (Point1.Top - Point1.Height / 2 - 1) > 0 Then Point1.Move Point1.Left, Point1.Top - 1 Textx.Text = CInt(Point1.Left + Point1.Width / 2) Texty.Text = CInt(Point1.Top - Point1.Height / 2) SendXY CInt(Point1.Left + Point1.Width / 2), CInt(Point1.T
60、op - Point1.Height / 2) End If End Sub 回原點操作 Private Sub Command7_Click() Point1.Move 0 - Point1.Width / 2, 0 + Point1.Height / 2 Textx.Text = CInt(Point1.Left + Point1.Width / 2) Texty.Text = CInt(Point1.Top - Point1.Height / 2) SendXY 0, 0 End Sub Private Sub Form_Load() Picture1.Ba
61、ckColor = vbGreen Picture1.Cls Picture1.ScaleMode = 5 像素 Picture1.Scale (-10, 110)-(110, -10) 定義左上角坐標(biāo)為(-20,120),右下角坐標(biāo)為110,-20) 設(shè)置繪線寬度 Picture1.DrawWidth = 2 繪坐標(biāo)橫線 Picture1.Line (0, 0)-(110, 0), vbBlack Picture1.DrawWidth = 1 Picture1.Line (0,
62、10)-(100, 10), vbWhite Picture1.Line (0, 20)-(100, 20), vbWhite Picture1.Line (0, 30)-(100, 30), vbWhite Picture1.Line (0, 40)-(100, 40), vbWhite Picture1.Line (0, 50)-(100, 50), vbWhite Picture1.Line (0, 60)-(100, 60), vbWhite Picture1.Line (0, 70)-(100, 70), vbWhite
63、 Picture1.Line (0, 80)-(100, 80), vbWhite Picture1.Line (0, 90)-(100, 90), vbWhite Picture1.Line (0, 100)-(100, 100), vbWhite 繪坐標(biāo)縱線 Picture1.DrawWidth = 2 Picture1.Line (0, 0)-(0, 110), vbBlack Picture1.DrawWidth = 1 Picture1.Line (10, 0)-(10, 100), vbWhite
64、 Picture1.Line (20, 0)-(20, 100), vbWhite Picture1.Line (30, 0)-(30, 100), vbWhite Picture1.Line (40, 0)-(40, 100), vbWhite Picture1.Line (50, 0)-(50, 100), vbWhite Picture1.Line (60, 0)-(60, 100), vbWhite Picture1.Line (70, 0)-(70, 100), vbWhite Picture1.Line (80, 0)
65、-(80, 100), vbWhite Picture1.Line (90, 0)-(90, 100), vbWhite Picture1.Line (100, 0)-(100, 100), vbWhite 指定位置顯示原點0 Picture1.CurrentX = -5 Picture1.CurrentY = 0 Picture1.Print "O" Picture1.CurrentX = -5 Picture1.CurrentY = 10 Picture1.Print "1O"
66、 Picture1.CurrentX = -5 Picture1.CurrentY = 20 Picture1.Print "2O" Picture1.CurrentX = -5 Picture1.CurrentY = 30 Picture1.Print "3O" Picture1.CurrentX = -5 Picture1.CurrentY = 40 Picture1.Print "4O" Picture1.CurrentX = -5 Picture1.CurrentY = 50 Picture1.Print "5O" Picture1.CurrentX = -5 Picture1.CurrentY = 60 Picture1.Print "6O" Picture1.CurrentX = -5 Picture1.CurrentY = 70
- 溫馨提示:
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)容負(fù)責(zé)。
6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 火力發(fā)電廠各設(shè)備的主要作用大全
- 3.高壓電工考試判斷練習(xí)題含答案
- 企業(yè)電氣防爆知識
- 13 低壓電工電工作業(yè)模擬考試題庫試卷含答案
- 電氣設(shè)備維修的十項原則
- 2.電氣電纜與直流模擬考試復(fù)習(xí)題含答案
- 電氣節(jié)能措施總結(jié)
- 2.電氣電機(一)模擬考試復(fù)習(xí)題含答案
- 接地電阻測量原理與測量方法
- 3.高壓電工作業(yè)模擬考試題庫試卷含答案
- 礦山維修電工安全技術(shù)操作規(guī)程
- 電工基礎(chǔ)口訣總結(jié)
- 3.某電廠值長面試題含答案解析
- 電工基礎(chǔ)知識順口溜
- 配電系統(tǒng)詳解