王斌儒,司海瑞,張樂年
(南京航空航天大學 機電學院,江蘇 南京 210016)
傳統水流速度監測系統因傳輸線路的限制,在實際監測應用中有著諸多約束。例如,監測系統成本高、系統電路復雜、數據傳輸距離短、傳輸速度慢,以及系統的實時性和穩定性差等。本課題通過對STC12LE5608AD低功耗單片機和TI(Texas Instruments,美國德州儀器公司)的CC1101 高性能射頻收發器的研究,實現無線流速監測系統。相對于傳統系統,該系統的性價比有重大提升。
該系統主要分為兩部分:主控部分和測試部分(圖1(a)所示)。主控部分由上位機(PC 機)、STC12LE5608AD增強型低功耗單片機和CC1101 無線數據收發模塊組成(圖1(b)所示);測試部分由STC12LE5608AD、CC1101 無線模塊和水流速度傳感器組成(圖1(c)所示)。其中上位機監控軟件是基于VC6.0 MFC 與SQL 數據庫開發而得。STC12LE5608AD 是宏晶科技推出的增強型8051 內核的單周期MCU,其低功耗工作模式和內部集成的8 路高速10 位ADC 在由電池供電時更具優越性。CC1101 是TI 推出的一款低于1GHz 高性能射頻收發器,其極低功耗和高穩定性使其成為本監測系統無線數據收發芯片的首選。流速傳感器為南京水利科學研究院研發的光電式旋槳流速傳感器,其旋槳葉輪直徑分為12 mm 和15 mm 兩種,旋槳反光面采用先進電鍍工藝,耐磨損,信號強,線性度好,測速范圍廣。

圖1 系統組織結構框圖
光電式旋槳流速傳感器的工作原理是,將旋槳傳感器放入水流測試點,在水流的作用下旋槳轉動,其轉速正比于水流速度。旋槳的旋轉運動轉換為電脈沖后,經放大整形,由STC12LE5608AD 的計數器計數。通過計數器記錄單位時間轉動次數,換算成流速值,流速計算公式為:

式中:V——流速,cm/s;
K——傳感器率定系數;
T——設定的采樣時間,s;
N——采樣時間內的傳感器旋槳轉數(對單反光面旋槳而言。若對雙反光面旋槳,N 應除以2 才為采樣時間內的傳感器旋槳轉數)。
在主控單片機和測試單片機中均要求STC 實現多任務并行定時。多任務并行定時是指MCU 內部定時器個數極為有限時,多個任務(任務數﹥定時器個數)均需要定時功能,而定時時間可能不同,且可能為異步定時。例如,任務A 需要50 ms 定時,任務B 需要1 s 定時,任務C 需要1 min 定時。算法流程圖如圖2 所示。

圖2 多任務并行定時程序流程圖
1)主控部分與上位機之間的RS-232 串行總線
本系統中,STC 與上位機通過串行總線RS-232 相連。RS-232 電平轉換采用MAX232 芯片把TTL 電平轉換成RS-232 電平格式,可以用于單片機與PC 機通信,以及單片機與單片機之間的通信,在該系統中的電路原理圖如圖3 所示。

圖3 串行總線RS-232 驅動電路
2)CC1101 無線模塊與STC 之間的SPI 總線
CC1101 采用兼容性SPI 接口與STC 單片機相連接,工作時CC1101 為從機,STC 單片機為主機。單片機與CC1101 的CSN 引腳、MOSI 引腳、SCK 引腳、MISO 引腳相連的I/O 口設置為輸出,用來完成片選、主機數據輸入、SPI 時鐘信號與收發控制,如圖4 所示。SPI 接口上所有數據傳送都是始于MSB[2],數據傳送均以一個頭字節(Header byte)開始,包含一個讀寫位(R/W bit),一個突發(Burst access)訪問位和6 位地址位(A5~A0),整個接口為環形總線結構,工作方式如圖5 所示。
總之在“廟堂”建筑這一原型導向下,美術館的展品和建筑是國家文化的表征和“對象化”,是對鄧肯的“文明化儀式”的體現——“將國家的權威性與文明的觀念等同起來”[9]。

