摘? 要:為了實(shí)現(xiàn)對(duì)數(shù)顯游標(biāo)卡尺測(cè)量數(shù)據(jù)的快速、準(zhǔn)確記錄,設(shè)計(jì)了一種基于FatFs文件系統(tǒng)的數(shù)顯游標(biāo)卡尺數(shù)據(jù)記錄儀。該記錄儀以STC8單片機(jī)為核心,擴(kuò)展了TF卡存儲(chǔ)模塊、實(shí)時(shí)時(shí)鐘模塊等,支持連續(xù)記錄和外部按鍵觸發(fā)記錄兩種模式??梢园褦?shù)顯游標(biāo)卡尺串行通信接口輸出的測(cè)量數(shù)據(jù)以CSV文本文件的格式存儲(chǔ)在TF卡中,并對(duì)每條測(cè)量數(shù)據(jù)自動(dòng)添加編號(hào)和時(shí)間戳,方便對(duì)數(shù)據(jù)進(jìn)行分析和處理。
關(guān)鍵詞:FatFs文件系統(tǒng);游標(biāo)卡尺;STC8單片機(jī);SPI
中圖分類號(hào):TP368.2? ? 文獻(xiàn)標(biāo)識(shí)碼:A? 文章編號(hào):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)卡尺是一種精密的測(cè)量工具,它具有功能齊全、讀數(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)卡尺都有信號(hào)輸出接口,該接口可以把數(shù)顯游標(biāo)卡尺的測(cè)量數(shù)據(jù)發(fā)送出來,但該輸出信號(hào)并不規(guī)范,無法和計(jì)算機(jī)或其他記錄設(shè)備直接相連。這就造成了測(cè)量數(shù)據(jù)無法實(shí)現(xiàn)智能存儲(chǔ),只能靠人工手工記錄,這勢(shì)必會(huì)造成測(cè)量效率低下,且記錄過程復(fù)雜易出錯(cuò)。本設(shè)計(jì)采用STC8單片機(jī)及FatFs文件系統(tǒng),通過數(shù)顯游標(biāo)卡尺的通信接口記錄測(cè)量數(shù)據(jù),并以逗號(hào)分隔值(Comma- Separated Values, CSV)文本文件的格式存儲(chǔ)在TF卡中,以此來實(shí)現(xiàn)對(duì)數(shù)顯游標(biāo)卡尺測(cè)量數(shù)據(jù)的自動(dòng)化記錄,該方法可以降低記錄測(cè)量數(shù)據(jù)錯(cuò)誤的機(jī)會(huì),提高測(cè)量記錄的效率,記錄的CSV文本文件也方便對(duì)數(shù)據(jù)進(jìn)行分析和處理。該記錄儀支持連續(xù)記錄和外部按鍵觸發(fā)記錄兩種模式。
1? 系統(tǒng)總體設(shè)計(jì)
該系統(tǒng)采用STC公司最新生產(chǎn)的STC8A8K64D4單片機(jī)為主控核心,擴(kuò)展了實(shí)時(shí)時(shí)鐘模塊、TF卡接口電路、游標(biāo)卡尺電平轉(zhuǎn)換電路等,并在STC8單片機(jī)上移植了FatFs文件系統(tǒng)。實(shí)時(shí)時(shí)鐘模塊用來給記錄儀提供數(shù)據(jù)測(cè)量的日期和時(shí)間;TF卡接口電路實(shí)現(xiàn)單片機(jī)和TF卡之間的通信接口,通過該接口,單片機(jī)可以把日期、時(shí)間、游標(biāo)卡尺測(cè)量的數(shù)據(jù)、單位等信息以文本格式一并存儲(chǔ)到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è)計(jì)框圖如圖1所示。
2? 系統(tǒng)硬件設(shè)計(jì)
2.1? 系統(tǒng)主控及電源電路設(shè)計(jì)
在多方面比較各類單片機(jī)的綜合性能和指標(biāo)之后,本系統(tǒng)采用了STC公司最新生產(chǎn)的STC8A8K64D4單片機(jī)作為主控制器。STC8是高速8051系列單片機(jī),它內(nèi)部有8K RAM,64K Flash,4個(gè)串行口,硬件SPI等豐富資源,并在內(nèi)部集成了高精度的晶振電路,且晶振可在6 MHz~45 MHz范圍內(nèi)編程設(shè)置。它突出的優(yōu)點(diǎn)是速度快、性價(jià)比高、功耗低、資源豐富,設(shè)計(jì)起來比較方便,可用在智能控制、智能儀器儀表等應(yīng)用場(chǎng)合。該單片機(jī)支持典型3.3 V或5 V供電的場(chǎng)合,考慮到TF卡的工作電壓為3.3 V,為方便單片機(jī)與TF卡通信接口方便,這里單片機(jī)的供電電壓采用3.3 V供電。系統(tǒng)主控及電源電路設(shè)計(jì)原理圖如圖2所示。圖2中U1就是STC8單片機(jī)的引腳接口圖,J1接口連接到了STC8單片機(jī)的串行口1,它是程序下載接口,STC8單片機(jī)通過串行口1下載更新用戶程序。兩個(gè)LED指示燈D1和D2可以用來指示系統(tǒng)狀態(tài)和數(shù)據(jù)存儲(chǔ)狀態(tài)。SET引腳提供給用戶一種選擇性記錄數(shù)據(jù)的手段,SET引腳連接到STC8單片機(jī)的P3.6接口,P3.6支持下降沿中斷,該接口可以外接到一個(gè)手動(dòng)按鍵或腳踏開關(guān),當(dāng)需要記錄測(cè)量數(shù)據(jù)時(shí),用戶可以按下外接開關(guān)。
在系統(tǒng)電源模塊選擇方面,考慮到系統(tǒng)可能會(huì)使用電池供電的情況,電源模塊應(yīng)該具備低功耗特性,在系統(tǒng)電源設(shè)計(jì)中采用了功耗較低HT7533電源芯片進(jìn)行設(shè)計(jì)。HT7533是臺(tái)灣合泰(Holtek)生產(chǎn)的低壓差微功耗LDO,它的待機(jī)電流在微安級(jí),具有高耐壓、低壓差、低電流消耗的優(yōu)點(diǎn)。它的輸入電壓高達(dá)24 V,輸出電壓3.3 V,并可輸出100 mA以上的電流,完全滿足系統(tǒng)要求。系統(tǒng)電源設(shè)計(jì)圖如圖2中U2部分所示。
2.2? TF卡及時(shí)鐘模塊電路設(shè)計(jì)
TF卡采用的是Micro SD卡,TF卡堪稱可移動(dòng)式的儲(chǔ)存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è)計(jì)時(shí),需要通過發(fā)命令使TF卡進(jìn)入SPI通信模式。TF卡電路設(shè)計(jì)原理圖如圖3中的J2部分所示。圖3中的U3部分是時(shí)鐘模塊電路設(shè)計(jì),該時(shí)鐘模塊采用的是DS1302,它和STC8單片機(jī)的通信接口采用模擬SPI方式,因此,DS1302的CLK,I/O和CE引腳只需要連接到STC8單片機(jī)的3個(gè)通用IO口即可。BT1是時(shí)鐘的備份電池,Y1是DS1302的晶振時(shí)鐘。
2.3? 電平轉(zhuǎn)換電路設(shè)計(jì)
由于大部分?jǐn)?shù)顯游標(biāo)卡尺供電采用的是1.5 V的紐扣電池,因此,它們數(shù)據(jù)通信的邏輯電平也是1.5 V,為了防止數(shù)顯游標(biāo)卡尺和STC8單片機(jī)之間出現(xiàn)通信不穩(wěn)的情況,這里用比較器LM393來實(shí)現(xiàn)1.5 V邏輯電平和3.3 V邏輯電平之間的轉(zhuǎn)換,電平轉(zhuǎn)換電路設(shè)計(jì)原理圖如圖4所示。在圖4中J3為數(shù)顯游標(biāo)卡尺數(shù)據(jù)線的接口,CLK為時(shí)鐘輸出,SDA為數(shù)據(jù)輸出,假定它們輸出的高電平為1.5 V,則該電平會(huì)和U4的2腳或7腳的電壓進(jìn)行比較,而2腳或7腳的電壓是固定的,通過電阻分壓比例可知,該電壓為約為1.11 V,當(dāng)CLK或SDA輸出高電平1.5 V時(shí),比1.11 V要高,此時(shí)U4的OUTA或OUTB輸出高電平,反之,則輸出低電平,從而實(shí)現(xiàn)電平轉(zhuǎn)換。OUTA接到了STC8單片機(jī)的P3.2引腳,作為時(shí)鐘采集端;OUTB接到了STC8單片機(jī)的P3.4引腳,作為數(shù)據(jù)采集端。
3? 系統(tǒng)軟件設(shè)計(jì)
系統(tǒng)軟件設(shè)計(jì)主要包括數(shù)顯游標(biāo)卡尺數(shù)據(jù)的采集、TF卡底層SPI驅(qū)動(dòng)的編寫、FatFs文件系統(tǒng)的移植等,這里主要軟件的設(shè)計(jì)流程,軟件編程是在Keil C開發(fā)環(huán)境中用C語言編寫,并使用STC-ISP軟件下載到STC8單片機(jī)中。
數(shù)顯游標(biāo)卡尺數(shù)據(jù)的采集通過數(shù)顯游標(biāo)卡尺提供的串行數(shù)據(jù)接口實(shí)現(xiàn)。數(shù)顯游標(biāo)卡尺提供了一個(gè)簡化的三線SPI串行數(shù)據(jù)接口,在測(cè)量過程中,每隔一定的時(shí)間數(shù)顯游標(biāo)卡尺會(huì)通過該接口輸出一組時(shí)鐘和數(shù)據(jù),每組數(shù)據(jù)24位,遵循先送低位再送高位的原則。數(shù)顯游標(biāo)卡尺輸出的一組24位數(shù)據(jù)如圖5所示。
24位數(shù)據(jù)分成3個(gè)字節(jié),前2個(gè)字節(jié)(16位)組成數(shù)據(jù)位,最后一個(gè)字節(jié)(8位)包含正負(fù)標(biāo)志位和單位等信息,根據(jù)以上協(xié)議及圖4中的引腳分配結(jié)構(gòu),數(shù)據(jù)采集時(shí)只需要監(jiān)測(cè)數(shù)顯游標(biāo)卡尺的時(shí)鐘線,每監(jiān)測(cè)到一個(gè)時(shí)鐘上升沿,就從數(shù)據(jù)線讀取一位數(shù)據(jù)。STC8單片機(jī)的P3.2引腳(INT0)支持上升沿中斷,可以在INT0的中斷服務(wù)子程序中進(jìn)行數(shù)據(jù)讀取和處理,每采集完成24位數(shù)據(jù),就對(duì)3個(gè)字節(jié)進(jìn)行處理,并把處理好的數(shù)據(jù)放入到環(huán)形隊(duì)列中等待STC8單片機(jī)進(jìn)行存儲(chǔ)。在連續(xù)存儲(chǔ)模式下測(cè)量數(shù)據(jù)會(huì)不停地寫入到緩沖區(qū);在外部按鍵觸發(fā)模式下,只有檢測(cè)到用戶按鍵,才會(huì)把數(shù)據(jù)寫入到緩沖區(qū)。
TF卡底層SPI驅(qū)動(dòng)的編寫通過查閱TF的通信協(xié)議,并編寫程序來實(shí)現(xiàn)。如2.2所述,TF卡支持SDIO和SPI兩種模式的通信協(xié)議,STC8單片機(jī)和TF卡采用SPI通信協(xié)議,STC8單片機(jī)上電之后首先初始化硬件SPI接口,然后調(diào)用SPI讀寫子程序來實(shí)現(xiàn)TF卡底層驅(qū)動(dòng)的編寫。在TF卡上電之后,拉低NSS為低電平,使TF卡進(jìn)入SPI模式,在發(fā)送給TF卡發(fā)送命令之前,要先發(fā)送74個(gè)時(shí)鐘,之后才能開始命令操作。TF卡提供了讀操作、寫操作等多條指令,可以通過這些指令來實(shí)現(xiàn)對(duì)TF卡的讀寫操作。底層驅(qū)動(dòng)測(cè)試完成之后,就可以把對(duì)TF卡的各種操作封裝成函數(shù),供FatFs文件系統(tǒng)調(diào)用。
本設(shè)計(jì)在STC8單片機(jī)上移植FatFs文件系統(tǒng),方便對(duì)數(shù)據(jù)的管理和存儲(chǔ)。FatFs是一個(gè)用C語言編寫的通用文件系統(tǒng)模塊,主要用于在小型嵌入式系統(tǒng)中實(shí)現(xiàn)FAT文件系統(tǒng)。它包含底層接口層、中間層(FatFs核心層)和應(yīng)用層3層,底層接口層可以調(diào)用前面封裝好的對(duì)TF卡操作的各種函數(shù)以,并可以從DS1302時(shí)鐘芯片中讀取日期和時(shí)間,作為文件系統(tǒng)的時(shí)間戳。FatFs文件系統(tǒng)的移植并不復(fù)雜,修改好底層接口調(diào)用的函數(shù)之后,根據(jù)需要修改diskio.h文件中宏定義來選擇某些選項(xiàng),比如是否使用長文件名、設(shè)置扇區(qū)大小等,這些選項(xiàng)會(huì)影響文件系統(tǒng)的大小。然后就可以調(diào)用FatFs提供的各種文件操作函數(shù)來操作文件了,比如打開文件函數(shù)f_open()、寫文件函數(shù)f_write()等。系統(tǒng)流程圖如圖6所示。
4? 系統(tǒng)測(cè)試
為了驗(yàn)證系統(tǒng)是否達(dá)到預(yù)期效果,對(duì)系統(tǒng)進(jìn)行了系統(tǒng)測(cè)試。數(shù)顯游標(biāo)卡尺在測(cè)量數(shù)據(jù)過程中會(huì)通過串行接口周期性地發(fā)送測(cè)量數(shù)據(jù),根據(jù)數(shù)顯游標(biāo)卡尺產(chǎn)品的不同,發(fā)送數(shù)據(jù)的時(shí)間周期也不完全相同,本文測(cè)試用到的數(shù)顯游標(biāo)卡尺大約每隔145 ms就發(fā)送一組完整的數(shù)據(jù),1 s內(nèi)就會(huì)有約7組數(shù)據(jù)發(fā)送出來。為防止測(cè)量數(shù)據(jù)丟失,在數(shù)據(jù)緩存時(shí)使用了一個(gè)環(huán)形隊(duì)列,STC8單片機(jī)有8 KB的內(nèi)部擴(kuò)展RAM,除去各種變量及數(shù)組使用的1.8 KB之外,剩余的6 KB多RAM全部用來作為環(huán)形隊(duì)列使用。根據(jù)數(shù)顯游標(biāo)卡尺發(fā)送過來的數(shù)據(jù)進(jìn)行處理并轉(zhuǎn)換為文本格式之后,一條數(shù)據(jù)大約占用40個(gè)字節(jié),1 s內(nèi)發(fā)送的數(shù)據(jù)約280個(gè)字節(jié),寫滿緩沖器需要6×1024÷280≈22 s,而6 KB的數(shù)據(jù)全部寫入TF卡所需要的時(shí)間遠(yuǎn)遠(yuǎn)小于22 s。如前所述,STC8單片機(jī)采用P3.2中斷方式來接收數(shù)顯游標(biāo)卡尺數(shù)據(jù)的,在while主程序中判斷緩沖區(qū)是否為空,如果緩沖區(qū)不為空,就把隊(duì)列頭指針和尾指針之間的數(shù)據(jù)全部寫入TF卡中,隨著緩沖區(qū)內(nèi)數(shù)據(jù)的增多,寫入TF卡的數(shù)據(jù)量也會(huì)增大,寫入效率就會(huì)隨之提高,因此,數(shù)顯游標(biāo)卡尺測(cè)量的數(shù)據(jù)不會(huì)丟失,實(shí)驗(yàn)測(cè)試也證明了這一點(diǎn)。實(shí)驗(yàn)測(cè)量數(shù)據(jù)記錄文件如圖7所示。當(dāng)然用戶也可以設(shè)置為外部開關(guān)觸發(fā)記錄方式,這樣就不必存儲(chǔ)所有的測(cè)量數(shù)據(jù),而只存儲(chǔ)用戶需要的測(cè)量數(shù)據(jù)。
5? 結(jié)? 論
本文從硬件設(shè)計(jì)和軟件設(shè)計(jì)兩個(gè)方面論述了基于FatFs文件系統(tǒng)的數(shù)顯游標(biāo)卡尺數(shù)據(jù)記錄儀的實(shí)現(xiàn)過程,在硬件設(shè)計(jì)時(shí)著重從降低功耗和提高性能方面入手,力求把設(shè)計(jì)向產(chǎn)品方向轉(zhuǎn)化。軟件設(shè)計(jì)方面分析了數(shù)顯游標(biāo)卡尺測(cè)量數(shù)據(jù)的采集、處理以及數(shù)據(jù)往TF卡中存儲(chǔ)的過程,實(shí)驗(yàn)測(cè)試證明了系統(tǒng)的穩(wěn)定性和可靠性,后繼將進(jìn)一步在實(shí)際應(yīng)用中測(cè)試系統(tǒng)的實(shí)用性并進(jìn)一步改進(jìn)。
參考文獻(xiàn):
[1] 趙景波,張偉.Protel 99 SE實(shí)用教程:第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ù)參考手冊(cè) [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
基金項(xiàng)目:2021年度安陽市科技計(jì)劃項(xiàng)目(2021C01SF030)