射頻識別技術[1]是一種非接觸式自動識別技術,是構建物聯網的關鍵技術。根據通信的頻段來劃分,可以分成低頻、高頻、超高頻和微波等射頻識別系統。目前市場上存在的超高頻閱讀器總是擺脫不了與上位機之間的物理連線,物理連線主要用于供電和數據交換,在某些特殊場合,這些物理連線十分不方便,比如工作于戶外的UHF閱讀器。在這樣的背景下,本文基于UHF協議ISO/IEC18000-6C,結合太陽能充電技術和無線通信技術,設計出一款太陽能無線UHF閱讀器,它能夠工作于戶外,與上位機實現無線通信。該閱讀器能夠在USB充電和太陽能電池板充電兩者間自由切換,在有可接入電源時,通過USB充電;沒有可接入電源時,即在戶外時,通過太陽能給鋰電池充電。藍牙轉串口模塊實現閱讀器與上位機的無線通信。本文詳細介紹閱讀器的實現過程,主要工作有閱讀器模塊的設計、電源管理模塊的設計、PIE編碼和Miller序列解碼的軟件實現、μCOS-II實現多任務操作。
1 太陽能無線UHF閱讀器硬件電路設計
1.1 整體框圖設計
如圖1所示,系統硬件整體框圖由3個模塊組成:無線通信模塊(藍牙模塊)、閱讀器模塊和電源管理模塊。藍牙模塊實現閱讀器與上位機的無線通信,接收上位接發送的命令,同時向上位機傳送讀到的標簽數據。閱讀器模塊完成命令的PIE編碼和射頻信號的發送、標簽反射波的解調和Miller序列的解碼、電池電壓的檢查和掉電喚醒。電源管理模塊主要完成太陽能的采集、USB充電、鋰電池的升壓以及產生電池電壓檢測信號。
1.2 無線通信模塊
本次設計的無線通信模塊采用HC-05串口藍牙模組[2],它采用藍牙V2.0協議標準。配對時電流為30 mA~40 mA,配對完畢不通信時電流消耗為2 mA~8 mA,通信時消耗電流8 mA,通信距離約10 m。藍牙模塊串口TXD接閱讀器模塊RXD,藍牙RXD接閱讀器模塊TXD,并接上共地線。
1.3 閱讀器模塊設計
閱讀器模塊主要分成兩部分:基帶數據處理和射頻信號收發。
基帶數據處理部分主要完成命令的發送和標簽返回信息的解碼。發送的命令采用PIE編碼,標簽返回信息的編碼格式可以為副載波FM0基帶或者Miller[3]副載波調制序列。
射頻部分完成基帶信號的調制、調制信號的發射、標簽反射信號的解調和放大。信號的發送過程:由RF合成器SI4133產生915 MHz載波,基帶信號通過ADI公司的射頻開關器件ADG198實現對載波信號的OOK調制,調制后的信號經過RF2162實現功率放大。功放RF2162為發熱器件,所以在硬件布板時應該處理好RF2162的散熱,軟件設計上也要做好RF2162的保護,讓其工作一段時間后關閉一段時間。放大后的射頻信號經過微帶線完成50 ?贅阻抗匹配,由天線發送出去。
信號的接收過程:接收電路采用UHF讀寫器解調電路專利[4],標簽反射信號經過50 微帶線,單端信號變雙端信號,如圖2所示,雙端信號相位相差180°。在接收信號過程中,一直有載波發送(給標簽提供能量),所以接收信號和915 MHz載波分成兩路在二極管上實現混頻解調,再分別經過LC濾波,成為兩路相位差為180°的差分信號,經過差分放大,最后經過電壓比較芯片MAX942,解調出標簽返回的FM0或Miller序列。
本設計采用ARM7芯片LPC2138[5]處理基帶信號。通過調節PWM定時器的輸出波形周期和脈寬實現PIE波形的產生。通過定時器0的捕獲通道0捕獲FM0或Miller序列,并配合軟件解碼。
1.4 電源管理模塊設計
根據設計需求,閱讀器每天連續讀卡時間約為2 h(其余時間待機,功耗較低),每小時功耗為330 mW,鋰電池充滿一次電需工作10天。因此,選擇6 800 mAH的鋰電池作為儲能裝置。根據太陽能電池板的工作效率和當地太陽光的照度,選擇10 W的太陽能電池板作為太陽能采集設備。
電源管理模塊的具體要求為:(1)可以用USB對電池充電,也可以用太陽能電池板對電池充電,當用USB充電時,切斷太陽能電池板充電回路。(2)電源管理模塊向外提供穩定的+5 V電壓,所以需對鋰電池進行升壓穩壓。(3)MCU需時刻監測電池電量,如果電池電量低于一定額度(3 V),需強制使系統進入掉電模式。(4)當電池電壓恢復到正常值(3.9 V)后,將系統從掉電模式換醒。電源管理模塊電路圖如圖3、圖4所示。
太陽能充電電路以CN3722[6]為核心,它采用恒定電壓跟蹤法(CVT[7]),能最大效率地利用太陽能。通過電阻RCS設定恒流充電時充電電流的大小,本次設計恒流充電電流為1 A。該芯片能夠對鋰電池實現三段充電法充電。USB充電芯片采用TP4056,按要求,有USB充電時,斷開太陽能充電電路,如圖4所示,采用PMOS來實現。當有USB充電時,Q3:Vg=5 V,Vs<4.2 V(鋰電池最大電壓),Q3截止。同理,有USB充電時,Q1也截止,USB為整個系統提供電能。由于電池電源不穩定,所以還要加上一個DC-DC升壓電路SP6641B-5,為閱讀器模塊提供穩定的5 V輸入電壓。
LPC的AD0.0引腳接圖4所示的VADC,引腳P0.1接OP輸出EINT0,實現實時電池電壓監測。當電壓低于1.5 V(鋰電池電壓低于3 V被分壓)時,設置P0.1接收高電平中斷,系統進入掉電模式。而當電池電壓高于3.9 V時,OP的輸出EINT0將輸出高電平,產生EINT0中斷,將系統從掉電模式喚醒。3.9 V和3 V有0.9 V的窗口,從而避免監測誤差使系統頻繁地在正常模式和掉電模式間切換。
2 太陽能無線UHF閱讀器軟件設計
2.1 PIE編碼和Miller序列解碼
關于基帶信號處理,關鍵是PIE碼的產生和Miller序列的解碼。
根據ISO18000-6C協議,Tari為詢問機向標簽發送信號(PIE碼)的基準時間間隔,即數據0的持續時間。PW為Tari時間間隔中,低電平所持續的時間。本設計選擇Tari為6.25 μs,PW為3.125 ?滋s。數據1的周期為12.5 μs,PW為3.125 μs。為了方便通過PWM產生波形,將數據1的波形分成6.25 ?滋s高電平再加上數據0的波形。LPC2138的PWM5(引腳P0.21)作為PWM輸出。寄存器PWMMR0設置PIE序列周期,PWMMR5設置下降沿的位置。在PWM中斷處理程序中更新寄存器PWMMR0和PWMMR1的值來產生下一個PIE序列。
標簽發射回的信息符合FM0編碼規則:(1)在每位數據邊界倒轉相位。(2)數據0在其中間有一個相位倒轉。一般一個FM0碼用一個副載波表示,但有時為了降低信號檢測誤碼率,可以用2、4或者8個副載波表示一個FM0碼,稱之為Miller副載波調制技術。閱讀器發送query命令時選擇副載波數,本設計采用M=2。Miller2碼的規則:每個數據序列用兩個副載波周期表示,數據0的副載波周期不發生相位翻轉,數據1的副載波周期發生相位翻轉,兩個數據0邊界要發生相位翻轉。在本設計中將query中的TRext位設為1,這樣每次從標簽中返回Miller序列時,都有16個前導0加上010111(前同步碼),通過檢測前導序列來判斷是否已經開始反射數據。
通過LPC2138定時器0的捕獲功能和狀態機完成Miller2序列的檢測。研究Miller2序列發現,Miller2序列下降沿的時間間隔只有圖5所示的兩種情況:T或者1.5T(T為Tari=6.25 μs)。通過定時器0的捕獲通道0捕獲Miller序列的下降沿,并在中斷處理程序中讀取當前定時器快照的計數值,求出與上次計數值的差值。然后通過圖6所示的狀態機,就能夠解碼標簽反射的Miller2序列。如圖6所示,Sx為起始狀態,a/b(a:輸入,b:輸出)箭頭指向從初態到次態。
LPC2138接收Miller2序列的引腳為P0.2,設置該引腳捕獲下降沿,下降沿到來時,進入中斷處理程序,讀取捕獲寄存器CR0的值。計算出與上次下降沿之間的差值a,將差值存入FIFO(全局數組)中,在沒有下降沿捕獲時,處理器執行解碼程序。本設計采用邊接收編解碼的方法。這是因為,根據ISO18000-6C協議,命令間有時限要求,若接收完Miller2序列后,再進行解碼,可能會破壞這種時限。
2.2 ISO18000-6C命令和多任務的實現
2.2.1 ISO18000-6C命令
完成了PIE碼發送和標簽返回Miller2副載波的解碼,就能夠很容易地實現ISO18000-6C規定的所有命令。根據協議,命令分為三類:選擇命令(select)、盤存命令(query、queryadjust、ACK等)和訪問命令(Read、Write、Lock、BlockWrite、BlockErase)。根據協議中命令的格式,分別予以實現。
2.2.2 多任務的實現
μCOS-II[8]是一款搶占式多任務操作系統內核,應用十分廣泛,將其移植到LPC2138也十分容易。本設計要求閱讀器有以下功能:多卡訪問(盤存)、單卡訪問、低電壓監測。多卡訪問操作即批量讀卡;單卡訪問即對一張卡進行讀/寫、鎖定和批量訪問等操作;低電壓監測實現檢測電池電壓的功能,當電池電壓低于門限電壓下限時,讓閱讀器工作于掉電模式,待電池電壓恢復到門限電壓上限時將系統喚醒。
創建3個用戶任務:MainTask、Tag_Inventory、Tag_Operate,創建2個信號量:Semp_Invent和Semp_Operate。MainTask任務優先級最高,設為5,完成電壓檢測和操作模式的選擇;任務Tag_Inventory優先級為6,完成多卡訪問;任務Tag_Operate優先級為7,完成單卡訪問。當進入MainTask任務后,馬上獲取2個信號量,使用case語句實現任務選擇,選擇到某項任務后,釋放該任務所對應的信號量,執行相應任務。在任務中,先獲取相應信號量,如OSSemPend(Semp_Invent,0,&err),然后執行該任務,最后釋放信號量OSSemPost(Semp_Read)。
主任務中有兩項功能:(1)完成對系統電壓的檢查。當電壓小于3.0 V時,系統進入掉電模式,之后,只有當系統電壓大于3.9 V后,才可通過外部中斷將系統喚醒。(2)讀卡模式選擇。選擇多卡訪問模式時,系統盤存完附近的UHF卡的EPC后返回主任務。選擇單卡訪問模式時,可以對單張UHF卡執行讀、寫、鎖定、塊讀和塊寫等操作。
3 實驗結果
連接好太陽能電池板、電源管理模塊、閱讀器模塊、和無線通信模塊,消耗鋰電池的電能,直至系統進入掉電模式,然后將設備置于陽光充足的戶外,采取適當的散熱和防水措施。充電一段時間后,上位機藍牙設備匹配閱讀器藍牙模塊,匹配成功后,向閱讀器發送盤存命令,太陽能無線超高頻閱讀器能夠正確讀出多張標簽的EPC(只讀EPC最后16 bit):FFAB、FF09、FFA9、FF22、FF6C、FF37。實驗結果證明達到了設計預期。