張安東,林開(kāi)司,張 露
(銅陵職業(yè)技術(shù)學(xué)院,安徽 銅陵244000)
“單片機(jī)應(yīng)用技術(shù)”課程是應(yīng)用電子技術(shù)、電子信息工程技術(shù)等相關(guān)專業(yè)的核心課程,幾乎所有高校電子信息類專業(yè)都開(kāi)設(shè)了該課程。因?yàn)椤皢纹瑱C(jī)”廣泛應(yīng)用于各生產(chǎn)、生活領(lǐng)域,如工業(yè)生產(chǎn)、家用電氣、消費(fèi)電子等等。正由于“單片機(jī)”在應(yīng)用電子技術(shù)、電子信息工程技術(shù)等專業(yè)中的核心地位以及它的實(shí)踐性,很多學(xué)校在開(kāi)設(shè)“單片機(jī)應(yīng)用技術(shù)”課程后又開(kāi)設(shè)了一門(mén)后續(xù)課程,叫“單片機(jī)課程設(shè)計(jì)”。這是一門(mén)集單片機(jī)、電子技術(shù)、電子測(cè)量等綜合性的課程,作者所在的學(xué)校就開(kāi)設(shè)了該課程。
作者所在的學(xué)?!皢纹瑱C(jī)課程設(shè)計(jì)”這門(mén)課程采用項(xiàng)目教學(xué)法。系統(tǒng)設(shè)計(jì)中的硬件部分可以通過(guò)在萬(wàn)能板上焊接或者制作印制電路板(PCB板)等獲得真實(shí)硬件,在萬(wàn)能板上焊接電路所耗費(fèi)的課時(shí)較多,受課時(shí)數(shù)的限制不能所有的項(xiàng)目都采取此種方法。制作PCB板的設(shè)備一般高校都不具備,如果代工生產(chǎn)一般要批量化,很難針對(duì)每個(gè)同學(xué)都能定制他們自己設(shè)計(jì)的PCB,因?yàn)槭芙虒W(xué)成本的限制。所以采用Proteus軟件進(jìn)行硬件仿真即可達(dá)到了教學(xué)效果,又能克服上述困難。
串口通信是單片機(jī)的重要內(nèi)容,教學(xué)內(nèi)容一般包括單片機(jī)間的通信,單片機(jī)與上位機(jī)的通信。單片機(jī)與上位機(jī)通信的教學(xué)中,上位機(jī)一般采用串口調(diào)試助手,該軟件是通用的上位機(jī)串口通信軟件。在實(shí)際的工程應(yīng)用中,針對(duì)不同應(yīng)用場(chǎng)景,上位機(jī)與單片機(jī)間的通信信息,串口調(diào)試助手不能全部反映,此時(shí)必須定制上位機(jī)通信軟件。在某些情況下,要求上位機(jī)對(duì)單片機(jī)采集的各種信息進(jìn)行遠(yuǎn)程實(shí)時(shí)監(jiān)控,此時(shí)也需要上位機(jī)通信軟件。VB6.0是基于對(duì)象的程序設(shè)計(jì)語(yǔ)言,主要開(kāi)發(fā)基于Windows的應(yīng)用程序,應(yīng)用十分廣泛,是一個(gè)成熟穩(wěn)定的開(kāi)發(fā)工具,使用VB6.0作為上位機(jī)軟件開(kāi)發(fā)工具是個(gè)很好的選擇。
對(duì)于一些理論知識(shí)較扎實(shí)、實(shí)踐能力較強(qiáng)的學(xué)生設(shè)計(jì)的教學(xué)項(xiàng)目要體現(xiàn)一定的難度,針對(duì)串口通信,設(shè)計(jì)的項(xiàng)目包括單片機(jī)的軟硬件設(shè)計(jì),還包括上位機(jī)通信軟件的設(shè)計(jì)。設(shè)計(jì)的項(xiàng)目更貼近工程實(shí)踐,使得學(xué)生對(duì)單片機(jī)于上位機(jī)通信的理解更深刻,且進(jìn)一步理解單片機(jī)工程開(kāi)發(fā)的步驟與提高解決實(shí)際問(wèn)題的能力。下面以具體任務(wù)闡述Proteus和VB6.0聯(lián)合仿真在單片機(jī)課程設(shè)計(jì)教學(xué)中的應(yīng)用。
設(shè)計(jì)一個(gè)對(duì)水塔水位進(jìn)行檢測(cè)與控制的系統(tǒng),如圖1所示,在水塔不同高度安裝3根金屬棒,感知水位變化。其中,B棒處于下限水位,C棒處于水位上限水位,A棒接地,B、C通過(guò)電阻接5V電源。同時(shí)該系統(tǒng)通過(guò)串口與上位機(jī)通信,上位機(jī)軟件能實(shí)時(shí)顯示水位高度。
圖1 水位控制示意圖
教師根據(jù)任務(wù)要求分析如何進(jìn)行系統(tǒng)設(shè)計(jì),首先系統(tǒng)包括單片機(jī)控制部分和上位機(jī)軟件部分,這里的系統(tǒng)設(shè)計(jì)主要是單片機(jī)硬件系統(tǒng)設(shè)計(jì)。系統(tǒng)采用51單片機(jī)為主控芯片,系統(tǒng)包括傳感器水位檢測(cè)電路,由于是采用仿真,所以使用撥碼開(kāi)關(guān)模擬液位傳感器檢測(cè)水位高度,模擬檢查值通過(guò)LED數(shù)碼管顯示,所以系統(tǒng)還包括數(shù)碼管顯示電路;系統(tǒng)有啟動(dòng)和停止電機(jī)加水及單片機(jī)與上位機(jī)通信的功能,所以系統(tǒng)還包括繼電器驅(qū)動(dòng)和電機(jī)控制電路及串口通信電路。為了對(duì)上下水位和電機(jī)啟停有指示還包括LED指示電路。系統(tǒng)框圖如圖2所示。
圖2 系統(tǒng)框圖
教學(xué)過(guò)程中,教師提供設(shè)計(jì)方案,具體實(shí)現(xiàn)電路由學(xué)生自己根據(jù)自身的知識(shí)與經(jīng)驗(yàn)自行設(shè)計(jì)。
系統(tǒng)硬件包括單片機(jī)最小系統(tǒng),最小系統(tǒng)包括時(shí)鐘和復(fù)位電路構(gòu)成。數(shù)碼管顯示模擬水位值,使用3位共陽(yáng)極數(shù)碼管構(gòu)成顯示電路,對(duì)應(yīng)數(shù)碼管的驅(qū)動(dòng)使用OC門(mén)驅(qū)動(dòng)芯片74HC07,對(duì)繼電器的驅(qū)動(dòng)也采用74HC07。實(shí)際單片機(jī)與上位機(jī)通信要進(jìn)行電平轉(zhuǎn)換,如果上位機(jī)使用RS232串口,由于單片機(jī)是TTL電平,所以要使用電平轉(zhuǎn)換芯片,將TTL電平轉(zhuǎn)成RS232串口電平。為了更接近工程實(shí)踐,電路中設(shè)計(jì)電平轉(zhuǎn)換電路,轉(zhuǎn)換芯片為MAX232。使用Proteus中的虛擬元件COMPIM實(shí)現(xiàn)單片機(jī)與上位機(jī)通信,COMPIM是把仿真電路中的數(shù)字量映射到計(jì)算機(jī)的物理端口。單片機(jī)的TXD和RXD與COMPIM相連接,就可以直接操作映射到物理端口。需要注意的是,TXD和RXD兩根信號(hào)線是直通方式連接,而非交叉。學(xué)生根據(jù)教師講解后自行設(shè)Proteus仿真電路圖,整體電路如圖3所示。
圖3 數(shù)碼管顯示電路
圖4 繼電器控制電機(jī)電路
圖5 單片機(jī)最小系統(tǒng)及驅(qū)動(dòng)和水位模擬電路
圖6 單片機(jī)與上位機(jī)通信電路
系統(tǒng)軟件設(shè)計(jì)包括單片機(jī)驅(qū)動(dòng)程序設(shè)計(jì)和基于VB6.0的上位機(jī)通信軟件設(shè)計(jì)。單片機(jī)驅(qū)動(dòng)程序主要包括數(shù)碼管顯示程序、撥碼開(kāi)關(guān)水位模擬程序、電機(jī)驅(qū)動(dòng)程序、水位報(bào)警程序及單片機(jī)與上位機(jī)通信程序等。上位機(jī)通信軟件主要包括軟件界面設(shè)計(jì)及對(duì)數(shù)據(jù)的接收與處理。
單片機(jī)驅(qū)動(dòng)程序這里主要給出主程序流程圖,流程圖如圖5所示。教學(xué)過(guò)程中,教師和學(xué)生共同設(shè)計(jì)程序流程圖,包括主程序流程圖和各功能函數(shù)的流程圖,學(xué)生在給出流程圖的基礎(chǔ)上自行設(shè)計(jì)程序。當(dāng)然這里的流程圖只是參考,學(xué)生自己也可自行設(shè)計(jì)程序,能達(dá)到功能要求即可,不做限制。
圖7 主程序流程圖
利用VB6.0中的MSComm控件實(shí)現(xiàn)上位機(jī)與單片機(jī)之間的通信。波特率設(shè)置為19200,數(shù)據(jù)位8位,沒(méi)有奇偶校驗(yàn)位,1位停止位。初始化代碼如下所示:
MSComm1.CommPort=3’通信端口位
‘COM3
MSComm1.Settings="9600,n,8,1"’設(shè)置通信格式
MSComm1.InputMode=
comInputModeText
'接收文本型數(shù)據(jù),如果設(shè)置為1則以二進(jìn)制的形式取回傳入的數(shù)據(jù).
MSComm1.PortOpen=True’打開(kāi)端口
MSComm1.InputLen=1
MSComm1.SThreshold=1
利用定時(shí)器控件的時(shí)間間隔屬性(Interval屬性),每隔一定時(shí)間執(zhí)行一次Timer事件中的相應(yīng)代碼,接收一次單片機(jī)發(fā)來(lái)是數(shù)據(jù),實(shí)現(xiàn)對(duì)水位的實(shí)時(shí)監(jiān)測(cè),這里設(shè)置位每500ms接收一次串口數(shù)據(jù)。
波特率是在單片機(jī)時(shí)鐘頻率為11.0592MHz時(shí)計(jì)算得到的,所以設(shè)置單片機(jī)和COMPIM的時(shí)鐘頻率為11.0592MHz。使用虛擬串口軟件創(chuàng)建一對(duì)虛擬串口,這里為COM3和COM4口,波特率設(shè)為19200。使用開(kāi)關(guān)模擬液位傳感器檢測(cè)到的水位,最低水位設(shè)為3,最高水位設(shè)為100,模擬的實(shí)時(shí)水位為撥碼開(kāi)關(guān)的值乘以100/255。模擬的水位值在數(shù)碼管上顯示,同時(shí)通過(guò)串口發(fā)送給上位機(jī),上位機(jī)能檢測(cè)到水位控制的情況,仿真結(jié)果如圖所示。
圖8 上位機(jī)運(yùn)行結(jié)果
在實(shí)際的教學(xué)過(guò)程中,使用Proteus可以使每個(gè)學(xué)生都能獨(dú)立設(shè)計(jì)基于單片機(jī)的硬件電路,且對(duì)于同一問(wèn)題不同的學(xué)生可能采用不同的方法,因此可以提高學(xué)生的硬件電路設(shè)計(jì)能力和創(chuàng)新能力。設(shè)計(jì)完硬件電路之后每個(gè)學(xué)生設(shè)計(jì)針對(duì)該硬件的驅(qū)動(dòng)程序,使學(xué)生對(duì)單片機(jī)軟硬件的結(jié)合理解更深。為了某些情況下實(shí)現(xiàn)遠(yuǎn)程監(jiān)測(cè),可以使用串口將采集的信息發(fā)送給上位機(jī),因此要編寫(xiě)上位機(jī)程序。由于VB6.0上手容易,所以在實(shí)施任務(wù)之前要求學(xué)生利用課余時(shí)間自學(xué)VB6.0編程軟件,教師指導(dǎo)學(xué)生學(xué)習(xí)與本系統(tǒng)開(kāi)發(fā)有關(guān)的VB知識(shí),在學(xué)生自學(xué)的過(guò)程中,提高學(xué)生的自學(xué)能力,實(shí)踐證明在這過(guò)程中學(xué)生的自學(xué)能力和學(xué)習(xí)自覺(jué)性都得到很大的提高。并且當(dāng)學(xué)生通過(guò)自己的努力完成教學(xué)任務(wù)后,有了很大的成就感,最后使得一部分學(xué)生,在仿真的基礎(chǔ)上自己設(shè)計(jì)PCB然后在網(wǎng)上找商家打樣,最后做成實(shí)際的硬件系統(tǒng)。所以通過(guò)Proteus和VB6.0聯(lián)合仿真在提高一定難度的基礎(chǔ)上