基于FatFs的数显游标卡尺数据记录仪

2023-06-21 17:44常国权
现代信息科技 2023年1期
关键词:游标卡尺

摘  要:为了实现对数显游标卡尺测量数据的快速、准确记录,设计了一种基于FatFs文件系统的数显游标卡尺数据记录仪。该记录仪以STC8单片机为核心,扩展了TF卡存储模块、实时时钟模块等,支持连续记录和外部按键触发记录两种模式。可以把数显游标卡尺串行通信接口输出的测量数据以CSV文本文件的格式存储在TF卡中,并对每条测量数据自动添加编号和时间戳,方便对数据进行分析和处理。

关键词:FatFs文件系统;游标卡尺;STC8单片机;SPI

中图分类号:TP368.2    文献标识码: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  引  言

數显游标卡尺是一种精密的测量工具,它具有功能齐全、读数直观方便等优点,现已经被广泛应用于机械加工、生产制造、工农业生产等领域。大部分数显游标卡尺都有信号输出接口,该接口可以把数显游标卡尺的测量数据发送出来,但该输出信号并不规范,无法和计算机或其他记录设备直接相连。这就造成了测量数据无法实现智能存储,只能靠人工手工记录,这势必会造成测量效率低下,且记录过程复杂易出错。本设计采用STC8单片机及FatFs文件系统,通过数显游标卡尺的通信接口记录测量数据,并以逗号分隔值(Comma- Separated Values, CSV)文本文件的格式存储在TF卡中,以此来实现对数显游标卡尺测量数据的自动化记录,该方法可以降低记录测量数据错误的机会,提高测量记录的效率,记录的CSV文本文件也方便对数据进行分析和处理。该记录仪支持连续记录和外部按键触发记录两种模式。

1  系统总体设计

该系统采用STC公司最新生产的STC8A8K64D4单片机为主控核心,扩展了实时时钟模块、TF卡接口电路、游标卡尺电平转换电路等,并在STC8单片机上移植了FatFs文件系统。实时时钟模块用来给记录仪提供数据测量的日期和时间;TF卡接口电路实现单片机和TF卡之间的通信接口,通过该接口,单片机可以把日期、时间、游标卡尺测量的数据、单位等信息以文本格式一并存储到TF卡中;由于大部分数显游标卡尺的数据通信接口电平都是1.5 V逻辑电平,而STC8单片机的工作电压一般采用的是3.3 V或5 V,游标卡尺电平转换电路就完成单片机和游标卡尺直接通信电平的转换,使通信更可靠;系统电源模块给单片机和TF卡等模块提供稳定的电压。系统总体设计框图如图1所示。

2  系统硬件设计

2.1  系统主控及电源电路设计

在多方面比较各类单片机的综合性能和指标之后,本系统采用了STC公司最新生产的STC8A8K64D4单片机作为主控制器。STC8是高速8051系列单片机,它内部有8K RAM,64K Flash,4个串行口,硬件SPI等丰富资源,并在内部集成了高精度的晶振电路,且晶振可在6 MHz~45 MHz范围内编程设置。它突出的优点是速度快、性价比高、功耗低、资源丰富,设计起来比较方便,可用在智能控制、智能仪器仪表等应用场合。该单片机支持典型3.3 V或5 V供电的场合,考虑到TF卡的工作电压为3.3 V,为方便单片机与TF卡通信接口方便,这里单片机的供电电压采用3.3 V供电。系统主控及电源电路设计原理图如图2所示。图2中U1就是STC8单片机的引脚接口图,J1接口连接到了STC8单片机的串行口1,它是程序下载接口,STC8单片机通过串行口1下载更新用户程序。两个LED指示灯D1和D2可以用来指示系统状态和数据存储状态。SET引脚提供给用户一种选择性记录数据的手段,SET引脚连接到STC8单片机的P3.6接口,P3.6支持下降沿中断,该接口可以外接到一个手动按键或脚踏开关,当需要记录测量数据时,用户可以按下外接开关。

在系统电源模块选择方面,考虑到系统可能会使用电池供电的情况,电源模块应该具备低功耗特性,在系统电源设计中采用了功耗较低HT7533电源芯片进行设计。HT7533是台湾合泰(Holtek)生产的低压差微功耗LDO,它的待机电流在微安级,具有高耐压、低压差、低电流消耗的优点。它的输入电压高达24 V,输出电压3.3 V,并可输出100 mA以上的电流,完全满足系统要求。系统电源设计图如图2中U2部分所示。

