摘 要:隨著工業(yè)4.0時(shí)代到來(lái),智能工廠已成為制造業(yè)轉(zhuǎn)型升級(jí)的重要方向。在智能工廠中,環(huán)境監(jiān)測(cè)是保障生產(chǎn)安全、提高能效和保障產(chǎn)品質(zhì)量的重要環(huán)節(jié)。針對(duì)無(wú)線通信在智能工廠環(huán)境監(jiān)測(cè)應(yīng)用中存在的信號(hào)干擾、傳輸延遲以及安全性不足等缺陷,本文提出了一種采用有線通信方式的解決方案。方案設(shè)計(jì)硬件電路,采用Proteus仿真與Keil軟件編程相結(jié)合的方式,驗(yàn)證了單片機(jī)與計(jì)算機(jī)之間串行通信技術(shù)在智能工廠環(huán)境監(jiān)測(cè)領(lǐng)域應(yīng)用的可行性。
關(guān)鍵詞:?jiǎn)纹瑱C(jī);串行通信;Proteus仿真;Keil
中圖分類號(hào):TN 92" " " " " " " " " " 文獻(xiàn)標(biāo)志碼:A
智能工廠環(huán)境監(jiān)測(cè)系統(tǒng)需要實(shí)時(shí)、準(zhǔn)確地收集溫度、濕度和氣體濃度等環(huán)境數(shù)據(jù)來(lái)預(yù)防事故、優(yōu)化生產(chǎn)流程。在環(huán)境數(shù)據(jù)與電腦的通信過(guò)程中,雖然無(wú)線通信能夠提供便捷的組網(wǎng)方式,但是在工業(yè)現(xiàn)場(chǎng),電磁干擾、多徑效應(yīng)等問(wèn)題可能導(dǎo)致數(shù)據(jù)傳輸不穩(wěn)定,甚至丟失關(guān)鍵數(shù)據(jù)。因此,研究有線通信技術(shù)在智能工廠環(huán)境監(jiān)測(cè)中的應(yīng)用具有重要意義。在智能工廠中,單片機(jī)作為下位機(jī),其數(shù)據(jù)處理能力高,編程接口靈活,能夠與采集環(huán)境數(shù)據(jù)的各類傳感器連接,實(shí)時(shí)采集環(huán)境數(shù)據(jù)。將計(jì)算機(jī)作為上位機(jī)進(jìn)行數(shù)據(jù)管理,采用串行通信方式與單片機(jī)建立穩(wěn)定的數(shù)據(jù)傳輸鏈路,完成數(shù)據(jù)的有線通信傳輸。本文利用Proteus仿真平臺(tái)驗(yàn)證了單片機(jī)與計(jì)算機(jī)串行通信的可行性與有效性,為提升智能工廠環(huán)境監(jiān)測(cè)系統(tǒng)的穩(wěn)定性和可靠性提供了技術(shù)支持。
1 串行通信原理
串行通信和并行通信是設(shè)備之間信息交換和傳輸?shù)穆窂椒绞?。并行通信?shù)據(jù)字節(jié)的各位用多條傳輸線同時(shí)傳送,其特點(diǎn)是傳輸速度快,效率高,控制簡(jiǎn)單,但是不適用于長(zhǎng)距離傳輸。串行通信將數(shù)據(jù)字節(jié)的各位逐個(gè)在一條傳輸線上進(jìn)行傳送,其特點(diǎn)是傳輸線少,成本低,但是控制比較復(fù)雜。隨著計(jì)算機(jī)技術(shù)、通信技術(shù)和電子技術(shù)的發(fā)展,結(jié)合智能工廠對(duì)傳輸距離和成本的要求,本文使用串行通信[1]。
1.1 串行通信傳輸方式
在串行通信中,數(shù)據(jù)的發(fā)送和接收有3種傳輸方式,分別為單工、半雙工和全雙工,如圖1所示。單工方式(Simplex)表示發(fā)送器利用1條傳輸線與接收器進(jìn)行連接,數(shù)據(jù)單向傳輸。半雙工方式(Half-duplex)雙向傳輸數(shù)據(jù),只有1條傳輸線,不能同時(shí)收發(fā)數(shù)據(jù)。全雙工方式(Full-duplex)需要2條傳輸線,向2個(gè)不同方向進(jìn)行數(shù)據(jù)傳送,可以同時(shí)進(jìn)行數(shù)據(jù)輸入和輸出[2]。
1.2 串行異步通信格式
按照串行數(shù)據(jù)時(shí)鐘控制方式,串行通信可以分為同步通信和異步通信。同步通信建立發(fā)送方時(shí)鐘對(duì)接收方時(shí)鐘的直接控制,使雙方達(dá)到完全同步。異步通信是通信的發(fā)送與接收設(shè)備使用各自的時(shí)鐘,兩者時(shí)鐘盡可能一致[3]。本文采用異步通信方式進(jìn)行上位機(jī)與下位機(jī)通信。
發(fā)送器發(fā)送的字符數(shù)據(jù)只能由“0”或者“1”這2種邏輯組成。數(shù)據(jù)的第一部分為起始位,當(dāng)空閑狀態(tài)為“1”時(shí),發(fā)送器發(fā)送“0”,表示一個(gè)字節(jié)數(shù)據(jù)傳輸開(kāi)始,即由高電平跳變到低電平。第二部分為數(shù)據(jù)位,依次從第0位到第7位。第三部分為奇偶校驗(yàn)位,如果采用奇校驗(yàn),那么字符數(shù)據(jù)位中邏輯“1”的數(shù)目為奇數(shù),校驗(yàn)位為“0”,字符數(shù)據(jù)位中邏輯“1”的數(shù)目為偶數(shù),校驗(yàn)位為“1”;如果采用偶檢驗(yàn),那么相反。第四部分為停止位,表示一個(gè)字節(jié)數(shù)據(jù)傳送結(jié)束,如果不需要發(fā)送數(shù)據(jù),那么傳輸線維持邏輯“1”的狀態(tài)。從開(kāi)始位到停止位的時(shí)間稱為一幀,也稱幀格式,如圖2所示。
1.3 串行口相關(guān)寄存器設(shè)置
1.3.1 數(shù)據(jù)緩沖器(SBUF)
數(shù)據(jù)緩沖器(Serial Data Buffer,SBUF)是片機(jī)內(nèi)部特殊功能寄存器,包括發(fā)送(輸出)和接收2個(gè)寄存器。發(fā)送SBUF由TXD(P3.1)引腳接出,只能寫(xiě)入,不能讀出,寫(xiě)操作格式為SBUF=str[j]。接收SBUF由RXD(P3.0)引腳接出,只能讀出外設(shè)傳輸至寄存器的數(shù)據(jù),不能寫(xiě)入,讀操作格式為buf=SBUF。
1.3.2 電源控制寄存器(PCON)
電源控制寄存器(Power Control Register,PCON)的作用是管理單片機(jī)的電源,包括進(jìn)入掉電模式、進(jìn)入空閑模式以及進(jìn)行上電復(fù)位檢測(cè)。當(dāng)單片機(jī)復(fù)位時(shí),PCON的8位清零,其位符號(hào)定義見(jiàn)表1。串口設(shè)置只涉及SMOD位,當(dāng)SMOD=1時(shí),串行通信方式一、方式二和方式三的波特率加倍,當(dāng)SMOD=0時(shí),波特率不加倍。
1.3.3 串行口控制寄存器(SCON)
串行口控制寄存器(Serial Control Register,SCON)定義串行口工作方式和收發(fā)使能控制,其位符號(hào)定義見(jiàn)表2。
REN為接收允許使能端,由軟件置位或清零,當(dāng)其值為1時(shí)允許接收,當(dāng)其值為0時(shí)禁止接收。TI為發(fā)送中斷標(biāo)志位,一幀數(shù)據(jù)發(fā)送結(jié)束后由硬件置位,可以采用軟件查詢方式獲得置位信息,也可以采用中斷方式發(fā)送下一個(gè)數(shù)據(jù),但是必須由軟件清零。RI為接收中斷標(biāo)志位,一幀數(shù)據(jù)接收完成后由硬件置位,可以采用查詢或中斷方式獲得置位信息,但是也必須由軟件清零。SM0、SM1為工作方式選擇位,串行口工作方式見(jiàn)表3。
方式0為8位同步移位寄存器輸入/輸出方式,不用于通信,只用來(lái)擴(kuò)展I/O口,波特率固定為fosc/12。
方式一為波特率可調(diào)的10位異步通信,能夠用于單片機(jī)與單片機(jī)或單片機(jī)與計(jì)算機(jī)之間進(jìn)行通信,本文采用該方式進(jìn)行單片機(jī)與計(jì)算機(jī)之間的串行異步通信。當(dāng)串口工作在發(fā)送狀態(tài)時(shí),數(shù)據(jù)由TXD端輸出,接入MAX487的DI輸入端,一幀數(shù)據(jù)由10位組成,包括1個(gè)起始位、8個(gè)數(shù)據(jù)位和1個(gè)停止位,先發(fā)送D0位,再發(fā)送D7位,當(dāng)單片機(jī)執(zhí)行寫(xiě)操作時(shí),啟動(dòng)發(fā)送;當(dāng)串口工作在接收狀態(tài)時(shí),REN=1,允許接收,RXD接入MAX487的RO輸出端,單片機(jī)采樣RXD引腳數(shù)據(jù),執(zhí)行讀操作,當(dāng)包括停止位的一幀數(shù)據(jù)接收完成后,RI=1由硬件置位,等待下一幀數(shù)據(jù)。
1.4 RS485總線標(biāo)準(zhǔn)
智能工廠使用單片機(jī)作為下位機(jī)對(duì)外部環(huán)境進(jìn)行數(shù)據(jù)采集,根據(jù)RS485總線標(biāo)準(zhǔn)與計(jì)算機(jī)(上位機(jī))之間進(jìn)行半雙工異步通信,設(shè)通信距離為1 200 m,最大傳輸速率為10 Mbit/s。利用差動(dòng)信號(hào)進(jìn)行傳輸,當(dāng)邏輯為“1”時(shí),A端與B端差分電壓為+2 V~+6 V;當(dāng)邏輯為“0”時(shí),A端與B端差分電壓為-6 V~-2 V。485總線電平與單片機(jī)的TTL電平不兼容,如果要進(jìn)行總線通信,那么需要電平轉(zhuǎn)換芯片,本文采用MAX487芯片實(shí)現(xiàn)該功能。MAX487芯片是一款低功耗收發(fā)器,內(nèi)部有接收器和發(fā)送器。由于采用半雙工通信,在同一個(gè)時(shí)刻只能接收或發(fā)送,因此將RE和DE接單片機(jī)的一個(gè)引腳作為使能端,當(dāng)引腳電平為0時(shí),MAX487為接收器;當(dāng)引腳電平為1時(shí),MAX487為發(fā)送器。RO為MAX487芯片作為接收器的輸出端,與單片機(jī)的RXD相連,此時(shí)單片機(jī)讀取PC發(fā)送的信息。DI為MAX487芯片作為發(fā)送器的輸入端,與單片機(jī)的TXD相連,此時(shí)單片機(jī)寫(xiě)入信息至PC機(jī)。單片機(jī)與MAX487芯片連接如圖3所示。
2 系統(tǒng)設(shè)計(jì)
2.1 系統(tǒng)架構(gòu)
本文設(shè)計(jì)一個(gè)以單片機(jī)為核心,集成多種環(huán)境檢測(cè)傳感器的智能工廠環(huán)境監(jiān)控系統(tǒng),能夠?qū)崟r(shí)監(jiān)測(cè)并傳輸關(guān)鍵環(huán)境參數(shù)至計(jì)算機(jī),進(jìn)行進(jìn)一步分析與管理。系統(tǒng)框架包括STC89C52RC單片機(jī)控制模塊、傳感器數(shù)據(jù)采集模塊以及RS485通信模塊。在仿真過(guò)程中,傳感器使用矩陣鍵盤(pán)按鍵的鍵值代替檢測(cè),模擬智能工廠環(huán)境檢測(cè)與上位機(jī)進(jìn)行RS485通信。智能工廠環(huán)境檢測(cè)系統(tǒng)框如圖4所示。
2.2 程序編寫(xiě)
2.2.1 波特率設(shè)置
在串行通信中,波特率為收發(fā)雙方傳送數(shù)據(jù)的速度,即串行端口每秒傳輸?shù)牟ㄌ匚粩?shù)。在串行口4種工作方式中,方式0和方式二波特率固定,方式一和方式三的波特率是可變的,將定時(shí)器T1作為波特率的發(fā)生器,其值由SMOD和T1的溢出速率決定,計(jì)算過(guò)程如公式(1)所示。
(1)
本文設(shè)T1的溢出速率為(fosc/12)/(256-X),晶振為11.059 2 MHz,SMOD為0,波特率為9 600 B。T1的初值X為253,轉(zhuǎn)換為十六進(jìn)制即0xFD,T1的初值為0xFD。
2.2.2 串行口初始化程序
當(dāng)進(jìn)行串行操作時(shí),須對(duì)單片機(jī)的串行口進(jìn)行一些必要的初始化設(shè)置。具體操作步驟如下。1)確定定時(shí)器的工作方式,設(shè)置TMOD寄存器,TMOD為0x20,T1的工作方式為方式二。TL1為計(jì)算值,TH1為自動(dòng)重裝值,當(dāng)定時(shí)器溢出時(shí),TH1的值會(huì)自動(dòng)裝載至TL1,再重新計(jì)數(shù)。2)計(jì)算T1的初值,裝載TH1和TL1,得到TH1=0xFD,TL1=0xFD。3)啟動(dòng)定時(shí)器T1,設(shè)置TCON的TR1位,此時(shí),TR1=1為啟動(dòng)定時(shí)器。4)確定串行口,設(shè)置SCON寄存器,REN=1,允許接收,SM0=0,SM1=1,串行口的工作方式為方式一。5)采用查詢或中斷方式查看串行口工作過(guò)程,如果使用中斷方式,那么需要設(shè)置IE或IP寄存器。
串行口初始化函數(shù)為uart_int( ),具體設(shè)置如下。
void uart_int( )
{
TMOD=0x20;
TH1=0xFD;
TL1=0xFD;
TR1=1;
REN=1;
SM0=0;
SM1=1;
EA=1;
ES=1;
}
2.2.3 發(fā)送和接收程序
通常采用查詢和中斷方式設(shè)計(jì)串行口發(fā)送和接收工作過(guò)程程序。本文采用查詢方式查詢SCON的TI位是否為1。在串行口中斷程序中進(jìn)行數(shù)據(jù)接收,接收完成后,軟件將RI清零。接收和發(fā)送程序如下[4]。
void UART_SendString(unsigned char * j)
{
unsigned char j=0;
while(str[j] != '\0')
{
UART_SendByte(str[j]);
j++;
}
}
void UART_Routine(void) interrupt 4
{
if(RI==1)
{
RI=0;
buf=SBUF;
LED=0;
P20=1;
P21=0;
}
}
3 系統(tǒng)驗(yàn)證
3.1 仿真電路搭建
智能工廠環(huán)境監(jiān)控系統(tǒng)的Proteus軟件仿真包括STC89C52RC
單片機(jī)、矩陣鍵盤(pán)、COMPIM組件以及MAX487芯片。使用虛擬終端查看發(fā)送的數(shù)據(jù),智能工廠環(huán)境檢測(cè)仿真如圖5所示。
3.2 建立串口通信
利用VSPD軟件建立com1和com2虛擬串口對(duì),com1為Proteus仿真軟件中COMPIM模塊的串口,com2為串口調(diào)試助手的串口號(hào),將單片機(jī)和計(jì)算機(jī)進(jìn)行串行通信。按照本文的程序設(shè)計(jì)要求以及串行通信的格式要求,設(shè)置COMPIM模塊和串口調(diào)試助手的參數(shù):波特率為9 600 B,無(wú)奇偶校驗(yàn)位,數(shù)據(jù)位8位,停止位1位[5]。
3.3 仿真結(jié)果分析
開(kāi)啟仿真,LED小燈熄滅,在串口調(diào)試助手的發(fā)送區(qū)發(fā)送“系統(tǒng)開(kāi)始檢測(cè)”,LED小燈點(diǎn)亮,說(shuō)明計(jì)算機(jī)向單片機(jī)發(fā)送數(shù)據(jù)成功,同時(shí)虛擬終端顯示發(fā)送的數(shù)據(jù)。當(dāng)按下矩陣鍵盤(pán)時(shí),在串口調(diào)試助手的接收區(qū)顯示鍵值代表傳感器檢測(cè)數(shù)據(jù),說(shuō)明單片機(jī)向計(jì)算機(jī)發(fā)送數(shù)據(jù)成功。仿真結(jié)果表明,系統(tǒng)可以在計(jì)算機(jī)和單片機(jī)之間進(jìn)行RS485串行通信。
4 結(jié)語(yǔ)
本文利用Proteus軟件進(jìn)行仿真,完成上位機(jī)與下位機(jī)的RS485通信。上位機(jī)開(kāi)啟系統(tǒng)檢測(cè),下位機(jī)利用傳感器檢測(cè)環(huán)境并上傳至上位機(jī),顯示在上位機(jī)的接收緩沖區(qū)。雙機(jī)之間完成串行異步通信,驗(yàn)證了單片機(jī)與計(jì)算機(jī)之間的RS485通信的可行性。
參考文獻(xiàn)
[1]楊敬娜,董軍剛,陳亮.單片機(jī)技術(shù)應(yīng)用與實(shí)踐[M].北京:中國(guó)人民大學(xué)出版社,2022.
[2]周正鼎.單片機(jī)應(yīng)用與調(diào)試項(xiàng)目教程(C語(yǔ)言版)[M].北京:機(jī)械工業(yè)出版社,2011.
[3]聶章龍.STC系列單片機(jī)項(xiàng)目實(shí)踐[M].北京:機(jī)械工業(yè)出版社,2017.
[4]程建國(guó),葉勁龍,李輝,等.基于單片機(jī)的串口模擬設(shè)計(jì)與實(shí)現(xiàn)[J].電工技術(shù),2024(10):164-165,169.
[5]王向玲,石曉玲.單片機(jī)實(shí)踐教學(xué)中串行通信電路的設(shè)計(jì)及仿真[J].呂梁學(xué)院學(xué)報(bào),2022,12(2):30-33.