摘? 要:為了實現(xiàn)對數(shù)顯游標(biāo)卡尺測量數(shù)據(jù)的快速、準(zhǔn)確記錄,設(shè)計了一種基于FatFs文件系統(tǒng)的數(shù)顯游標(biāo)卡尺數(shù)據(jù)記錄儀。該記錄儀以STC8單片機(jī)為核心,擴(kuò)展了TF卡存儲模塊、實時時鐘模塊等,支持連續(xù)記錄和外部按鍵觸發(fā)記錄兩種模式。可以把數(shù)顯游標(biāo)卡尺串行通信接口輸出的測量數(shù)據(jù)以CSV文本文件的格式存儲在TF卡中,并對每條測量數(shù)據(jù)自動添加編號和時間戳,方便對數(shù)據(jù)進(jìn)行分析和處理。
關(guān)鍵詞:FatFs文件系統(tǒng);游標(biāo)卡尺;STC8單片機(jī);SPI
中圖分類號:TP368.2? ? 文獻(xiàn)標(biāo)識碼:A? 文章編號:2096-4706(2023)01-0054-04
Digital Vernier Caliper Data Logger Based on FatFs
CHANG Guoquan
(Department of Computer Science and Information Engineering, Anyang Institute of Technology, Anyang? 455000, China)
Abstract: In order to realize the fast and accurate recording of the measurement data of digital vernier caliper, a vernier caliper data logger based on FatFs file system is designed. The data logger takes STC8 Single-Chip Microcontroller as the core, expands the TF card storage module and real-time clock module and so on. It supports two modes of continuous recording and external key triggered recording. It can store the measurement data output by the serial communication interface of the digital vernier caliper into the TF card with the format of CSV text file, and automatically add the number and time stamp to each measurement data. It is convenient for data analysis and processing.
Keywords: FatFs file system; vernier caliper; STC8 Single-Chip Microcontroller; SPI
0? 引? 言
數(shù)顯游標(biāo)卡尺是一種精密的測量工具,它具有功能齊全、讀數(shù)直觀方便等優(yōu)點(diǎn),現(xiàn)已經(jīng)被廣泛應(yīng)用于機(jī)械加工、生產(chǎn)制造、工農(nóng)業(yè)生產(chǎn)等領(lǐng)域。大部分?jǐn)?shù)顯游標(biāo)卡尺都有信號輸出接口,該接口可以把數(shù)顯游標(biāo)卡尺的測量數(shù)據(jù)發(fā)送出來,但該輸出信號并不規(guī)范,無法和計算機(jī)或其他記錄設(shè)備直接相連。這就造成了測量數(shù)據(jù)無法實現(xiàn)智能存儲,只能靠人工手工記錄,這勢必會造成測量效率低下,且記錄過程復(fù)雜易出錯。本設(shè)計采用STC8單片機(jī)及FatFs文件系統(tǒng),通過數(shù)顯游標(biāo)卡尺的通信接口記錄測量數(shù)據(jù),并以逗號分隔值(Comma- Separated Values, CSV)文本文件的格式存儲在TF卡中,以此來實現(xiàn)對數(shù)顯游標(biāo)卡尺測量數(shù)據(jù)的自動化記錄,該方法可以降低記錄測量數(shù)據(jù)錯誤的機(jī)會,提高測量記錄的效率,記錄的CSV文本文件也方便對數(shù)據(jù)進(jìn)行分析和處理。該記錄儀支持連續(xù)記錄和外部按鍵觸發(fā)記錄兩種模式。
1? 系統(tǒng)總體設(shè)計
該系統(tǒng)采用STC公司最新生產(chǎn)的STC8A8K64D4單片機(jī)為主控核心,擴(kuò)展了實時時鐘模塊、TF卡接口電路、游標(biāo)卡尺電平轉(zhuǎn)換電路等,并在STC8單片機(jī)上移植了FatFs文件系統(tǒng)。實時時鐘模塊用來給記錄儀提供數(shù)據(jù)測量的日期和時間;TF卡接口電路實現(xiàn)單片機(jī)和TF卡之間的通信接口,通過該接口,單片機(jī)可以把日期、時間、游標(biāo)卡尺測量的數(shù)據(jù)、單位等信息以文本格式一并存儲到TF卡中;由于大部分?jǐn)?shù)顯游標(biāo)卡尺的數(shù)據(jù)通信接口電平都是1.5 V邏輯電平,而STC8單片機(jī)的工作電壓一般采用的是3.3 V或5 V,游標(biāo)卡尺電平轉(zhuǎn)換電路就完成單片機(jī)和游標(biāo)卡尺直接通信電平的轉(zhuǎn)換,使通信更可靠;系統(tǒng)電源模塊給單片機(jī)和TF卡等模塊提供穩(wěn)定的電壓。系統(tǒng)總體設(shè)計框圖如圖1所示。
2? 系統(tǒng)硬件設(shè)計
2.1? 系統(tǒng)主控及電源電路設(shè)計
在多方面比較各類單片機(jī)的綜合性能和指標(biāo)之后,本系統(tǒng)采用了STC公司最新生產(chǎn)的STC8A8K64D4單片機(jī)作為主控制器。STC8是高速8051系列單片機(jī),它內(nèi)部有8K RAM,64K Flash,4個串行口,硬件SPI等豐富資源,并在內(nèi)部集成了高精度的晶振電路,且晶振可在6 MHz~45 MHz范圍內(nèi)編程設(shè)置。它突出的優(yōu)點(diǎn)是速度快、性價比高、功耗低、資源豐富,設(shè)計起來比較方便,可用在智能控制、智能儀器儀表等應(yīng)用場合。該單片機(jī)支持典型3.3 V或5 V供電的場合,考慮到TF卡的工作電壓為3.3 V,為方便單片機(jī)與TF卡通信接口方便,這里單片機(jī)的供電電壓采用3.3 V供電。系統(tǒng)主控及電源電路設(shè)計原理圖如圖2所示。圖2中U1就是STC8單片機(jī)的引腳接口圖,J1接口連接到了STC8單片機(jī)的串行口1,它是程序下載接口,STC8單片機(jī)通過串行口1下載更新用戶程序。兩個LED指示燈D1和D2可以用來指示系統(tǒng)狀態(tài)和數(shù)據(jù)存儲狀態(tài)。SET引腳提供給用戶一種選擇性記錄數(shù)據(jù)的手段,SET引腳連接到STC8單片機(jī)的P3.6接口,P3.6支持下降沿中斷,該接口可以外接到一個手動按鍵或腳踏開關(guān),當(dāng)需要記錄測量數(shù)據(jù)時,用戶可以按下外接開關(guān)。
在系統(tǒng)電源模塊選擇方面,考慮到系統(tǒng)可能會使用電池供電的情況,電源模塊應(yīng)該具備低功耗特性,在系統(tǒng)電源設(shè)計中采用了功耗較低HT7533電源芯片進(jìn)行設(shè)計。HT7533是臺灣合泰(Holtek)生產(chǎn)的低壓差微功耗LDO,它的待機(jī)電流在微安級,具有高耐壓、低壓差、低電流消耗的優(yōu)點(diǎn)。它的輸入電壓高達(dá)24 V,輸出電壓3.3 V,并可輸出100 mA以上的電流,完全滿足系統(tǒng)要求。系統(tǒng)電源設(shè)計圖如圖2中U2部分所示。
2.2? TF卡及時鐘模塊電路設(shè)計
TF卡采用的是Micro SD卡,TF卡堪稱可移動式的儲存IC,在手機(jī)以及其他智能設(shè)備中被廣泛采用。它的典型工作電壓為3.3 V,支持SDIO和SPI兩種模式的通信協(xié)議,STC8單片機(jī)沒有硬件SDIO接口,因此TF卡采用SPI通信協(xié)議,并和STC8單片機(jī)的硬件SPI接口相連接。STC8單片機(jī)硬件SPI模塊引腳可以通過軟件編程切換到P2.2~P2.5,其中P2.2是片選NSS,P2.3是MOSI,P2.4是MISO,P2.5是SCLK,因此,根據(jù)TF卡引腳接口定義,只需要把它們一一相連即可,在軟件設(shè)計時,需要通過發(fā)命令使TF卡進(jìn)入SPI通信模式。TF卡電路設(shè)計原理圖如圖3中的J2部分所示。圖3中的U3部分是時鐘模塊電路設(shè)計,該時鐘模塊采用的是DS1302,它和STC8單片機(jī)的通信接口采用模擬SPI方式,因此,DS1302的CLK,I/O和CE引腳只需要連接到STC8單片機(jī)的3個通用IO口即可。BT1是時鐘的備份電池,Y1是DS1302的晶振時鐘。
2.3? 電平轉(zhuǎn)換電路設(shè)計
由于大部分?jǐn)?shù)顯游標(biāo)卡尺供電采用的是1.5 V的紐扣電池,因此,它們數(shù)據(jù)通信的邏輯電平也是1.5 V,為了防止數(shù)顯游標(biāo)卡尺和STC8單片機(jī)之間出現(xiàn)通信不穩(wěn)的情況,這里用比較器LM393來實現(xiàn)1.5 V邏輯電平和3.3 V邏輯電平之間的轉(zhuǎn)換,電平轉(zhuǎn)換電路設(shè)計原理圖如圖4所示。在圖4中J3為數(shù)顯游標(biāo)卡尺數(shù)據(jù)線的接口,CLK為時鐘輸出,SDA為數(shù)據(jù)輸出,假定它們輸出的高電平為1.5 V,則該電平會和U4的2腳或7腳的電壓進(jìn)行比較,而2腳或7腳的電壓是固定的,通過電阻分壓比例可知,該電壓為約為1.11 V,當(dāng)CLK或SDA輸出高電平1.5 V時,比1.11 V要高,此時U4的OUTA或OUTB輸出高電平,反之,則輸出低電平,從而實現(xiàn)電平轉(zhuǎn)換。OUTA接到了STC8單片機(jī)的P3.2引腳,作為時鐘采集端;OUTB接到了STC8單片機(jī)的P3.4引腳,作為數(shù)據(jù)采集端。
3? 系統(tǒng)軟件設(shè)計
系統(tǒng)軟件設(shè)計主要包括數(shù)顯游標(biāo)卡尺數(shù)據(jù)的采集、TF卡底層SPI驅(qū)動的編寫、FatFs文件系統(tǒng)的移植等,這里主要軟件的設(shè)計流程,軟件編程是在Keil C開發(fā)環(huán)境中用C語言編寫,并使用STC-ISP軟件下載到STC8單片機(jī)中。
數(shù)顯游標(biāo)卡尺數(shù)據(jù)的采集通過數(shù)顯游標(biāo)卡尺提供的串行數(shù)據(jù)接口實現(xiàn)。數(shù)顯游標(biāo)卡尺提供了一個簡化的三線SPI串行數(shù)據(jù)接口,在測量過程中,每隔一定的時間數(shù)顯游標(biāo)卡尺會通過該接口輸出一組時鐘和數(shù)據(jù),每組數(shù)據(jù)24位,遵循先送低位再送高位的原則。數(shù)顯游標(biāo)卡尺輸出的一組24位數(shù)據(jù)如圖5所示。
24位數(shù)據(jù)分成3個字節(jié),前2個字節(jié)(16位)組成數(shù)據(jù)位,最后一個字節(jié)(8位)包含正負(fù)標(biāo)志位和單位等信息,根據(jù)以上協(xié)議及圖4中的引腳分配結(jié)構(gòu),數(shù)據(jù)采集時只需要監(jiān)測數(shù)顯游標(biāo)卡尺的時鐘線,每監(jiān)測到一個時鐘上升沿,就從數(shù)據(jù)線讀取一位數(shù)據(jù)。STC8單片機(jī)的P3.2引腳(INT0)支持上升沿中斷,可以在INT0的中斷服務(wù)子程序中進(jìn)行數(shù)據(jù)讀取和處理,每采集完成24位數(shù)據(jù),就對3個字節(jié)進(jìn)行處理,并把處理好的數(shù)據(jù)放入到環(huán)形隊列中等待STC8單片機(jī)進(jìn)行存儲。在連續(xù)存儲模式下測量數(shù)據(jù)會不停地寫入到緩沖區(qū);在外部按鍵觸發(fā)模式下,只有檢測到用戶按鍵,才會把數(shù)據(jù)寫入到緩沖區(qū)。
TF卡底層SPI驅(qū)動的編寫通過查閱TF的通信協(xié)議,并編寫程序來實現(xiàn)。如2.2所述,TF卡支持SDIO和SPI兩種模式的通信協(xié)議,STC8單片機(jī)和TF卡采用SPI通信協(xié)議,STC8單片機(jī)上電之后首先初始化硬件SPI接口,然后調(diào)用SPI讀寫子程序來實現(xiàn)TF卡底層驅(qū)動的編寫。在TF卡上電之后,拉低NSS為低電平,使TF卡進(jìn)入SPI模式,在發(fā)送給TF卡發(fā)送命令之前,要先發(fā)送74個時鐘,之后才能開始命令操作。TF卡提供了讀操作、寫操作等多條指令,可以通過這些指令來實現(xiàn)對TF卡的讀寫操作。底層驅(qū)動測試完成之后,就可以把對TF卡的各種操作封裝成函數(shù),供FatFs文件系統(tǒng)調(diào)用。
本設(shè)計在STC8單片機(jī)上移植FatFs文件系統(tǒng),方便對數(shù)據(jù)的管理和存儲。FatFs是一個用C語言編寫的通用文件系統(tǒng)模塊,主要用于在小型嵌入式系統(tǒng)中實現(xiàn)FAT文件系統(tǒng)。它包含底層接口層、中間層(FatFs核心層)和應(yīng)用層3層,底層接口層可以調(diào)用前面封裝好的對TF卡操作的各種函數(shù)以,并可以從DS1302時鐘芯片中讀取日期和時間,作為文件系統(tǒng)的時間戳。FatFs文件系統(tǒng)的移植并不復(fù)雜,修改好底層接口調(diào)用的函數(shù)之后,根據(jù)需要修改diskio.h文件中宏定義來選擇某些選項,比如是否使用長文件名、設(shè)置扇區(qū)大小等,這些選項會影響文件系統(tǒng)的大小。然后就可以調(diào)用FatFs提供的各種文件操作函數(shù)來操作文件了,比如打開文件函數(shù)f_open()、寫文件函數(shù)f_write()等。系統(tǒng)流程圖如圖6所示。
4? 系統(tǒng)測試
為了驗證系統(tǒng)是否達(dá)到預(yù)期效果,對系統(tǒng)進(jìn)行了系統(tǒng)測試。數(shù)顯游標(biāo)卡尺在測量數(shù)據(jù)過程中會通過串行接口周期性地發(fā)送測量數(shù)據(jù),根據(jù)數(shù)顯游標(biāo)卡尺產(chǎn)品的不同,發(fā)送數(shù)據(jù)的時間周期也不完全相同,本文測試用到的數(shù)顯游標(biāo)卡尺大約每隔145 ms就發(fā)送一組完整的數(shù)據(jù),1 s內(nèi)就會有約7組數(shù)據(jù)發(fā)送出來。為防止測量數(shù)據(jù)丟失,在數(shù)據(jù)緩存時使用了一個環(huán)形隊列,STC8單片機(jī)有8 KB的內(nèi)部擴(kuò)展RAM,除去各種變量及數(shù)組使用的1.8 KB之外,剩余的6 KB多RAM全部用來作為環(huán)形隊列使用。根據(jù)數(shù)顯游標(biāo)卡尺發(fā)送過來的數(shù)據(jù)進(jìn)行處理并轉(zhuǎn)換為文本格式之后,一條數(shù)據(jù)大約占用40個字節(jié),1 s內(nèi)發(fā)送的數(shù)據(jù)約280個字節(jié),寫滿緩沖器需要6×1024÷280≈22 s,而6 KB的數(shù)據(jù)全部寫入TF卡所需要的時間遠(yuǎn)遠(yuǎn)小于22 s。如前所述,STC8單片機(jī)采用P3.2中斷方式來接收數(shù)顯游標(biāo)卡尺數(shù)據(jù)的,在while主程序中判斷緩沖區(qū)是否為空,如果緩沖區(qū)不為空,就把隊列頭指針和尾指針之間的數(shù)據(jù)全部寫入TF卡中,隨著緩沖區(qū)內(nèi)數(shù)據(jù)的增多,寫入TF卡的數(shù)據(jù)量也會增大,寫入效率就會隨之提高,因此,數(shù)顯游標(biāo)卡尺測量的數(shù)據(jù)不會丟失,實驗測試也證明了這一點(diǎn)。實驗測量數(shù)據(jù)記錄文件如圖7所示。當(dāng)然用戶也可以設(shè)置為外部開關(guān)觸發(fā)記錄方式,這樣就不必存儲所有的測量數(shù)據(jù),而只存儲用戶需要的測量數(shù)據(jù)。
5? 結(jié)? 論
本文從硬件設(shè)計和軟件設(shè)計兩個方面論述了基于FatFs文件系統(tǒng)的數(shù)顯游標(biāo)卡尺數(shù)據(jù)記錄儀的實現(xiàn)過程,在硬件設(shè)計時著重從降低功耗和提高性能方面入手,力求把設(shè)計向產(chǎn)品方向轉(zhuǎn)化。軟件設(shè)計方面分析了數(shù)顯游標(biāo)卡尺測量數(shù)據(jù)的采集、處理以及數(shù)據(jù)往TF卡中存儲的過程,實驗測試證明了系統(tǒng)的穩(wěn)定性和可靠性,后繼將進(jìn)一步在實際應(yīng)用中測試系統(tǒng)的實用性并進(jìn)一步改進(jìn)。
參考文獻(xiàn):
[1] 趙景波,張偉.Protel 99 SE實用教程:第3版 [M].北京:人民郵電出版社,2017.
[2] FatFs-Generic FAT Filesystem Module [EB/OL].http://elm-chan.org/fsw/ff/00index_e.html.
[3] 深圳國芯人工智能有限公司.STC8A/8F系列單片機(jī)技術(shù)參考手冊 [EB/OL].http://www.stcmcudata.com/STC8F-DATASHEET/STC8A-STC8F.pdf.
[4] 嚴(yán)蔚敏,李冬梅,吳偉民.數(shù)據(jù)結(jié)構(gòu)(C語言版):第2版 [M].北京:人民郵電出版社,2015.
[5] 徐愛鈞.單片機(jī)原理與應(yīng)用——基于C51及Proteus仿真 [M].北京:清華大學(xué)出版社,2015.
作者簡介:常國權(quán)(1973.11—),男,漢族,河南清豐人,副教授,碩士,研究方向:嵌入式技術(shù)應(yīng)用與開發(fā)。
收稿日期:2022-09-09
基金項目:2021年度安陽市科技計劃項目(2021C01SF030)