2.2  TF卡及时钟模块电路设计

TF卡采用的是Micro SD卡,TF卡堪称可移动式的储存IC,在手机以及其他智能设备中被广泛采用。它的典型工作电压为3.3 V,支持SDIO和SPI两种模式的通信协议,STC8单片机没有硬件SDIO接口,因此TF卡采用SPI通信协议,并和STC8单片机的硬件SPI接口相连接。STC8单片机硬件SPI模块引脚可以通过软件编程切换到P2.2~P2.5,其中P2.2是片选NSS,P2.3是MOSI,P2.4是MISO,P2.5是SCLK,因此,根据TF卡引脚接口定义,只需要把它们一一相连即可,在软件设计时,需要通过发命令使TF卡进入SPI通信模式。TF卡电路设计原理图如图3中的J2部分所示。图3中的U3部分是时钟模块电路设计,该时钟模块采用的是DS1302,它和STC8单片机的通信接口采用模拟SPI方式,因此,DS1302的CLK,I/O和CE引脚只需要连接到STC8单片机的3个通用IO口即可。BT1是时钟的备份电池,Y1是DS1302的晶振时鐘。

2.3  电平转换电路设计

由于大部分数显游标卡尺供电采用的是1.5 V的纽扣电池,因此,它们数据通信的逻辑电平也是1.5 V,为了防止数显游标卡尺和STC8单片机之间出现通信不稳的情况,这里用比较器LM393来实现1.5 V逻辑电平和3.3 V逻辑电平之间的转换,电平转换电路设计原理图如图4所示。在图4中J3为数显游标卡尺数据线的接口,CLK为时钟输出,SDA为数据输出,假定它们输出的高电平为1.5 V,则该电平会和U4的2脚或7脚的电压进行比较,而2脚或7脚的电压是固定的,通过电阻分压比例可知,该电压为约为1.11 V,当CLK或SDA输出高电平1.5 V时,比1.11 V要高,此时U4的OUTA或OUTB输出高电平,反之,则输出低电平,从而实现电平转换。OUTA接到了STC8单片机的P3.2引脚,作为时钟采集端;OUTB接到了STC8单片机的P3.4引脚,作为数据采集端。

3  系统软件设计

系统软件设计主要包括数显游标卡尺数据的采集、TF卡底层SPI驱动的编写、FatFs文件系统的移植等,这里主要软件的设计流程,软件编程是在Keil C开发环境中用C语言编写,并使用STC-ISP软件下载到STC8单片机中。

数显游标卡尺数据的采集通过数显游标卡尺提供的串行数据接口实现。数显游标卡尺提供了一个简化的三线SPI串行数据接口,在测量过程中,每隔一定的时间数显游标卡尺会通过该接口输出一组时钟和数据,每组数据24位,遵循先送低位再送高位的原则。数显游标卡尺输出的一组24位数据如图5所示。

24位数据分成3个字节,前2个字节(16位)组成数据位,最后一个字节(8位)包含正负标志位和单位等信息,根据以上协议及图4中的引脚分配结构,数据采集时只需要监测数显游标卡尺的时钟线,每监测到一个时钟上升沿,就从数据线读取一位数据。STC8单片机的P3.2引脚(INT0)支持上升沿中断,可以在INT0的中断服务子程序中进行数据读取和处理,每采集完成24位数据,就对3个字节进行处理,并把处理好的数据放入到环形队列中等待STC8单片机进行存储。在连续存储模式下测量数据会不停地写入到缓冲区;在外部按键触发模式下,只有检测到用户按键,才会把数据写入到缓冲区。

TF卡底层SPI驱动的编写通过查阅TF的通信协议,并编写程序来实现。如2.2所述,TF卡支持SDIO和SPI两种模式的通信协议,STC8单片机和TF卡采用SPI通信协议,STC8单片机上电之后首先初始化硬件SPI接口,然后调用SPI读写子程序来实现TF卡底层驱动的编写。在TF卡上电之后,拉低NSS为低电平,使TF卡进入SPI模式,在发送给TF卡发送命令之前,要先发送74个时钟,之后才能开始命令操作。TF卡提供了读操作、写操作等多条指令,可以通过这些指令来实现对TF卡的读写操作。底层驱动测试完成之后,就可以把对TF卡的各种操作封装成函数,供FatFs文件系统调用。