圖4 STC 與CC1101 的SPI 總線連接電路

圖5 總線工作方式
CC1101 無線收發模塊在保證高通信性能的前提下,以低功耗和體積小為原則進行設計。當選定模塊工作頻率為433 MHz 時設計電路原理圖如圖6 所示[3]。

圖6 CC1101 無線收發模塊電路原理圖
在通過SPI 總線對CC1101 進行讀寫操作時,除了需要嚴格按照上述SPI 的傳輸協議來設置I/O 口的時序外,還需要注意SPI 時序圖中特定的時間要求。CC1101 的接口時序如圖7 所示,其中SCK 高電平時間Tch、SCK 低電平時間Tcl、SCK 上升時間Tr、SCK 下降時間Tf為硬件的要求,經實際測試單片機的I/O 口可以達到此標準。而CSN下降沿到建立有效數據的最長間隔Tcsd和SCK 下降沿到建立有效數據的最長間隔Tcd則為時序響應要求,編程時注意不能在這些點插入延時程序。需要注意的是有效數據至SCK 上升沿最短間隔Tdc、SCK 上升沿后數據需保持最短時間Tdh和CSN 下降沿后SCK 時鐘建立的最短時間Tcc,這三個時序點都需要保持最少2ns 的延時。

圖7 CC1101 的SPI 接口時序圖
本系統中的點對點通信(主控系統與測試系統分時通信),RF 函數的正確配置尤為關鍵[4],以得到最優寄存器設定和評測性能及功能。RF 配置函數配置CC1101 的高頻部分,該配置影響的是無線收發器的收發頻率、發送功率、數據傳輸速率、無線收發模式、調制方式以及數據長度等。由于寄存器較多,在此不予以詳細介紹,可以參見文獻[3]。
STC12LE5608AD 單片機內部集成的8K EEPROM 與程序存儲空間是分開的,利用IAP/ISP 技術可將內部Data Flash 當作EEPROM,擦寫次數在10 萬次以上[5],用于保存一些需要在應用過程中修改并且斷電不丟失的參數數據。EEPROM 可分為8 個扇區,每個扇區包含512 Byte,區間具體劃分的地址表如表1 所示??蓪EPROM 進行字節讀/字節寫/扇區擦除。

表1 STC12LE5608AD 單片機內部EEPROM 地址表
考慮到空間冗余,本系統所用的EEPROM 區間為0010h~0FF5h(#define START_ADDR 0x0010,#define STOP_ADDR 0x0FF5),并將此區間定義為EEPROM Zone。
STC 中的EEPROM 有兩個突出優點,1)斷電后所存儲的內容不會丟失,2)可用電信號方便地對其進行擦除和讀寫。但是由于結構上的原因,EEPROM 擦寫次數有限,使用壽命通常較短。以本系統為例,因為測試部分的子機在工作時每1min 需要進行一次電壓檢測,并將ADC轉換后的8 位電壓值寫入EEPROM 中的某個地址單元?,F假設系統每天工作8 h,EEPROM 可擦寫10 萬次,則EEPROM 的使用壽命為:

顯然,EEPROM 的壽命不能滿足測試系統需要長時間工作的需要,成為整個系統的嚴重缺陷。為此,筆者采用下面介紹的循環寫入法,顯著延長EEPROM 的使用壽命。
循環寫入法是指:在EEPROM 中開辟一段空間EEPROM Zone,每次向EEPROM Zone 寫入兩個字節的數據,其中低地址字節數據為當前ADC 轉換的電壓值,高地址字節數據為本次寫入數據的結束標志Stop_Flag(#define Stop_Flag 0x11),下一次向EEPROM 寫數據時,首先查找EEPROM 中Stop_Flag 所在的單元地址Stop_Flag_Addr,然后從Stop_Flag_Addr +1 和Stop_Flag_Addr +2 開始寫數據,并擦除Stop_Flag_Addr 單元和Stop_Flag_Addr-1 單元的內容。若Stop_Flag_Addr==STOP_ADDR,則從START_ADDR 重新開始寫。讀EEPROM 中的數據的過程與此類似。具體程序流程圖如8 所示。

圖8 寫/讀EEPROM 程序流程圖
關于循環寫入法的幾點說明:
EEPROM Zone 寫數據時的示意圖如下:
第1 次寫入數據:

第i 次寫入數據:

最后一次寫數據:

1)0x##、0x&&、0x@ @ 為ADC 轉換的電壓值,0x11為Stop_Flag;
2)測試部分的子機在使用前已用標準3.7 V 穩壓直流電源標定出參考電壓,且測試部分電源電壓范圍要求為3.5 V~5.0 V,故有:

