基于龙芯2k1000处理器的智慧多功能杆设计

2023-12-01 08:15刘必广王军祥
科学与信息化 2023年22期
关键词:龙芯考勤线程

刘必广 王军祥

福建船政交通职业学院 福建 福州 350007

引言

在社区、厂区、社会公共空间可以使用多功能杆提供信息发布、环境数据收集、安全监控服务管理,为提高管理水平提供必要的支撑。本文基于国产处理器龙芯2k1000设计一个具备气象服务、环境监测、信息发布和安全监控功能的多功能杆。

1 系统设计方案

智慧多功能杆系统由主控系统和终端设备组成。主控系统使用龙芯2k1000开发板。各个终端设备实现多功能杆的数据采集和应用控制。终端设备的功能有:远程路灯控制、智能气象监测、巡检人员人工操作、安环监控等。系统由终端设备采集数据发送到主控系统进行处理和判断、主控系统通过终端设备实现控制、监控和信息发布功能。

2 硬件设计

智慧多功能杆的主控系统使用龙芯2k1000[1]开发板,配置有龙芯2k1000处理器常用的GPIO接口、RJ45网络接口、USB接口、HDMI接口。GPIO接口除了能够进行通用的输入输出之外,还可以通过GPIO接口复用功能实现UART、I2C、SPI、CAN、CAN等接口应用。智慧多功能杆有多种终端设备,终端设备的接口也不尽相同,根据终端设备不同连接方式、物理特性、设计好和龙芯2k1000开发板的连接方式,能够充分发挥系统的作用,提高系统工作效率。系统硬件模块如图1所示。

图1 硬件模块图

2.1 智慧气象站功能

智慧气象站[2]包括温湿度、光强、粉尘、噪声,气压等气象数据监测和处理。各种气象监测以自己的方式连接到主控系统,接收主控系统指令,执行相应气象数据监测工作并将监测到的气象数据发送给主控设备进行处理。

2.1.1 温湿度检测设计。系统使用DHT22[3]作为温湿度监测设备,监测当前环境温湿度值。DHT22只有一根数据线,用于接收命令和输出数据。由于DHT22为单总线数据传输,在和DHT22指令/数据交互时,龙芯2k1000开发板需要使用漏极开路的GPIO口连接到DHT22,并为DHT22数据线上拉一个5.1kΩ电阻,确保没有收到指令的情况下为高电平。

DHT22的驱动程序主要有2个模块:初始化模块和数据读取模块。

初始化模块负责定义DHT22的数据引脚、数据缓冲区。数据读取模块负责读取温湿度数据并分别转换为温度值和湿度值。当数据读取模块读取温湿度数据时,按照DHT22的工作时序读取温湿度值:先发送800μs低电平作为DH22启动信号,然后释放数据线,通过数据线接收DHT22发送的温湿度数据。当收到DHT22的数据起始信号(80μs低电平后80μs高电平)后,接收40位数据,每一位数据都由一段低电平加一段高电平组成。1的时序为50μs低电平后70μs高电平,0的时序为50μs低电平后25μs高电平。程序设计时可以在低电平结束后的45μs采集电平,电平为0,高电平为1。读取到的40位温湿度数据高位在前低位在后。接收到的40位数据从高位到低位分为5个字节,其中第4、3字节分别为湿度数据的高位和地位,第2、1字节分别为温度数据的高位和地位。收到温湿度数据后要先校验,校验的方法是若温湿度数据4~1字节和等于0字节,数据无误,校验通过,否则数据不可用。校验通过后计算湿度值为4~3字节数据值除以10。2~1字节的最高位为温度符号,1位负数、0位负数,其余位的值除以10为温度绝对值。

2.1.2 粉尘检测设计。系统使用GP2Y1014AU粉尘传感器[4]检测环境粉尘值。GP2Y1014AU的LED引脚连接龙芯处理器的一个GPIO引脚,当LED为高电平,GP2Y1014AU的发光二极管亮,280μs后,GP2Y1014AU的引脚out输出粉尘检测的模拟值,out引脚和其反相信号分别接A/D转换器AD7810的VIN+和VIN-,经A/D转换得到粉尘检测值Vo。

GP2Y1014AU的驱动程序的初始化程序完成GP2Y1014AU和AD7810引脚设置。数据读取模块要分3步执行,第一步,通过设置GP2Y1014AU的LED 引脚为高电平,启动GP2Y1014AU采样;第二步,0.28ms后,GP2Y1014AU采样完成,out引脚输出检测结果,设置AD7810的CONVST引脚1μs的高电平,启动AD7810进行A/D转换。2μs后后A/D转换完成,向AD7810的SCLK引脚连续输出10个脉冲,与此同时从AD7810的Dout引脚读取10位A/D转换结果Vo。然后计算粉尘浓度检测值:当Vo<0.6,粉尘浓度粉尘浓度density=0;当0.6<=Vo<=3.6,density=(Vo-0.6)/5;当Vo>3.6, density=0.6。