本设计在STC8单片机上移植FatFs文件系统,方便对数据的管理和存储。FatFs是一个用C语言编写的通用文件系统模块,主要用于在小型嵌入式系统中实现FAT文件系统。它包含底层接口层、中间层(FatFs核心层)和应用层3层,底层接口层可以调用前面封装好的对TF卡操作的各种函数以,并可以从DS1302时钟芯片中读取日期和时间,作为文件系统的时间戳。FatFs文件系统的移植并不复杂,修改好底层接口调用的函数之后,根据需要修改diskio.h文件中宏定义来选择某些选项,比如是否使用长文件名、设置扇区大小等,这些选项会影响文件系统的大小。然后就可以调用FatFs提供的各种文件操作函数来操作文件了,比如打开文件函数f_open()、写文件函数f_write()等。系统流程图如图6所示。

4  系统测试

为了验证系统是否达到预期效果,对系统进行了系统测试。数显游标卡尺在测量数据过程中会通过串行接口周期性地发送测量数据,根据数显游标卡尺产品的不同,发送数据的时间周期也不完全相同,本文测试用到的数显游标卡尺大约每隔145 ms就发送一组完整的数据,1 s内就会有约7组数据发送出来。为防止测量数据丢失,在数据缓存时使用了一个环形队列,STC8单片机有8 KB的内部扩展RAM,除去各种变量及数组使用的1.8 KB之外,剩余的6 KB多RAM全部用来作为环形队列使用。根据数显游标卡尺发送过来的数据进行处理并转换为文本格式之后,一条数据大约占用40个字节,1 s内发送的数据约280个字节,写满缓冲器需要6×1024÷280≈22 s,而6 KB的数据全部写入TF卡所需要的时间远远小于22 s。如前所述,STC8单片机采用P3.2中断方式来接收数显游标卡尺数据的,在while主程序中判断缓冲区是否为空,如果缓冲区不为空,就把队列头指针和尾指针之间的数据全部写入TF卡中,随着缓冲区内数据的增多,写入TF卡的数据量也会增大,写入效率就会随之提高,因此,数显游标卡尺测量的数据不会丢失,实验测试也证明了这一点。实验测量数据记录文件如图7所示。当然用户也可以设置为外部开关触发记录方式,这样就不必存储所有的测量数据,而只存储用户需要的测量数据。

5  结  论

本文从硬件设计和软件设计两个方面论述了基于FatFs文件系统的数显游标卡尺数据记录仪的实现过程,在硬件设计时着重从降低功耗和提高性能方面入手,力求把设计向产品方向转化。软件设计方面分析了数显游标卡尺测量数据的采集、处理以及数据往TF卡中存储的过程,实验测试证明了系统的稳定性和可靠性,后继将进一步在实际应用中测试系统的实用性并进一步改进。

参考文献:

[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系列单片机技术参考手册 [EB/OL].http://www.stcmcudata.com/STC8F-DATASHEET/STC8A-STC8F.pdf.

[4] 严蔚敏,李冬梅,吴伟民.数据结构(C语言版):第2版 [M].北京:人民邮电出版社,2015.

[5] 徐爱钧.单片机原理与应用——基于C51及Proteus仿真 [M].北京:清华大学出版社,2015.

作者简介:常国权(1973.11—),男,汉族,河南清丰人,副教授,硕士,研究方向:嵌入式技术应用与开发。

收稿日期:2022-09-09

基金项目:2021年度安阳市科技计划项目(2021C01SF030)

猜你喜欢
游标卡尺
长度计量中游标卡尺检定前常见故障的修理方法
关于游标卡尺读数问题易错点的剖析
浅析游标卡尺的读数策略
游标卡尺的修理
关于游标卡尺读数的3个问题
探究游标卡尺教学中不应被忽视的误差问题
浅谈长度计量工作中游标卡尺的问题与修理
一种新型多分度值游标卡尺
游标卡尺测量误差原因分析
对一道“游标卡尺”测试题的思考