所以取Stop_Flag 為0x11 不會與系統中ADC 轉換的電壓值沖突;
3)由上述寫數據示意圖可以看出,ADC 電壓值始終寫入偶數地址單元中,Stop_Flag 始終寫入奇數地址單元中。這樣安排有兩點作用:1)每次寫入的兩個字節數據不會跨扇區,因為STC12LE5608AD 中EEPROM 的擦除操作是按扇區進行的,由表1 可知這樣安排可以優化扇區擦除操作,即一次擦除操作即可完全擦除上一次寫入的數據,2)最后一次寫入數據時不會出現將ADC 電壓值寫入0FF5 h 中,而Stop_Flag(0x11)寫入0010h 中,極大地方便了數據的處理。
按照循環寫入法擦寫EEPROM 使得EEPROM 中的所有存儲單元都得到了均勻的使用。長期使用時不會產生低地址區擦寫頻率遠高于高地址區擦寫頻率的現象,不會使EEPROM 中高、低地址區的寫入次數出現極大的不平衡。同樣的條件下,采用循環寫入法對EEPROM 進行擦寫,EEPROM 的使用壽命為:

可見,EEPROM 循環寫入法大幅度延長了EEPROM的使用壽命以及提高EEPROM 的利用率。使EEPROM 的開發使用更加充分、合理。
本系統中主控部分與測試部分的無線通信、主控單片機與上位機的串行通信建立之前,首要任務即是定義各組通信的通信協議。其中,主控部分與測試部分的無線通信協議見表2,主控單片機與上位機的串行通信協議見表3。

表2 主控部分(主機)與測試部分(子機)的無線通信協議

表3 主控單片機(主機)與上位機(PC 機)的串行通信協議

續表3
在無線流速監測系統中,為防止因某個測試部分出現通信異常而使主控部分陷入永久等待狀態,主控部分軟件設計為可編程的等待超時限制,即若在規定的時間內無法得到當前測試部分數據,則主控部分默認該測試部分通信異常,不再繼續等待該測試部分發送數據,并將通信異常的測試部分的數量和編號發至上位機系統。經南京水利科學研究院測試,當測試部分數量為100 臺,所有測試部分與主控部分通信正常時,主控部分分時提取各個測試部分數據,并將數據上傳至PC 機的總用時時間≤1 s,即主控部分完成對一臺測試部分數據的提取和上傳用時時間≤10 ms。綜上所述,本課題中的基于STC 與CC1101 的無線流速監測系統能夠滿足實際應用中高速、實時的要求。
[1]蔡守允,劉兆衡,張曉紅,等.水利工程模型試驗量測技術[M].北京:海洋出版社,2008:17-18.
[2]李晶.基于CC1101 的短距離無線通信網絡的設計[D].北京:電子科技大學,2011:30-31.
[3]Texas Instrument.CC1101 Datasheet,2005.
[4]RUAN Yaocan,HE Minghao,SONG Shuran,et al.Multipoint wireless pressure detecting system[C].Artificial Intelligence,Management Science and Electronic Commerce (AIMSEC),2011 2nd International Conference on,2011:4092 .
[5]宏晶科技.STC12 系列單片機產品說明書[Z].
[6]李現勇.Visual C++/Turbo C++串口通信編程實踐[M].北京:電子工業出版社,2004.