郭興龍
(廣州市市政職業(yè)學(xué)校,廣東廣州 510507)
目前,教學(xué)實(shí)驗(yàn)室的設(shè)備電源,由外部電箱引入實(shí)驗(yàn)室,經(jīng)過(guò)總開(kāi)關(guān)控制之后再分配至各個(gè)實(shí)驗(yàn)設(shè)備,由各個(gè)實(shí)驗(yàn)設(shè)備單獨(dú)控制,因此無(wú)法集中控制。設(shè)備電源一般是AC220V或者AC380V,當(dāng)學(xué)生在教學(xué)實(shí)驗(yàn)室上課的時(shí)候,可能無(wú)意中啟動(dòng)設(shè)備電源,容易造成觸電事故。設(shè)備電源如果采用繼電器連線(xiàn)到教師機(jī),使用船型開(kāi)關(guān)啟停的集中控制模式,存在布線(xiàn)繁瑣、占用空間較多以及維護(hù)不方便的問(wèn)題。為解決上述問(wèn)題,研究并設(shè)計(jì)了基于RS-485網(wǎng)絡(luò)和STC8A單片機(jī)的集中控制系統(tǒng)。
系統(tǒng)設(shè)計(jì)中,以STC8A單片機(jī)為核心控制單元,單獨(dú)控制每個(gè)設(shè)備電源的啟動(dòng)或者關(guān)閉??刂茊卧ㄟ^(guò)RS-485網(wǎng)絡(luò),與教師機(jī)的上位機(jī)連接,進(jìn)行遠(yuǎn)程通信[1]。教師機(jī)的上位機(jī)作為主站,其按照一定的通信協(xié)議,不斷發(fā)送指令到各個(gè)控制單元。各個(gè)控制單元作為從站,被動(dòng)地接收主站指令,并對(duì)各個(gè)指令做出相應(yīng)的回復(fù)。系統(tǒng)的供電,主要是通過(guò)電源整流模塊,直接將交流電壓轉(zhuǎn)換為直流,供給單片機(jī)以及各個(gè)外圍元器件使用。單片機(jī)通過(guò)小型繼電器驅(qū)動(dòng)AC220V或者AC380V交流接觸器,從而控制設(shè)備的輸入電源,系統(tǒng)網(wǎng)絡(luò)整體設(shè)計(jì)框圖如圖1所示。
圖1 系統(tǒng)網(wǎng)絡(luò)整體框圖
單片機(jī)控制單元設(shè)計(jì)如圖2所示,主要由STC8A單片機(jī)、RS485接口模塊、直流電源模塊、數(shù)碼管顯示和按鍵模塊、撥碼開(kāi)關(guān)模塊、負(fù)載電流檢測(cè)模塊和繼電器控制模塊等組成。STC8A單片機(jī)為核心控制器,負(fù)責(zé)系統(tǒng)的整體控制運(yùn)行,根據(jù)指令控制繼電器的通斷來(lái)開(kāi)啟或者關(guān)閉設(shè)備輸入電源。直流電源模塊將AC220V直接整流濾波輸出穩(wěn)定的DC5V,供給各個(gè)模塊使用。MAX485芯片為RS485通訊接口芯片,主要構(gòu)成通訊網(wǎng)絡(luò)。撥碼開(kāi)關(guān)模塊,設(shè)置控制單元的地址碼,該地址碼作為網(wǎng)路通訊地址碼使用。負(fù)載電流的檢測(cè),主要通過(guò)ACS712霍爾傳感器芯片,單片機(jī)不斷采樣負(fù)載電流值,與上位機(jī)發(fā)送過(guò)來(lái)的最大負(fù)載電流值比較,超過(guò)該值,系統(tǒng)將負(fù)載電流切斷,并報(bào)警上位機(jī),實(shí)現(xiàn)負(fù)載電流實(shí)時(shí)監(jiān)控功能,防止意外事故發(fā)生。數(shù)碼管顯示和按鍵模塊,作為人機(jī)交互接口,實(shí)現(xiàn)數(shù)據(jù)的輸入或者輸出功能。
圖2 單片機(jī)控制單元系統(tǒng)框圖
根據(jù)控制單元設(shè)計(jì)要求,選用某公司生產(chǎn)的STC8A4K32S2A12單片機(jī)。STC8A4K32S2A12是一款基于MCS51內(nèi)核的超高速單片機(jī),采用LQFP44的封裝,工作電壓范圍為2.0~5.5 V,F(xiàn)lash程序存儲(chǔ)器為32 kB,靜態(tài)SRAM為4 kB,內(nèi)部集成了24 MHz高精度IRC時(shí)鐘源,無(wú)需外部晶振。芯片具有內(nèi)部看門(mén)狗和ISP/IAP在系統(tǒng)可編程/在應(yīng)用可編程功能,可實(shí)現(xiàn)快速更新程序和便于程序設(shè)計(jì)。內(nèi)部資源豐富,可以提供20個(gè)中斷源,5個(gè)16位定時(shí)器,2組高速串口,4組16位PCA模塊和15通道的12位ADC轉(zhuǎn)換器,同時(shí)具有SPI,I2C接口設(shè)計(jì),便于電路設(shè)計(jì)和程序開(kāi)發(fā)[2]。STC8A4K32S2A12芯片電路簡(jiǎn)單,抗干擾能力強(qiáng),典型應(yīng)用電路[2]如圖3所示。
ACS712ELCTR-20A是一款低內(nèi)阻、隔離電壓高達(dá)2.1 kVRMS的集成霍爾效應(yīng)線(xiàn)性電流傳感器。檢測(cè)直流電流時(shí),霍爾傳感器的輸出是以2.5 V作為基準(zhǔn)的直流電壓信號(hào)。檢測(cè)信號(hào)為交流電流時(shí),霍爾傳感器的輸出是以2.5 V作為基準(zhǔn)直流電壓,疊加交流信號(hào)。該信號(hào)需要通過(guò)整流電路將交流信號(hào)轉(zhuǎn)換成直流信號(hào),提供給單片機(jī)采樣。主要參數(shù)如表1所示。
主要設(shè)計(jì)電路如圖4所示:ASC712芯片通過(guò)端子接入設(shè)備電源輸入支路中,傳感器輸出電壓由VIOUT管腳輸出,經(jīng)過(guò)電阻分壓之后,經(jīng)過(guò)二極管整流穩(wěn)壓輸出之后,送到單片機(jī)ADC采樣。
圖3 STC8A4K系列單片機(jī)典型應(yīng)用電路
表1 ACS712ELCTR-20A主要參數(shù)[3]
圖4 ASC712電流檢測(cè)電路
為了提高電流檢測(cè)精度,需要提高采樣參考電壓的精度。該系統(tǒng)采用MCP1541作為單片機(jī)ADC采樣的參考電壓源。MCP1541輸入電壓為4.3~4.5 V,輸出參考電壓為4.096 V,精度達(dá)到±1%,采用SOT-23封裝[4]。具有較低的紋波,紋波頻率在0.1~10 Hz范圍之內(nèi),精度達(dá)到小于或等于145uVrms,完全可以滿(mǎn)足系統(tǒng)設(shè)計(jì)需要。ADC采樣參考電壓電路設(shè)計(jì)如圖5所示,模擬地和數(shù)字地要分開(kāi)。
圖5 ADC采樣參考電壓電路
該系統(tǒng)中,負(fù)載電流實(shí)時(shí)值和一些參數(shù)等數(shù)據(jù),主要通過(guò)數(shù)碼管實(shí)現(xiàn)數(shù)據(jù)的輸入、輸出功能。顯示采用3位一體的共陰極數(shù)碼管,采用動(dòng)態(tài)掃描的顯示方式。動(dòng)態(tài)顯示方式,相比靜態(tài)顯示方式,可極大地節(jié)約了IO管腳,電路設(shè)計(jì)如圖6所示。
圖6 數(shù)碼管顯示電路設(shè)計(jì)
串口通訊電路設(shè)計(jì),采用MAX485芯片完成。MAX485是一款半雙工、±20 kVESD,應(yīng)用于RS485的通訊系統(tǒng)收發(fā)芯片。其通訊速率高達(dá)10 MB/s,總線(xiàn)連接個(gè)數(shù)高達(dá)256個(gè),并且具有較寬的共模電壓范圍,其設(shè)計(jì)電路如圖7所示,一般在傳輸總線(xiàn)的兩端,并聯(lián)一個(gè)120Ω的電阻,起到阻抗匹配的作用。
該系統(tǒng)的單片機(jī)控制單元電源,采用WA3-220S05A3模塊產(chǎn)生+5 V電源。WA3-220S05A3是一款內(nèi)部集成了變壓、整流和穩(wěn)壓濾波的開(kāi)關(guān)電源,具有寬電壓范圍輸入,能夠交直兩用,低紋波、低溫升、低功耗、高效率和高可靠性的優(yōu)點(diǎn),集成了過(guò)流、短路、過(guò)溫保護(hù)和自恢復(fù)的功能[5]。封裝上采用PCB板直接焊接的安裝方式,廣泛應(yīng)用于工業(yè)、辦公及民用等多個(gè)領(lǐng)域,抗干擾能力強(qiáng),比較適合用于電磁兼容惡劣的環(huán)境。其電路設(shè)計(jì)如圖8所示。電路中F1為保險(xiǎn)絲,起到短路保護(hù)作用,5D-11是NTC熱敏電阻,作為浪涌電流限流保護(hù)用。14D-471K為壓敏電阻,作為雷擊浪涌時(shí)過(guò)壓保護(hù)用。
圖7 串口電路設(shè)計(jì)
圖8 單片機(jī)控制單元電源電路設(shè)計(jì)
圖9 程序控制主流程圖
系統(tǒng)單片機(jī)程序設(shè)計(jì)包括主程序模塊、數(shù)碼管顯示模塊、按鍵輸入檢測(cè)模塊、RS485串口通訊模塊、負(fù)載電流ADC采樣模塊和繼電器控制模塊等部分。
2.7.1 主程序設(shè)計(jì)
主程序設(shè)計(jì)如圖9所示,系統(tǒng)上電之后,將進(jìn)行一些參數(shù)初始化,如定時(shí)器設(shè)置、串口參數(shù)設(shè)置以及ADC轉(zhuǎn)換設(shè)置,之后再進(jìn)入主程序循環(huán)函數(shù)。主程序循環(huán)函數(shù)不斷查詢(xún)按鍵、ADC采樣更新以及上位機(jī)接收信息,查詢(xún)到相關(guān)信息之后,進(jìn)入相應(yīng)的處理函數(shù)并更新數(shù)據(jù)。
2.7.2 串口通訊模塊設(shè)計(jì)
串口通訊模塊設(shè)計(jì)包括字符收發(fā)、處理部分和應(yīng)答等3部分。字符收發(fā)主要在串口中斷函數(shù)里處理,字符接收到完整的字符串之后,主要在主循環(huán)函數(shù)里查詢(xún)處理,并將應(yīng)答信息發(fā)送給上位機(jī)。單片機(jī)與上位機(jī)的通訊,采用自定義的通訊協(xié)議,上位機(jī)主動(dòng)發(fā)送命令,單片機(jī)作為從機(jī),被動(dòng)接收數(shù)據(jù)和應(yīng)答上位機(jī)。為提高通訊的可靠性,防止錯(cuò)誤的報(bào)文導(dǎo)致意外事故發(fā)生,幀的報(bào)文中,增加校驗(yàn)和處理,校驗(yàn)和為幀報(bào)文中除校驗(yàn)和之外的所有字節(jié)累加,取低字節(jié)部分,溢出部分忽略不用。在幀的格式中,除起始符和結(jié)束符之外,其它字節(jié)拆分為兩個(gè)ASCII字符。
(1)上位機(jī)通訊幀格式字符如表2所示。例如:上位機(jī)需要控制設(shè)備的電源關(guān)閉,指令代碼是“c”(close單詞首字母的ACSII碼),上位機(jī)發(fā)送的幀為:
STX+地址高字節(jié)+地址低字節(jié)+63+ETX+校驗(yàn)和高字節(jié)+校驗(yàn)和低字節(jié)
表2 上位機(jī)通訊指令幀格式
(2)單片機(jī)幀應(yīng)答主要有兩種,一種不帶參數(shù)的應(yīng)答,一種是需要返回參數(shù)的應(yīng)答。其應(yīng)答格式如表3所示,如果接收到的指令不對(duì)或者校驗(yàn)和不符,控制單元應(yīng)答NAK。
表3 通訊應(yīng)答幀格式
(3)串口通訊接收主要是在串口中斷函數(shù)里完成,數(shù)據(jù)接收采用一組緩沖寄存器,兩個(gè)指針的處理方式[6],如圖10所示。每接收到1個(gè)數(shù)據(jù),RxPointer指針加1,并將數(shù)據(jù)存放入寄存器組,如果指針超過(guò)數(shù)組大小,指針歸0。在通訊處理函數(shù),先預(yù)讀數(shù)組。每讀取1個(gè)數(shù)組,ReadPointer指針加1。主循環(huán)程序中,不斷查詢(xún)是否接收到一個(gè)完整的報(bào)文,如果是完整的一個(gè)報(bào)文,才可以進(jìn)入報(bào)文處理函數(shù)。再判斷報(bào)文校驗(yàn)和是否正確,如果報(bào)文出錯(cuò),整個(gè)報(bào)文做丟棄處理,數(shù)據(jù)讀取處理流程如圖11所示。RxPointer和ReadPointer指針地址不能夠一樣。在通訊應(yīng)答發(fā)送過(guò)程中,待發(fā)送的第一個(gè)數(shù)據(jù)寫(xiě)入發(fā)送寄存器后,發(fā)送長(zhǎng)度減1。數(shù)據(jù)發(fā)送完畢之后進(jìn)入串口中斷函數(shù),通過(guò)判斷發(fā)送長(zhǎng)度字節(jié)數(shù),繼續(xù)將數(shù)據(jù)寫(xiě)入發(fā)送寄存器,直至待發(fā)送長(zhǎng)度字節(jié)數(shù)為0,程序流程圖如圖12所示。
圖10 通訊接收數(shù)據(jù)緩沖器設(shè)計(jì)
圖11 數(shù)據(jù)讀取處理流程圖
圖12 發(fā)送程序流程圖
2.7.3 ADC采樣
ADC采樣主要采用中斷的處理方式。ADC轉(zhuǎn)換器啟動(dòng)之后,按照一定的時(shí)間間隔自動(dòng)完成一次采樣工作之后,程序進(jìn)入中斷處理函數(shù)。程序讀取采樣值,并累加多次采樣結(jié)果,求取其平均值作為一次采樣的有效值,程序處理流程如圖13所示。
圖13 ADC中斷采樣程序流程圖
上位機(jī)軟件界面主要是在教師機(jī)上運(yùn)行,操作人員可以控制和查看每個(gè)實(shí)驗(yàn)設(shè)備的電源使用情況。軟件界面采用Visual Basic 6.0編程語(yǔ)言編寫(xiě),功能包括遠(yuǎn)程控制和實(shí)時(shí)監(jiān)測(cè)。串口通訊編程主要基于MSComm控件實(shí)現(xiàn)數(shù)據(jù)發(fā)送和接收[7],通訊協(xié)議由用戶(hù)自定義。
例如:上位機(jī)向03設(shè)備發(fā)送關(guān)閉設(shè)備電源指令,MSComm串口控件發(fā)送數(shù)據(jù)程序,如下程序所示。
MSComm1.InBufferCount=0
MSComm1.OutBufferCount=0
SendData(0)=&H02
SendData(1)=&H30
SendData(2)=&H33
SendData(3)=&H67
SendData(4)=&H03
SendData(5)=&H67
SendData(6)=&H6B
MSComm1.Output=SendData
按以上設(shè)計(jì)方案制作的單片機(jī)控制單元樣機(jī)如圖14所示,經(jīng)過(guò)電工電子實(shí)驗(yàn)室舊實(shí)驗(yàn)設(shè)備的改裝使用測(cè)試,基本上能夠?qū)崿F(xiàn)預(yù)期要求。整個(gè)系統(tǒng)設(shè)計(jì)重點(diǎn)和難點(diǎn)是負(fù)載電流檢測(cè)和數(shù)據(jù)通訊處理兩個(gè)部分。
通過(guò)設(shè)備電源控制系統(tǒng)的設(shè)計(jì)與制作,可以得出以下幾點(diǎn)結(jié)論:
(1)負(fù)載電流檢測(cè)采樣間隔周期,不能夠過(guò)長(zhǎng),通過(guò)反復(fù)試驗(yàn),采樣頻率采用36 kHz比較合適。如果頻率過(guò)快,導(dǎo)致程序反復(fù)進(jìn)入ADC中斷,頻繁占用CPU,處理其它事務(wù)相對(duì)遲滯了。如果采樣周期過(guò)長(zhǎng),導(dǎo)致電流監(jiān)測(cè)不及時(shí)。
圖14 單片機(jī)控制單元樣機(jī)
(2)負(fù)載電流檢測(cè)與控制,只能夠作為輕過(guò)載保護(hù),不能夠作為短路保護(hù),設(shè)備電源系統(tǒng)還必須有相應(yīng)的短路、漏電等保護(hù)措施。
(3)串口通訊程序的設(shè)計(jì)中,緩沖器數(shù)組數(shù)量的設(shè)置不能夠太小。如果設(shè)置過(guò)小,容易出現(xiàn)如下的情況:接收數(shù)據(jù)量過(guò)大時(shí),已接收部分沒(méi)有及時(shí)讀取,導(dǎo)致接收中斷,將部分?jǐn)?shù)據(jù)丟棄,從而使通訊質(zhì)量下降。綜合考慮單片機(jī)的RAM容量大小,接收緩沖器長(zhǎng)度為64個(gè)。