任璐1,李文石2,錢(qián)敏1,2
(1. 蘇州大學(xué) 文正學(xué)院 電子信息工程系,江蘇 蘇州 215104;2. 蘇州大學(xué) 電子信息學(xué)院 微電子工程系,江蘇 蘇州 215006)
摘要:無(wú)線記分系統(tǒng)的設(shè)計(jì)分為發(fā)送端和接收端兩部分。發(fā)送端控制程序通過(guò)RS232串口通信發(fā)送比分?jǐn)?shù)據(jù)到單片機(jī)控制的下位機(jī),并經(jīng)由nRF24L01無(wú)線射頻模塊天線進(jìn)行數(shù)據(jù)發(fā)送;接收端通過(guò)單片機(jī)控制的無(wú)線射頻模塊天線接收數(shù)據(jù)并使用8段LED數(shù)碼管顯示記分情況。系統(tǒng)的整體設(shè)計(jì)包括硬件電路、軟件程序設(shè)計(jì);發(fā)送端上位機(jī)界面程序采用VB6.0設(shè)計(jì),發(fā)送端下位機(jī)和接收端單片機(jī)程序采用C51。給出了軟件設(shè)計(jì)流程圖、硬件實(shí)物運(yùn)行現(xiàn)場(chǎng)圖。測(cè)試表明,系統(tǒng)運(yùn)行性能良好。
關(guān)鍵詞:無(wú)線計(jì)分系統(tǒng);單片機(jī)控制;nRF24L01
中圖分類(lèi)號(hào):TP274.2;TN925文獻(xiàn)標(biāo)識(shí)碼:ADOI: 10.19358/j.issn.1674-7720.2017.04.020
引用格式:任璐,李文石,錢(qián)敏.基于nRF24L01的無(wú)線電子記分系統(tǒng)設(shè)計(jì)[J].微型機(jī)與應(yīng)用,2017,36(4):66-69.
0引言
體育比賽深受人們喜愛(ài),比賽記分是比賽過(guò)程中的重要部分。大型比賽采用昂貴的大型電子記分系統(tǒng),然而大部分中小型球賽依舊采用傳統(tǒng)人工翻牌的記分模式。針對(duì)以上問(wèn)題,本文設(shè)計(jì)了一款輕巧的便攜型式電子無(wú)線遙控記分系統(tǒng),成本相對(duì)低廉[1]。該系統(tǒng)采用Nordic公司的nRF24L01無(wú)線通信收發(fā)芯片和STC公司的STC89C52RC單片機(jī)。系統(tǒng)的硬件電路簡(jiǎn)單,電路制作費(fèi)用低[23]。經(jīng)過(guò)多次實(shí)驗(yàn)測(cè)試,系統(tǒng)的工作性能穩(wěn)定,效果良好,可以廣泛運(yùn)用于中小型球類(lèi)比賽。
1系統(tǒng)總體方案
該無(wú)線遙控記分系統(tǒng)由發(fā)送端、接收端兩部分組成。發(fā)送端由上、下位機(jī)兩部分組成。下位機(jī)由觸摸按鍵、LED顯示數(shù)碼管、nRF24L01射頻發(fā)送模塊和MCU核心處理單元構(gòu)成;上位機(jī)采用PC,通過(guò)普通9針RS232串口與下位機(jī)通信。接收端由nRF24L01射頻接收模塊、MCU核心處理單元、LED顯示數(shù)碼管組成。系統(tǒng)結(jié)構(gòu)如圖1所示。
2系統(tǒng)硬件設(shè)計(jì)
發(fā)送端下位機(jī)硬件系統(tǒng)包括:主控制單元、射頻收發(fā)模塊、晶振電路、復(fù)位電路、顯示單元、串口通信單元(包括電平轉(zhuǎn)換模塊)、電源模塊等。接收端包括:主控制單元、射頻收發(fā)模塊、晶振電路、復(fù)位電路、顯示單元、電源模塊等,整體電路原理如圖2所示。下面介紹主要部分電路的設(shè)計(jì)。
2.1核心處理單元
核心處理單元采用STC公司生產(chǎn)的低功耗、高性能、超強(qiáng)抗干擾的微控制器STC89C52RC。其基于CMOS工藝,攜有8 KB在系統(tǒng)可編程Flash存儲(chǔ)器,與80C51產(chǎn)品指令和引腳完全兼容,能為眾多嵌入式控制應(yīng)用系統(tǒng)提供高靈活度、非常有效的解決方案。
STC89C52RC單片機(jī)內(nèi)部資源豐富,系統(tǒng)設(shè)計(jì)過(guò)程中充分利用這一特性,將其作為主控芯片,沒(méi)有增加過(guò)多外設(shè)。單片機(jī)的I/O端口具體資源利用情況如下:P1口及中斷與nRF24L01射頻收發(fā)模塊相連接,控制信息的發(fā)送/接收;P0口與數(shù)碼管的段選線連接,控制顯示的字段;P2端口與數(shù)碼管的位選線相連接,控制顯示數(shù)字的位;P3.0口(Rxd)與MAX232芯片的T2 OUT引腳相連;P3.1口(Txd)與MAX232芯片的T2 IN引腳相連接。P3.0和P3.1兩端口作為PC和單片機(jī)之間的串行通信口,負(fù)責(zé)兩機(jī)之間信息傳輸?shù)臉蛄骸\浖糠质菃纹瑱C(jī)對(duì)nRF24L01讀/寫(xiě)控制使之讀出當(dāng)前的比分值,并實(shí)現(xiàn)與PC的通信。
PC的串口是RS-232電平,單片機(jī)的串口是TTL電平,為了使其能夠進(jìn)行通信,使用集成芯片MAX 232進(jìn)行電平轉(zhuǎn)換。
2.2射頻模塊
nRF24L01是單片射頻收發(fā)芯片,工作于2.4~2.5 GHz ISM頻段。低功耗工作電壓為1.9~3.6 V。工作溫度范圍較大,可在-40℃~+80℃內(nèi)正常工作。nRF24L01配外置天線,無(wú)阻擋傳輸距離50~100 m,配PCB內(nèi)置天線,無(wú)阻擋傳輸距離20~50 m。該芯片有125個(gè)通信通道,滿足多點(diǎn)通信和調(diào)頻需要。無(wú)線收發(fā)器包括:頻率發(fā)生器、增強(qiáng)型Shock BurstTM模式控制器、功率放大器、晶體振蕩器、調(diào)制器、解調(diào)器。輸出功率、頻道選擇和協(xié)議的設(shè)置可以通過(guò) SPI 接口進(jìn)行實(shí)現(xiàn)??罩袛?shù)據(jù)傳輸率最高可達(dá)2 Mb/s,有自動(dòng)應(yīng)答和自動(dòng)再發(fā)射功能。通過(guò)對(duì)相應(yīng)寄存器的寫(xiě)入和讀出來(lái)完成對(duì)芯片的控制,如實(shí)現(xiàn)nRF24L01相應(yīng)寄存器的初始化、識(shí)別處理數(shù)據(jù)的收發(fā)情況并確保在數(shù)據(jù)傳輸中不發(fā)生數(shù)據(jù)丟包現(xiàn)象等。其結(jié)構(gòu)框圖如圖3所示?!?/p>
PCB布線的好壞對(duì)射頻性能有很大影響,一個(gè)差的PCB板設(shè)計(jì)可能導(dǎo)致丟包,甚至可能導(dǎo)致不能實(shí)現(xiàn)其應(yīng)有的功能。nRF24L01的射頻PCB板設(shè)計(jì)及其周邊元件包括匹配網(wǎng)絡(luò)等可以從Nordic下載。
使用至少兩層板(包括一個(gè)地層)。nRF24L01 的直流供電電源應(yīng)盡可能靠近芯片的VDD引腳,并且經(jīng)高質(zhì)量的RF電容去耦。最好用一個(gè)大電容 (比如4.7 μF鉭電容)并聯(lián)一個(gè)小電容。nRF24L01的供電電源必須經(jīng)過(guò)很好的濾波,并且與數(shù)字供電電源分離。
PCB板避免使用長(zhǎng)的電源走線,所有元器件的地、VDD及去耦電容應(yīng)盡可能地靠近nRF24L01芯片。如果在PCB 板的頂層有鋪銅“地”,VSS應(yīng)直接與鋪銅面連接。如果在PCB板的底層有鋪銅“地”,則應(yīng)該在離VSS腳盡可能近的地方放置過(guò)孔連接。每個(gè)VSS最少應(yīng)有一個(gè)過(guò)孔。所有數(shù)字信號(hào)線和控制信號(hào)線都不能離晶振和電源線太近。
2.3四位LED數(shù)碼管顯示
顯示部分是一個(gè)四位8段LED數(shù)碼管。8段數(shù)碼管由多個(gè)發(fā)光二極管封裝在一起組成“8”字形,引線在元件內(nèi)部已連接完成,只引出各個(gè)筆段和公共電極。其工作環(huán)境范圍寬泛,可達(dá)-40℃~+75℃;壽命長(zhǎng),正常情況下可超過(guò)80 000小時(shí)。數(shù)碼管外殼采用阻燃PC塑料制作,強(qiáng)度高、抗沖擊、抗老化、防紫外線、防塵、防潮。
8段數(shù)碼管可以通過(guò)專(zhuān)用驅(qū)動(dòng)芯片控制,適合各種復(fù)雜工程需求。為了點(diǎn)亮數(shù)碼管,可以選擇靜態(tài)驅(qū)動(dòng)方式或者動(dòng)態(tài)驅(qū)動(dòng)方式。
在本系統(tǒng)中,數(shù)碼管采用動(dòng)態(tài)驅(qū)動(dòng)方式。該方式中,四位數(shù)碼管的段選線相應(yīng)地并聯(lián)在一起,由一個(gè)8位I/O端口控制,形成了段選線的多路復(fù)用。而位選線分別由相應(yīng)的I/O線控制,實(shí)現(xiàn)了各位的分時(shí)選通。
2.4觸摸按鍵
本設(shè)計(jì)中發(fā)送端下位機(jī)上設(shè)置了幾個(gè)按鈕作為直接計(jì)分?jǐn)?shù)據(jù)發(fā)送開(kāi)關(guān),用于測(cè)試和手持式控制,此時(shí)不需要上位機(jī)。因?yàn)楸鞠到y(tǒng)中所需按鍵數(shù)較少,故采用彈性小按鍵作為觸摸按鍵,直接用I/O端口線構(gòu)成單個(gè)按鍵電路,接口電路配置靈活、軟件結(jié)構(gòu)簡(jiǎn)單。按鍵輸入采用低電平有效工作模式。
3系統(tǒng)軟件設(shè)計(jì)
3.1發(fā)送端下位機(jī)/接收端C51軟件設(shè)計(jì)
發(fā)送端下位機(jī)/接收端C51程序設(shè)計(jì)包含三部分:微控制器的初始化、對(duì)nRF24L01的訪問(wèn)和對(duì)四位8段數(shù)碼管的控制。
根據(jù)系統(tǒng)的硬件設(shè)計(jì),需要對(duì)nRF24L01模塊和數(shù)碼管顯示模塊進(jìn)行硬件資源的配置和定義,如圖4所示。
nRF24L01的模式是由PWR_UP、CE和PRIM_RX三個(gè)引腳定義的,根據(jù)系統(tǒng)的需要來(lái)配置其工作狀態(tài)。在配置時(shí),需要分別根據(jù)這三個(gè)引腳的不同狀態(tài)配置不同模式。這里僅僅列出了部分硬件資源的配置情況,更詳細(xì)的資料參看芯片手冊(cè)。
#define RT_MODEPWR_UP=1; PRIM_RX=0; CE=1;//收發(fā)模式
#define RT_MODE PWR_UP=1; PRIM_RX=1; CE=0;//配置模式
#define RT_MODE PWR_UP=1; PRIM_RX=0; CE=0;//待機(jī)模式
#define RT_MODE PWR_UP=0; //關(guān)機(jī)模式
單片機(jī)數(shù)據(jù)發(fā)送流程如圖5所示。
(1)將接收機(jī)的地址(RX_ADDR)和要發(fā)送的數(shù)據(jù)(TX_DATA)寫(xiě)入nRF24L01;
(2)配置寄存器(CONFIG寄存器)的工作模式,使其處于發(fā)送模式后,通過(guò)微控制器將CE拉高,時(shí)長(zhǎng)至少10 μs;
?。?)讀取狀態(tài)寄存器STATUS內(nèi)的內(nèi)容;
(4)判斷發(fā)送完成標(biāo)志位是否被置位;
(5)清空標(biāo)志位和數(shù)據(jù)緩沖,此后,nRF24L01進(jìn)入空閑狀態(tài)。
單片機(jī)數(shù)據(jù)接收流程如圖6所示。
?。?)將本機(jī)的地址和要接收的數(shù)據(jù)寫(xiě)入nRF24L01;
?。?)配置CONFIG寄存器,使其切換為接收模式,然后將CE拉高,時(shí)長(zhǎng)至少130 μs;
(3)判斷接收完成標(biāo)志位是否被置位;
(4)清空標(biāo)志位;
?。?)讀取數(shù)據(jù)緩存區(qū)內(nèi)的數(shù)據(jù);
?。?)清空數(shù)據(jù)緩沖,此后nRF24L01進(jìn)入任意模式。
出于節(jié)省I/O口、減小功耗的考慮,數(shù)碼管顯示采用動(dòng)態(tài)掃描方式,P2.0~P2.3作為位選信號(hào)的輸出端,P0.0~P0.7作為段選信號(hào)輸出端,利用人眼的視覺(jué)暫留現(xiàn)象和二極管的余暉效應(yīng)達(dá)到顯示效果。
voiddis_display()
{
P0=seg[count2%10];
led0=0;
Delay(40);
led0=1;
P0=seg[count2/10];
led1=0;
Delay(40);
led1=1;
P0=seg[count1%10];
圖7單片機(jī)串口通信程序流程圖……}
單片機(jī)RS-232串口通信模塊流程圖如圖7所示。
3.2發(fā)送端上位機(jī)主控界面VB軟件設(shè)計(jì)
為方便進(jìn)行一體化控制,如計(jì)分?jǐn)?shù)據(jù)存儲(chǔ)、多場(chǎng)次計(jì)分等,本系統(tǒng)設(shè)計(jì)了后臺(tái)PC上位機(jī)主控制界面程序,采用VB6進(jìn)行程序設(shè)計(jì)。上位機(jī)和下位機(jī)之間采用通用RS232串口進(jìn)行數(shù)據(jù)通信[45]。
后臺(tái)主控制程序VB初始化程序如下:
Private SubForm_Load()
Combo1.AddItem "COM1"//串口選擇
Combo1.AddItem "COM2"
……
Combo2.AddItem "4800"//波特率
Combo2.AddItem "9600"
Combo2.AddItem "19200"
MSComm1.InputLen = 1 //一次讀取1字節(jié)
MSComm1.InBufferSize = 3 //設(shè)置接收緩沖區(qū)大小3
MSComm1.InBufferCount = 0 //清接收緩沖區(qū)
MSComm1.OutBufferSize = 512//設(shè)置發(fā)送緩沖區(qū)大小
MSComm1.OutBufferCount = 0 //清發(fā)送緩沖區(qū)
MSComm1.RThreshold = 3 //每接收3個(gè)字符觸發(fā)接收事件
MSComm1.SThreshold = 0//發(fā)送不觸發(fā)Oncomm事件
End Sub
“打開(kāi)串口”按鈕事件代碼如下:
Private Sub Command11_Click()
Label4.Caption = "串口打開(kāi) "
If Form1.Combo1.Text = "COM1" Then
Form1.MSComm1.CommPort = 1
End If
If Form1.Combo1.Text = "COM2" Then
Form1.MSComm1.CommPort = 2 //設(shè)置串口
End If
……
If Form1.Combo2.Text = "4800" Then
Form1.MSComm1.Settings = "4800,N,8,1" //設(shè)置波特率
End If
If Combo2.Text = "9600" Then
MSComm1.Settings = "9600,N,8,1"
End If
……
Form1.MSComm1.PortOpen = True//打開(kāi)串口
End Sub
VB程序設(shè)計(jì)相關(guān)事件源代碼如下所示:
A隊(duì)“+1分”Click事件代碼如下:
Private Sub Command1_Click()//1
MSComm1.Output = "1"
End Sub
A隊(duì)“+2分”Click事件代碼如下:
Private Sub Command2_Click()//2
MSComm1.Output = "2"
End Sub
B隊(duì)“+1分”Click事件代碼如下:
Private Sub Command5_Click()//1
MSComm1.Output = "5"
End Sub
B隊(duì)“+2分”Click事件代碼如下:
Private Sub Command6_Click()//2
MSComm1.Output = "6"
End Sub
4結(jié)論
本文根據(jù)實(shí)際需要完成了計(jì)分系統(tǒng)的研究與設(shè)計(jì),包括整機(jī)設(shè)計(jì)、下位機(jī)底層硬件和軟件設(shè)計(jì),較好地達(dá)到了預(yù)期目標(biāo)。
本系統(tǒng)充分利用了STC89C52RC單片機(jī)微型化、低功耗、抗干擾能力強(qiáng)和nRF24L01可較遠(yuǎn)距離傳輸信息等優(yōu)點(diǎn),節(jié)省了電力和人力成本。該系統(tǒng)可根據(jù)賽制要求更改,以適用于不同的競(jìng)賽場(chǎng)合。
參考文獻(xiàn)
?。?] 李賀,程祥,曾令國(guó). 基于nRF24L01芯片的近程無(wú)線通信系統(tǒng)設(shè)計(jì)[J]. 現(xiàn)代電子技術(shù), 2014,37(15): 32-34.
[2] 叢林,楊凱,胡文東,等. 基于nRF24L01和STM32L152RD超低功耗無(wú)線通信系統(tǒng)[J]. 電視技術(shù), 2013,37(17): 66-69, 101.
?。?] 謝明明,陳學(xué)崗,陳常婷. 基于nRF24L01+的數(shù)據(jù)無(wú)線傳輸系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J]. 電子設(shè)計(jì)工程, 2013,21(20): 114-116.
[4] 莢慶,王代華,張志杰. 基于nRF24L01的無(wú)線數(shù)據(jù)傳輸系統(tǒng)[J]. 現(xiàn)代電子技術(shù), 2008,31(7): 68-70, 82.
?。?] 時(shí)志云,王代華,張志杰. 基于nRF24L01和PICl6F877的無(wú)線數(shù)據(jù)傳輸系統(tǒng)設(shè)計(jì)[J]. 電子測(cè)量技術(shù), 2008,31(1): 127-129, 152.