2.1.3 光强检测设计。系统使用TSL2561[5]进行光强监测。TSL2561为I2C协议访问。TSL2561引脚连接如表。DDR SEL 器件访问地址选择,本系统将DDR SEL接地,其I2C地址为0X29,通过SCLSDA按照I2C协议读写TSL2561数据。当光强超过预设范围后,TSL2561通过INT发出中断信号,连接GPIO37复用67号中断。

光强检测设计驱动程序的初始化模块通过设置i2c_sel为1,复用I2C1,设置67号中断及中断服务程序,开辟数据缓冲区用于存放光强数据。数据读取模块负责TSL2561光强数据读写。读写TSL2561温湿度数据,要按照TSL2561工作时序进行。写数据或命令时,先将TSL2561的地址和操作命令写入I2C数据格式帧中,然后发送到I2C总线,TSL2561确认I2C数据格式帧中的地址和自己的地址匹配后,向会系统发送应答信号,系统收到应答信号后会向TSL2561发送多个数据,发送每个数据后都要等待TSL2561响应后才会继续后继发送。

读数据时,当系统收到应答信号后,系统将通信模式改变为TSL2561发送,系统接收模式。然后,系统等待TSL2561的应答信号,当系统收到TSL2561应答信号后,就可以接收数据。当数据接收完成后,系统要发送一个非应答信号,表示系统不在接收数据。

2.1.4 气压检测设计。系统使用bmp280[6]监测大气压,使用I2C方式访问bmp280。连接时,时钟信号SCL接龙芯2k1000开发板I2C1时钟线,数据信号SDA接龙芯2k1000开发板I2C1数据线,地址控制SDO接地,即bmp280的I2C地址为0XEC。

气压检测的初始化程序主要工作有:设置bmp280的测量控制寄存器值为00100111;即设置bmp280的大气压采样模式为16位,普通模式;配置寄存器值的7~5位为000,即转换时间间隔为0,5ms。大气压强采样模式为16位采样模式,即设置ctrl_meas寄存器的Bit7~Bit5位为001,设置bmp280工作于大气压采样模式,即设置即设置ctrl_meas寄存器的Bit7~Bit5位为001。读取气压过程为,读取bmp280中地址单元0xf7~0xf9中的气压数据,按照转换公式转换为气压值。

2.1.5 噪声检测设计。噪声检测模块由LM386对将麦克风采集到的声音信息进行放大后送A/D转换得到噪声数据。

麦克风的输出连接到LM386输入端,LM386和麦克风输出共地,LM386输出端连接A/D转换器,A/D转换的输出连接到龙芯2k1000开发板。

2.2 管理应用功能

2.2.1 巡检人员考勤。本系统使用指纹签到作为管理人员的考勤,其功能包括考勤、考勤情况上报、信息变更、考勤信息录入和修改等等。

系统使用AS608[7]指纹识别模块作为考勤终端。连接时将指纹识别模块的Tx和Rx引脚分别接龙芯2k1000开发板UART3_RXD和UART3_TXD引脚,使用串行方式访问指纹识别模块。

考勤模块考勤信息录入功能用于采集指纹图像,生成指纹特征数据并将指纹特征数据保存到指纹库。指纹特征数据是根据指纹纹路、指纹线条交叉点等特点提取指纹图案的参数而生成,由于每个人指纹信息各不相同,指纹特征值也会各不相同。输入指纹生成特征值后,搜索指纹库,若有相同的指纹特征值,发出提示并忽略新输入的指纹数据。考勤模块考勤程序会先从指纹识别模块读取考勤人员指纹信息并生成指纹特征值,然后到指纹库中检索该指纹特征值。若检索到,则获取该指纹特征值对应的员工信息,将员工号、签到时间、签到多功能杆标记等签到信息记录到签到数据表中。

巡检人员在巡检后需录入巡检记录、系统异常、设备检修等信息。本系统预留2个USB接口用于即时连接键盘和鼠标。当巡检人员发现系统异常或设备故障后登录系统的巡检记录模块,录入系统异常信息或设备检修信息。录入的信息将会发送到信息处理服务器,如果故障未修复,将会提醒相关人员。

2.2.2 信息显示和广告投放。龙芯2k1000开发板通过HDMI接口可以连接不同型号的显示器。用于分屏显示系统信息和广告投放。

将智慧气象站模块监测到的气象信息以列表的格式在气象信息显示区域显示。每10min刷新温湿度、光强、粉尘、噪声,气压等监测数据。

