




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、基于vc+的伺服電機速度控制系統設計摘 要本設計完成是基于visual c+6.0軟件下實現伺服電機控制界面的編程,并完成pid控制算法。該控制界面不僅簡潔實用,而且具有良好的人機交流部分。上位機控制界面所實現的功能有電機的啟動、停止、正傳、反轉、速度給定、實時曲線顯示等,在完成pid算法后同時下發pid調節后的pwm占空比,實現轉速控制。在完成串口通訊編程本文采用mscomm控件實現pc機與單片機通訊,數據的發送與接收采用統一通訊協議,這種方法不僅簡單,而且實用。本文采用單片機作為下位機來驗證上位機控制功能的實現,單片機作為下位機主要負責直流電機的各種參數數據的采集和模數轉換,然后通過串行端
2、口把數據發送給上位機,pc機作為上位機主要負責數據的分析處理和顯示。關鍵詞:伺服電機;vc+;串口通訊;pwm調速;pid; the servo motor speed control system design based on vc+abstractthis designs core is under the software of visual c+6.0, realizes the servo motor control contact surface programming, and completes the pid control algorithm. this control
3、interface has not only succinct practical, but also has the good man-machine exchange part. the superior machine control interface realizes the function has the electrical machinerys start, electrical machinerys stop, electrical machinerys main story, electrical machinerys reverse, the speed value a
4、ssigns, curve demonstration and so on. after completing the pid algorithm simultaneously after-crops pid the adjustment the pwm current output.in completing serial port communication programming this article to use mscomm to control to realize pc machine and the monolithic integrated circuit communi
5、cation, the data transmission and the receive uses the unified communication protocol, in this method is not only simple but also practical. in this article uses the monolithic integrated circuit to confirm the superior machine control function as the lower position machine realization, monolithic i
6、ntegrated circuit as lower position machine primary cognizance direct current machines each kind of parameter data gathering and with a/d conversion. then through the serial port the data transmission for the superior machine, pc machine takes the superior machine primary cognizance data the analysi
7、s processing and the demonstration.key word: servo electrical machinery; vc+; serial port communication; pwm control speed; pid;目 錄摘 要iabstractii第一章 引言11.1 設計的目的11.2 設計的意義2第二章 電機調速32.1 直流伺服電機簡介32.2 直流伺服電機調速52.2.1 v-m調速系統52.2.2 pwm調速系統7第三章 gui設計103.1 主界面103.2 實時曲線123.3 按鈕圖標的實現13第四章 串口通訊174.1 pc機與單片機通
8、信方式174.2 vc實現串口通訊的四種方式194.2.1 基于windows api通信函數194.2.2 利用端口函數直接操作214.2.3 基于mscomm控件224.2.4 基于cserial類234.2.5 四種實現方式的分析244.3 串口編程254.3.1 插入mscomm控件254.3.2 設置屬性254.3.3 設置串口264.3.4 數據類型的處理294.4 幀格式定義294.5 發送數據幀304.6 接收數據幀304.6.1 檢測接收緩沖區數據304.6.2 從接收緩沖區取出數據32第五章 pid算法335.1 pid算法簡介335.2 參數調整一般規則345.3 pid
9、算法在vc中的實現34結 論37參考文獻38附錄 程序40致 謝63第一章 引言在生產實踐的各個領域,有大量的生產機械要求在不同的場合,用不同的速度來進行工作,以提高生產率和保證產品的質量,如機床、軋鋼機、造紙機、紡織機械等。在工程實踐中,有很多生產機械要求在一定的范圍內進行速度的平滑調節,并且要求有良好的靜、動態性能。所以如何能充分發揮生產機械效能,提高生產率,是電機轉速控制系統首先要解決的問題。 1.1 設計的目的隨著微電子技術的發展,應用上位機實現現場的采集與控制越來越被大家所重視,上位機提供良好的人機界面,使現場監控更直接、簡潔可靠和穩定。應用上位機實現現場監控,主要是通過上位機本身配
10、置的串行口,通過串行通訊技術,控制和管理若干以單片機。由于上位機界面的應用給現場監控提供的極大的方便,所以上位機控制界面的設計也成為工業控制的重點內容。在visual c+6.0界面下完成上位機的編程具有自己獨特的優勢,當vb成功推出后,microsoft又將c+包裝成為了面向windows的visual c+(以下簡稱vc)。從vc1.0到vc6.0,每一個版本的推出都激動人心。vc借助傳統的c/c+的美名加上microsoft這個金字招牌,使廣大的程序員和專業編程人員紛紛投靠在vc的大旗下16。伺服系統在機械制造行業中用得最多最廣泛,各種高性能機床運動部件的速度控制運動軌跡控制、位置控制,
11、都是依靠各種伺服系統控制的。它們不僅能完成轉動控制、直線運動控制,而且能依靠多套伺服系統的配合,完成復雜的空間曲線運動的控制,如仿型機床的控制、機器人手臂關節的運動控制等等。它們可以完成的運動控制精度高、速度快、遠非一般人工操作所能達到。電動機是伺服系統的重要執行元件,又稱為執行電動機。在自動控制系統中,其任務是將輸入的電信號轉換為轉角或轉速,以帶動控制對象。因此,對伺服系統的控制關鍵所在就是對伺服電機的控制。伺服電動機一般分為直流伺服電機和交流伺服電機,對于直流伺服電機具有響應快、低速平穩性好、調速范圍寬等優點,常用于實現精密調速和位置控制的隨動系統中,在工業、國防和民用等領域內得到廣泛應用
12、13 。而對于交流伺服電機,雖然控制精度較高,但控制較復雜,驅動器參數需要現場調整pid參數整定,需要更多的連線18。所以本文主要介紹直流伺服電機轉速的控制。1.2 設計的意義工業控制領域,往往需要組成上位機下位機系統,上位機一般為pc機,下位機一般為單片機系統1。上位機主要完成數據的采集、顯示、以及數據的給定等隨著,單片機做為下位機本主要負責直流電機的各種參數數據的采集和和模數轉換。利用vc+編程上位機控制界面可以解決很多工業控制中出現的難題,傳統的上位機控制界面參數給定更改比較麻煩,需要浪費大量時間從新更改程序。而vc+的上位機控制界面就很容易實現,只需對程序中設置的參數加以更換就可以,特
13、別是上位機一般都是計算機,隨著計算機技術的發展,計算機的功能也越來越強大,很多復雜算法很容易實現,也為工業的中出現的復雜算法提供方便。在更變復雜算法時,由vc+編程上位機控制界面也十分方便。本文在完成控制伺服電機速度過程中介紹了pid算法的編程過程。第二章 電機調速2.1 直流伺服電機簡介直流伺服電機是將輸入的直流電信號轉換成機械角位移或角速度信號的裝置。直流伺服電機具有良好的啟動、制動和調速性能,可以再較寬的范圍內實現平滑無極的調速,因而適應于調速性能較高的場合4。(1)直流電動機的結構;定子。定子磁極磁場由定子的磁極產生。根據產生磁場的方式,直流伺服電動機可分為永磁式和他激式。永磁式磁極由
14、永磁材料制成,他激式磁極由沖壓硅鋼片疊壓而成,外繞線圈通以直流電流便產生恒定磁場。轉子。又稱為電樞,由硅鋼片疊壓而成,表面嵌有線圈,通以直流電時,在定子磁場作用下產生帶動負載旋轉的電磁轉矩。電刷與換向片。為使所產生的電磁轉矩保持恒定方向,轉子能沿固定方向均勻的連續旋轉,電刷與外加直流電源相接,換向片與電樞導體相接。 (2)直流電機的分類;一般直流電機按結構、用途、容量的大小等分類。但從運行的觀點來看,按勵磁方式分類更用意義,因為除了少量微型電機的磁極是永磁鐵外,絕大多數電機的磁場都是在磁極繞組中通以直流電流而建立的。因此都是通常都是按勵磁繞組的連接方式(即按勵磁方式)對直流電機進行分類。直流電
15、機按其勵磁繞組與電樞繞組連接方式的不同,可他勵;并勵;串勵;復勵等四種,如圖2.1圖2.1直流電機勵磁方式圖圖2.1(a)為他勵直流電機,其特點是勵磁繞組接在獨立大勵磁電源上,而與電樞的繞組無關,圖2.1(b)為并勵直流電機,其特點是勵磁繞組與電樞繞組并聯,這種勵磁繞組的匝數較多,導線較細,圖2.1(c)為串勵直流電機,其特點是勵磁繞組與電樞繞組串聯,電樞電流就是勵磁電流,勵磁繞組匝數少、導線較粗。圖2.1(d)為復勵直流電機,其特點是在主磁極上裝有兩套勵磁繞組,一套是與電樞繞組并聯時并勵繞組,另一套與電樞繞組串聯是串勵繞組20。(3)直流伺服電機工作原理;直流伺服電動機的工作原理與一般直流電
16、動機的工作原理是完全相同,如圖2.2所示。他激直流電機轉子上的載流導體(即電樞繞組),在定子磁場中受到電磁轉矩m的作用,使電機轉子旋轉。由直流電機的基本原理分析得到轉速值如2.1式所示: (2.1)n電樞的轉速,r/min;u電樞電壓;ia 電機電樞電流; ra電樞電阻; ke電勢系數(ke=ce)。 圖2.2直流電機原理圖2.2 直流伺服電機調速直流伺服電機的調速有三種方法:(1)改變電樞電壓u:由額定電壓向下調低,轉速也由額定轉速向下調低,調速范圍大。(2)改變磁通量(即改變ke):改變激磁回路的電阻可改變。由于激磁回路電感大,電氣時間常數大,調速快速性差,轉速只能由額定轉速向上調高。(3
17、)在電樞回路中串聯調節電阻。轉速只能調低,銅耗大,不經濟。直流伺服電機通常采用調壓調速,通常改變電樞電壓調速是直流調速系統采用的主要方法。改變電樞電壓調速是直流調速系統采用的主要方法,調節電樞供電電壓或者改變勵磁磁通,都需要有專門的可控直流電源,常用的可控直流電源有以下三種:(1)旋轉變流機組。用交流電動機和直流發電機組成機組,以獲得可調的直流電壓。(2)靜止可控整流器。用靜止的可控整流器,如汞弧整流器和晶閘管整流裝置,產生可調的直流電壓。(3)直流斬波器或脈寬調制變換器。用恒定直流電源或不可控整流電源供電,利用直流斬波或脈寬調制的方法產生可調的直流平均電壓。下面分別對各種可控直流電源以及由它
18、供電的直流調速系統作概括性介紹。2.2.1 v-m調速系統1957年,晶閘管問世,它是一種大功率半導體可控整流元件,俗稱可控硅整流元件,簡稱“可控硅”,20世紀60年代起就已生產出成套的晶閘管整流裝置。晶閘管問世以后,變流技術出現了根本性的變革。目前,采用晶閘管整流供電的直流電動機調速系統(即晶閘管電動機調速系統,簡稱v-m系統,又稱靜止ward-leonard系統)已經成為直流調速系統的主要形式。圖2.3所示是v-m系統的原理框圖,圖中v是晶閘管可控整流器,它可以是任意一種整流電路,通過調節觸發裝置gt的控制電壓來移動觸發脈沖的相位,從而改變整流輸出電壓平均值,實現電動機的平滑調速。和旋轉變
19、流機組及離子拖動變流相比,晶閘管整流不僅在經濟性和可靠性上都有很大提高,而且在技術性能上顯示出很大的優越性。晶閘管可控整流器的功率放大倍數大約在,控制功率小,有利于微電子技術引入到強電領域;在控制作用的快速性上也大大提高,有利于改善系統的動態性能5。但是,晶閘管整流器也有它的缺點,主要表現在以下方面:(1)晶閘管一般是單向導電元件,晶閘管整流器的電流是不允許反向的,這給電動機實現可逆運行造成困難。必須實現四象限可逆運行時,只好采用開關切換或正、反兩組全控型整流電路,構成v-m可逆調速系統,后者所用變流設備要增多一倍。(2)晶閘管元件對于過電壓、過電流以及過高的du/dt和di/dt十分敏感,其
20、中任一指標超過允許值都可能在很短時間內元件損壞,因此必須有可靠的保護裝置和符合要求的散熱條件,而且在選擇元件時還應保留足夠的余量,以保證晶閘管裝置的可靠運行。(3)晶閘管的控制原理決定了只能滯后觸發,因此,晶閘管可控制整流器對交流電源來說相當于一個感性負載,吸取滯后的無功電流,因此功率因素低,特別是在深調速狀態,即系統在較低速運行時,晶閘管的導通角很小,使得系統的功率因素很低,并產生較大的高次諧波電流,引起電網電壓波形畸變,殃及附近的用電設備。如果采用晶閘管整流裝置的調速系統在電網中所占容量比重較大,將造成所謂的“電力公害。為此,應采取相應的無功補償、濾波和高次諧波的抑制措施。(4)晶閘管整流
21、裝置的輸出電壓是脈動的,而且脈波數總是有限的。如果主電路電感不是非常大,則輸出電流總存在連續和斷續兩種情況,因而機械特性也有連續和斷續兩段,連續段特性比較硬,基本上還是直線;斷續段特性則很軟,而且呈現出顯著的非線性。圖2.3晶閘管電機調速系統原理圖(v-m)2.2.2 pwm調速系統直流斬波器又稱直流調壓器,是利用開關器件來實現通斷控制,將直流電源電壓斷續加到負載上,通過通、斷時間的變化來改變負載上的直流電壓平均值,將固定電壓的直流電源變成平均值可調的直流電源,亦稱直流直流變換器。它具有效率高、體積小、重量輕、成本低等優點,現廣泛應用于地鐵、電力機車、城市無軌電車以及電瓶搬運車等電力牽引設備的
22、變速拖動中。圖2.4為直流斬波器的原理電路和輸出電壓波型,(a)圖中vt代表開關器件。當開關vt接通時,電源電壓。加到電動機上;當vt斷開時,直流電源與電動機斷開,電動機電樞端電壓為零。如此反復,得電樞端電壓波形如圖2.4(b)所示。圖2.4 直流斬波器的原理圖這樣,電動機電樞端電壓的平均值如式2.2所示: (2.2)式中,t開關器件的通斷周期; 輸出電壓平均值可以通過改變占空比k,即通過改變開關器件導通或關斷時間來調節,常用的改變輸出平均電壓的調制方法有以下三種:(1)脈沖寬度調制(pulse width modulation,簡稱pwm)。開關器件的通斷周期t保持不變,只改變器件每次導通的
23、時間t,也就是脈沖周期不變,只改變脈沖的寬度,即定頻調寬。(2)脈沖頻率調制(pulse frequency modulation,簡稱pfw)。開關器件每次導通的時間t不變,只改變通斷周期t或開關頻率f,也就是只改變開關的關斷時間,即定寬調頻,稱為調頻。(3)兩點式控制。開關器件的通斷周期t和導通時間t均可變,即調寬調頻,亦可稱為混合調制。當負載電流或電壓低于某一最小值時,使開關器件導通;當電流或電壓高于某一最大值時,使開關器件關斷。導通和關斷的時間以及通斷周期都是不確定的。構成直流斬波器的開關器件過去用得較多的是普通晶閘管和逆導晶閘管,它們本身沒有自關斷的能力,必須有附加的關斷電路,增加了
24、裝置的體積和復雜性,增加了損耗,而且由它們組成的斬波器開關頻率低,輸出電流脈動較大,調速范圍有限。自20世紀70年代以來,電力電子器件迅速發展,研制并生產了多種既能控制其導通又能控制其關斷的全控型器件,如門極可關斷晶閘管(gto)、電力電子晶體管(gtr)、電力場效應管(p-mosfet)、絕緣柵雙極型晶體管(igbt)等,這些全控型器件性能優良,由它們構成的脈寬調制直流調速系統(簡稱pwm調速系統)近年來在中小功率直流傳動中得到了迅猛的發展,與v-m調速相比,pwm調速系統有以下優點:采用全控型器件的pwm調速系統,其脈寬調制電路的開關頻率高,一般在幾khz,因此系統的頻帶寬,響應速度快,動
25、態抗擾能力強。由于開關頻率高,僅靠電動機電樞電感的濾波作用就可以獲得脈動很小的直流電流,電樞電流容易連續,系統的低速性能好,穩速精度高,調速范圍寬,同時電動機的損耗和發熱都較小。pwm系統中,主回路的電力電子器件工作在開關狀態,損耗小,裝置效率高,而且對交流電網的影響小,沒有晶閘管整流器對電網的“污染”,功率因數高,效率高。主電路所需的功率元件少,線路簡單,控制方便。所以本文采用脈沖寬度調制的方法來調試電機的速度。脈寬調速系統的主要電路采用脈寬調制式變換器,簡稱pwm變換器。pwm變換器有不可逆和可逆兩類,可逆變換器又有雙極式、單極式和受限單極式等多種電路, 本文采用不可逆pwm變換器,其原理
26、簡單容易實現19。第三章 gui設計3.1 主界面上位機界面主要完成pid試調、速度給定、速度顯示、曲線顯示等功能。可實現的軟件有vc、delphi、vb、cai、labview。本文是用visual c+6.0來完成上位機界面的設計;如圖3.1所示:圖3.1 電機轉速控制界面圖visual c+6.0作為可視化編程軟件具有獨特優勢。是目前綜合性最高、最強大,也是最為復雜的windows 應用程序開發軟件。visual c+是一個功能強大的可視化軟件開發工具。自1993年microsoft公司推出visual c+1.0后,隨著其新版本的不斷問世,visual c+已成為專業程序員進行軟件開發
27、的首選工具。首先,要了解vc+6.0則必須先了解c/c+語言。在計算機領域,c/c+語言相信一定無人不知、無人不曉。c語言最初主要用于unix系統,大多數unix系統的程序都是用c編寫的。借助早期unix系統的流行和c本身的優秀品質,c語言從此名揚天下、威震四方。而后,伴隨著面向對象概念的提出和應用,形成了c+語言,att公司于1985年正式推出了c+1.0版,它是c語言面向對象的擴充。c+1.0增加了類和實例、單繼承、重載、虛函數、友員、內聯等面向對象的程序設計機制。1989年推出的c+2.0版和1993年推出的c+3.0版分別增加了支持多繼承、保護接口、模板和異常等。c+被公認為“最好的面
28、向對象的編程語言,是學習面向對象編程技術人員較好的啟蒙語言。visual c+6.0不僅是一個c+編譯器,而且是一個基于windows操作系統的可視化集成開發環境。visual c+6.0由許多組件組成,包括編輯器、調試器以及程序向導appwizard、類向導class wizard等開發工具。 這些組件通過一個名為developer studio的組件集成為和諧的開發環境17。vc+是微軟公司開發的c+語言開發環境,vc的特點是微軟公司做了一個自己獨有的類庫mfc,里面封裝了絕大多數的api函數,使得windows程序的開發變的高效和易于理解,如果用api直接開發windows程序的話,將會
29、是一件非常煩瑣的工作,windows對資源的管理是非常嚴格的這與dos可直接用中斷處理程序和i/o指令操作硬件端口是截然相反的;所以這個mfc就是vc和其他公司出產的編譯器的最大區別了,當然了別的公司也有自己封裝api的類庫比如delphi等,不過由于微軟公司掌握著windows內核的全部秘密,所以他們的編譯器與其他公司的相比有其獨到的優勢。主界面控件參數設置首先打開vc+6.0集成開發環境,選擇菜單項file/new,在出現的對話框中選中projects標簽中的mfc appwizard(exe),然后在project name框中填入mycomm(可根據需要命名),之后點ok按鈕。在接著出
30、現的對話框中選中dialog based項,然后點next按鈕。以下的各對話框都按照缺省設置,這樣即可生成一個基于對話框的應用程序。在資源編程器中會出現其對話框模板。在對話框中添加相應應用的控件,再對參數進行屬性設置,如設置id,設置后的界面如圖3.2所示:圖3.2伺服電機控制界面圖3.2 實時曲線在伺服電機轉速控制過程中,需要采集電機的實際轉速,并實時顯示到控制界面上,這樣可以輕松的觀察的速度曲線的實時變化。實現的方法為在工程中添加曲線資源,然后自dlg中添加代碼:getdlgitem(idc_oscope)-getwindowrect(rect) ;screentoclient(rect)
31、 ; /適應picture控件的大小創建畫圖工具m_quxian.create(ws_visible | ws_child, rect, this) ;初始化畫圖工具 m_quxian.setrange(0, 200, 0) ; /設置縱坐標以及小數位數 m_quxian.setyunits(電機轉速(轉/秒) ; /設置y軸標題 m_quxian.setxunits(時間軸) ; /設置x軸標題 m_quxian.setbackgroundcolor(rgb(0, 0, 64) ; /背景色 m_quxian.setgridcolor(rgb(192, 192, 255) ; /坐標顏色 m
32、_quxian.setplotcolor(rgb(255, 255, 255) ; / 曲線顏色當串口調通后可以收發數據時,便可以接收下位機的速度給定時,可以實時顯示速度曲線,如圖3.3所示。圖3.3速度曲線顯示圖3.3 按鈕圖標的實現按鈕圖標是通過cbuttonst這個類實現的,cbuttonst是目前最強大功能最全的cbutton派生類,cbuttonst類主要包括btnst.h、btnst.cpp、bcmenu.h和bcmenu.cpp四個文件,在vc+的workspace fileview中導入以上的四個文件之后,然后在sdtafx.h文件中添加合適的include語句,如#inclu
33、de btnst.h。下面介紹應用cbuttonst可實現下面6種效果;(1)在按鈕上加入icon,使icon和文字同時顯示;假設按鈕id為idc_button1;添加成員變量 cbuttonstm_btn;添加icon資源,設其id設為idi_icon1;在oninitdialog函數中初始化按鈕;m_btn.subclassdlgitem(idc_button1,this); m_btn.seticon(idi_icon1);m_btn.setflat(false); 根據icon的大小調整按鈕的大小。(2)顯示平面按鈕;只需要在效果一的基礎上把m_btn.setflat(false);語
34、句去掉。(3)使按鈕上的圖標可變;假設按鈕id為idc_button1; 添加成員變量cbuttonstm_btn; 添加兩個icon資源,id設為idi_icon1和idi_icon2;idi_icon1是普通狀態的圖標,idi_icon2是按下時的圖標; 在oninitdialog函數中初始化按鈕;m_btn.subclassdlgitem(idc_button1,this); m_btn.seticon(idi_icon2,idi_icon1);(4)設置按鈕在不同狀態下的底色和文字顏色;假設按鈕id為idc_button1; 添加成員變量 cbuttonstm_btn; 添加icon資
35、源,設其id設為idi_icon1; 在oninitdialog函數中初始化按鈕;m_btn.subclassdlgitem(idc_button1,this); m_btn.seticon(idi_icon1);m_btn.setcolor(cbuttonst:btnst_color_bk_out, rgb(208,208,208); m_btn.setcolor(cbuttonst:btnst_color_bk_focus,rgb(208,208,208); m_btn.offsetcolor(cbuttonst:btnst_color_bk_in, 30);setcolor函數和offs
36、etcolor函數的第一個參數表示按鈕的各個狀態,前景色就是文字的顏色,它們的取值表示:btnst_color_bk_in;/鼠標放在按鈕內時的背景色btnst_color_fg_in;/鼠標放在按鈕內時的前景色btnst_color_bk_out;/普通狀態時的背景色btnst_color_fg_out;/普通狀態時的前景色btnst_color_bk_focus;/按鈕被按下后的背景色btnst_color_fg_focus;/按鈕被按下后的前景色實例:演示程序中的4848 icon 按鈕、zip按鈕等。(5)設置圖標和文字的位置;假設按鈕id為idc_button1;添加成員變量 cbu
37、ttonstm_btn;添加icon資源,id設為idi_icon1;在oninitdialog函數中初始化按鈕;m_btn.subclassdlgitem(idc_button1,this);m_btn.seticon(idi_icon1); m_btn.setalign(cbuttonst:st_align_vert);setalign函數的第一個參數表示位置信息,缺省情況下,文字在圖標右邊st_align_horiz; / 文字在右st_align_vert; /文字在下st_align_horiz_right; / 文字在左(6)根據icon的形狀設置按鈕的形狀;假設按鈕id為idc_
38、button1;添加成員變量 cbuttonstm_btn;添加icon資源,設其id設為idi_icon1;在oninitdialog函數中初始化按鈕;m_btn.subclassdlgitem(idc_button1,this); m_btn.seticon(idi_icon1); m_btn.drawborder(false); m_btn.setcolor(cbuttonst:btnst_color_bk_out, rgb(208,208,208); m_btn.setcolor(cbuttonst:btnst_color_bk_in, rgb(208,208,208); m_btn.
39、setcolor(cbuttonst:btnst_color_bk_focus, rgb(208,208,208);為達到最好效果,請根據icon的大小調整按鈕的大小。并根據實際情況設置背景顏色,請事先將按鈕的文字去掉。第四章 串口通訊4.1 pc機與單片機通信方式pc機與單片機通訊通常采用兩種方式:并行通信和串行通信。并行通信是指代發送的數據各位同時傳送,串行通信則是數據一位一位的按順序傳送。并行通信雖然傳輸效率高,由于所需硬件設計復雜,不適于長距離通信,所以一般只適用于要求實時性強。傳送速率較高的測控系統中,實用面較窄;相比之下,串行通信簡單易實現,傳輸距離較長,所以已被廣泛應用于各種工控
40、系統中2。串行通行分為同步通行和異步通信2種方式。同步通信是指通過在每個數據塊開始時的同步字符來實現收/發雙方同步的一種數據傳送方法,常用于信息量大,速度要求高的場合;異步通信則規定了標準的字符數據傳輸格式,即每一幀信息由起始位、數據位、奇偶校驗位和停止位組成3。由于有冗余位,所以傳送效率不高,常用于信息量不大,速度較低的場合。在計算機測控系統中,由于串行接口的標準化,一般采用異步串行通信方式,以提高其通用性。pc機與下位機通訊采用標準通訊端口rs-232。目前rs-232是pc機與通信工業中應用最廣泛的一種串行接口,而對于單片機與pc機的串行通信,可以進一步簡化接法,只需要三根線:rxd (
41、接收)、txd(發送)、gnd(信號地,收發雙方信號共地,即信號地線接在一起),這種接法俗稱零modem接法”。rs232傳送的是單端信號,即取rxd及txd對gnd的電壓值為信號電平,電壓+5v+15v表示邏輯0,電壓-15v-5v表示邏輯1,稱之為eia電平。而單片機一般采用ttl和coms兼容電平,所以進行機與單片機的串行通信時,要進行eia電平與ttl電平之間的轉換。實施起來很簡單,只要在機串口和單片機串口之間再接上一個電平轉換芯片就可以了12。可使用相應的專用芯片進行電平轉化,如max23211。如圖4.1 圖4.1pc機與單片機連接圖rs232c是美國電子工業協會(eia)于196
42、2年制定并于1968年最后一次修改而成的一種串行通信標準,它既是一個物理接口標準,也是一個電氣標準。rs232c接口采用25根線,實際使用時,除去接到設備外殼的一根安全地線以外,真正用于異步串行通信的只有9根線(其余空著沒定義),也正是因為如此,pc機一般都具有一個或幾個針rs232c串行接口,分別稱為 com1 和 com2。(1)由于rs232接口標準出現較早,難免有不足之處,主要有以下四點: 接口的信號電平值較高,易損壞接口電路的芯片,又因為與ttl 電平不兼容故需使用電平轉換電路方能與ttl電路連接。 傳輸速率較低,在異步傳輸時,波特率為20kbps;因此在“南方的老樹51cpld開發
43、板”中,綜合程序波特率只能采用19200,也是這個原因。 接口使用一根信號線和一根信號返回線而構成共地的傳輸形式, 這種共地傳輸容易產生共模干擾,所以抗噪聲干擾性弱。 傳輸距離有限,最大傳輸距離標準值為50英尺,實際上也只能用在50米左右10。(2)針對rs232接口的不足,于是就不斷出現了一些新的接口標準,rs-485就是其中之一,它具有以下特點:rs-485的電氣特性:邏輯“1”以兩線間的電壓差為+(26) v表示;邏輯“0”以兩線間的電壓差為-(26)v表示。接口信號電平比rs-232降低了,就不易損壞接口電路的芯片, 且該電平與ttl電平兼容,可方便與ttl 電路連接。 rs-485的
44、數據最高傳輸速率為10mbps 。rs-485接口是采用平衡驅動器和差分接收器的組合,抗共模干能力增強,即抗噪聲干擾性好。 rs-485接口的最大傳輸距離標準值為4000英尺,實際上可達 3000米,另外rs-232接口在總線上只允許連接1個收發器, 即單站能力。而rs-485接口在總線上是允許連接多達128個收發器。即具有多站能力,這樣用戶可以利用單一的rs-485接口建立設備網絡6。4.2 vc實現串口通訊的四種方式4.2.1 基于windows api通信函數與通信有關的windows api函數共有26個,但主要有關的有createfile() 用 “comn”(n為串口號)作為文件名
45、就可以打開串口;readfile() 讀串口;writefile() 寫串口;closehandle() 關閉串口句柄。初始化時應注意createfile()函數中串口共享方式應設為0,串口為不可共享設備,其它與一般文件讀寫類似,以下給出api實現的源代碼。(1)發送例程聲明全局變handle m_hidcomdev;overlapped m_overlappedread;void cserialapiview:onsend() /發送數據 char szmessage20 = “data”; dword dwbyteswritten; for (int i=0; isizeof(szmess
46、age); i+) writefile(m_hidcomdev,(lpstr)&szmessagei,1,&dwbyteswritten,&m_overlappedwrite); if (waitforsingleobject(m_overlapperwrite, hevent, 1000)dwbyteswritten = 0; else gentoverlappedresult(m_hidcomdev,&m_overlappedwrite,&dwbyteswritten, false); m_overlappedwrite. offset += dwbyteswritten; dwbytes
47、written+; (2)接收例程 dcb comdcb; /設備控制塊 handle hcom; hcom = createfile (com1,generic_read| generic_write,0, null,open_existing,file_attribute_normal,null); if (hcom=invalid_handle_value) afxmessagebox(無法打開串行口); else commtimeouts commtimeouts ; setcommmask(hcom, ev_rxchar ) ; setupcomm(hcom, 4096, 4096
48、) ; /設置收發緩沖區尺寸為4k purgecomm(hcom, purge_txabort| purge_rxabort | purge_txclear| purge_rxclear ) ; 清收發緩沖區;(3)以下初始化commtimeouts和設置超時參數 ;commtimeouts.readintervaltimeout = 0ffffffff ; commtimeouts.readtotaltimeoutmultiplier = 0 ; commtimeouts.readtotaltimeoutconstant = 4000 ; commtimeouts.writetotaltim
49、eoutmultiplier = 0; commtimeouts.writetotaltimeoutconstant = 4000 ; setcommtimeouts(hcom, &commtimeouts ); /設置超時參數 comdcb.dcblength = sizeof( dcb ) ; getcommstate( hcom, &comdcb ) ; /獲取當前參數 comdcb.baudrate =9600; /波特率 comdcb.bytesize = 8; /數據位 comdcb.parity = 0; /校驗 04=no, odd, even, mark, space set
50、commstate(hcom, &comdcb ) ; (4)設置新的通信參數;dword dread,dreadnum; unsigned char buff 200; dread=readfile(hcom, buff, 100, &dreadnum, null); /接收100個字符, dreadnu為實際接收字節數 ;4.2.2 利用端口函數直接操作 這種方式主要是采用兩個端口函數_inp(), _outp()實現對串口的讀寫,其中讀端口函數的原型為: int _inp(unsigned shot port) ;該函數從端口讀取一個字節,端口號為065535;寫端口的函數原型為: in
51、t _outp(unsigned shot port, int databyte) 該函數向指定端口寫入一個字節。 不同的計算機串口地址可能不一樣,通過向串口的控制及收發寄存器進行讀寫,可以實現靈活的串口通信功能,一般涉及具體的硬件電路討論比較復雜。4.2.3 基于mscomm控件 mscomm控件,即microsoft communication control,是microsoft為簡化windows下串行通信編程而提供的activex控件。它提供了一系列標準通信命令的使用接口,利用它可以建立與串口的連接,并可以通過串口連接到其他通信設備(如調制解調器),發出命令,交換數據以及監視和響應串
52、行連接中發生的事件和錯誤。mscomm控件可用于創建電話撥號程序、串口通信程序和功能完備的終端程序,mscomm控件提供了兩種處理通信的方式7。(1)事件驅動方式。當通信事件發生時,mscomm控件會觸發oncomm事件,調用者可以捕獲該事件,通過檢查其commevent屬性便可確認發生的是哪種事件或錯誤,從而進行相應的處理。這種方法的優點是響應及時、可靠性高。(2)查詢方式。在程序的每個關鍵功能之后,可以通過檢查commevent屬性的值來查詢事件和錯誤。如果應用程序較小,這種方法可能更可取。例如,如果寫一個簡單的電話撥號程序,則沒有必要每接收1個字符都產生事件,因為惟一等待接收的字符是調制
53、解調器的確定響應14。(3) mscomm 控件有很多重要的屬性, 其中常用的是如下幾個:commport設置并返回通信口號, 缺省值為com1, 可設置1 16 個。 setstrings設置并返回波特率、奇偶校驗、數據位、停止位的字符串。其中波特率的范圍為300 19 200 b/s。 portopen設置并返回通信口的狀態, 同時用來打開和關閉通信口。 inputlen決定每次input 讀入的字符個數,缺省為0, 表示讀取接收緩沖區的全部內容。 input讀入并清除接收緩沖區的字符。 inbuffercount返回接收緩沖區已接收的字符數, 通過置0可清除接收緩沖區。 output將發
54、送的字符串或數組寫到發送緩沖區。 inputmode 定義input 屬性獲得數據的方式: 0 為文本; 1 為二進制94.2.4 基于cserial類 cserial 是由mumega technologies公司提供的一個免費的vc+類,可方便地實現串行通信。以下為該類定義的說明部分:class cserial public: cserial(); cserial(); bool open( int nport = 2, int nbaud = 9600 ); bool close( void ); int readdata( void *, int ); int senddata( co
55、nst char *, int ); int readdatawaiting( void ); bool isopened( void ) return( m_bopened ); protected: bool writecommbyte( unsigned char ); handle m_hidcomdev; overlapped m_overlappedread, m_overlappedwrite; bool m_bopened; (1)串行通信類cserial 成員函數簡介; cserial:cserial是類構造函數,不帶參數,負責初始化所有類成員變量。 cserial: open這個成員函數打開通信端口。帶兩個參數,第一個是埠號,有效值是1到4,第二個參數是波特率,返回一個布爾量。 cserial: close函數關閉通信端口。類析構函數調用這個函數,所以可不用調用這個函數。 cserial: senddata函數把數據從一個緩沖區寫到串行端口。它所帶的第一個參數是緩沖區指針,其中包含要被發送的資料;這個函數返回已寫到端口的實際字節數
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 永州職業技術學院《漢譯英》2023-2024學年第二學期期末試卷
- 寧夏大學附中2025屆高二下數學期末考試模擬試題含解析
- 玉柴職業技術學院《衛生管理統計學》2023-2024學年第二學期期末試卷
- 四川民族學院《影視聲音創作》2023-2024學年第二學期期末試卷
- 2025年天津市靜海區獨流中學物理高二第二學期期末質量跟蹤監視模擬試題含解析
- 內蒙古大學創業學院《手機修圖》2023-2024學年第二學期期末試卷
- 四川省成都市經開區實驗中學2024-2025學年數學高二下期末綜合測試試題含解析
- 廈門南洋職業學院《工程材料基礎》2023-2024學年第二學期期末試卷
- 陜西科技大學鎬京學院《光纖技術及應用》2023-2024學年第二學期期末試卷
- 上海工程技術大學《非線性編輯雙語》2023-2024學年第二學期期末試卷
- OpenCV圖像處理技術(微課版)(全彩)電子教案
- JB-T14451-2023《鋼質鍛件鍛造生產能源消耗限額及評價方法》
- 果蔬保鮮技術發展趨勢分析報告
- 2024年江蘇省鎮江市潤州區中考第二次中考生物模擬試卷
- 《揚州慢》教學課件
- 國寶大熊貓的資料介紹三年級8篇
- 2024年貴州省貴陽市南明區中考一模考試物理試題
- 電子產品出廠檢驗報告
- 《施工現場消防》課件
- 某地區地質災害-崩塌勘查報告
- 2024年新高考適應性考試俄語試題含答案
評論
0/150
提交評論