广告显示区域用于根据客户要求显示或播放广告信息。广告投放模块分为文字广告、图片广告和视屏广告三种。文字广告内容播放时要设置好显示背景、设置根据要求设置好字体大小、动态效果显示文字。图片广告可以显示单个图片或将多张图片组合后显示;视屏显示需要先读取视频文件,获取文件播放时长,然后在定时时间内只能不能切换播放,确保一段广告播放完整。然后定时切换文字广告、图片广告和视屏广告内容。

2.2.3 智能路灯控制。智能路灯控制模块通过一个继电器开关控制路灯,能够通过网络根据远程命令控制路灯,还可以根据不同日期天黑天亮时间开启或关闭路灯。

2.2.4 视频监控[8]。龙芯2k1000开发板通过USB接口连接摄像头。然后,搭建视屏读取平台,以固定的时间间隔将视频文件保存在本地临时目录,按照系统的要求,将相应视频文件传送到视屏服务器。由于视频文件比较大,本地保存的视频文件会以约定的规则定时清理。

3 软件模块设计

主程序启动后,主线程在初始化工作完成后,创建若干个子线程,每个子线程完成相应的功能,主线程负责协调个子线程工作。系统模块图如图2所示。

图2 系统模块图

软件模块功能有系统初始化、功能模块实现、显示信息等功能。

3.1 系统初始化模块

初始化模块完成系统初始化配置,配置系统数据区;定义各检测模块数据缓冲区;调用各检测模块的初始化程序设置各检测模块GPIO引脚工作模式;定义签到数据库、初始化指纹库;定义摄像头视屏存放路径和视屏命名规则;初始化路灯开关时间;初始化广告信息;调用各功能模块初始化函数,分别对各功能模块进行初始化工作。

3.2 启动监测功能线程

系统初始化模块之后,启动各模块监测线程,各模块监测线程完成监测任务后把监测到的气象数据存放到对应的数据缓冲区中,在数据缓冲区起始字节设置一个标志位,用于标记数据缓冲区中的数据是否有效。各监测线程分别负责相应的数据监测,防止因监测气象数据延时或气象监测设备故障导致系统迟滞。

温湿度监测线程调用温湿度数据读取函数得到温湿度数据,按照数据协议转换为温湿度值分别放到温度值缓冲区和湿度值缓冲区中。粉尘监测线程调用粉尘数据读取函数,由于粉尘检测需要进行A/D转换,需等待粉尘检测结果后再读取粉尘数据值放入粉尘值缓冲区。噪声监测线程调用读取函数后要等待A/D转换完成信号,然后才能读取噪声值放入噪声值缓冲区。光强监测线程调用光强读取函数获取光强数据放入光强值缓冲区,当光强值超过预设范围,由67号中断处理,光强数据要做超值处理。气压监测线程调用气压数据读取函数放入气压数据缓冲区。

由于气象数据变化不是很快,无须每一个主系统循环都进行气象数据监测,系统使用定时的方式启动气象监测线程。这样可以节约系统资源,提升系统运行效率。

3.3 监控处理线程

监控处理线程调用视频监控处理函数,按照设定的分辨率将监控视屏保存在指定路径,定期清理超期视屏。

3.4 显示信息

显示信息模块将信息分为基本信息、监测信息和广告信息三种来处理。基本信息有日期时间、提示等信息,基本信息以固定格式在固定区域显示;监测信息显示要先根据监测信息标志字节判断相应监测数据是否有效,然后在固定区域显示有效的监测信息;系统以轮询方式在显示器的广告区域轮流显示各个广告信息。

3.5 路灯控制

路灯控制是在系统设定的时间打开或关闭路灯。

3.6 管理人员考勤

管理人员考勤只有在按了考勤按钮后才启动,启动指纹识别,指纹识别成功后将考勤信息包括员工号、考勤时间、考勤地点等信息记录到数据表中。

3.7 信息录入

在选择信息录入按钮后会启动信息录入,录入人员可以输入系统运行情况、设备检修信息、巡检信息等信息并保存到系统信息表中。

4 结束语

基于龙芯2k1000处理器的多功能杆,利用龙芯2k1000处理器开发板开放接口,结合多功能杆应用的功能,提供了一个集环境数据采集、公共信息服务、公共安全监控平台。

猜你喜欢
龙芯考勤线程
基于国产化龙芯的动环数据采集系统
基于人脸识别技术的考勤应用研究
智能人脸识别考勤系统
便携式指纹考勤信息管理系统设计
浅谈linux多线程协作
“龙芯之父”胡伟武
龙芯发布新一代处理器产品
“最严考勤”难留学生心
基于上下文定界的Fork/Join并行性的并发程序可达性分析*
Linux线程实现技术研究