传感器数据采集系统设计

2018-12-04 09:19刘冠艳
关键词:数据采集传感器

刘冠艳

【摘 要】在嵌入式开发过程中,对传感器采集数据时常常使用浮点数据以提高精度,但是浮点数据在计算机内部有别于其他类型的数据存储并且在传输的过程中存在丢包的现象,因此需要在上位机和下位机之间制定好一定的通讯机制,以避免使整个数据采集系统处于故障状态而无法运行[1]。为了去除传感器各种噪声的干扰,使用了卡尔曼滤波的方法对获取的数据进行滤波,整个传感器采集系统获得了较好的效果。

【Abstract】In the process of embedded development, floating-point data is often used to improve the accuracy of the sensor data acquisition, but the floating point data is different from other types of data storage inside the computer and there exists packet loss in the process of transmission. Therefore, a good communication mechanism between the upper monitor and the lower computer is needed, so as to avoid the failure of the entire data acquisition system and can not operate[1]. In order to remove the interference of various noises of the sensor, the method of Kalman filtering is

used to filter the obtained data, and the whole sensor acquisition system has achieved good results.

【关键词】串口通讯;传感器;数据采集

【Keywords】 serial communication; sensor; data acquisition

【中图分类号】TP391 【文献标志码】A 【文章编号】1673-1069(2018)09-0123-02

1 引言

在嵌入式应用开发中,常常需要对传感器的数据进行采集。为保证传感器采集数据的精度,必须使用单精度或双精度浮点数进行采集,但是浮点数据在计算机内部存储的结构有别于其他类型的数据,同时由于传输的过程中存在丢包和干扰现象,为实现在上位机和下位机之间浮点数据的采集,本文使用STM32位处理器作为下位机主控,对PC上位机和下位机之间的通讯机制进行了初步研究。

2 下位机设计

有刷直流电机[2]调速系统由有刷直流电机、电机驱动模块、STM32F103C8T6最小开发板模块、霍尔编码器构成。在使用开发版板串口时,首先对相关寄存器初始化设置,以使串口发送接收数据。同时在实际应用时为了保证一定的精度,传感器采集的数据通常是浮点数据[3],串口发送接收时需要对浮点数据进行处理:发送时将浮点数据转换成字节数据,接收数据时将字节数据转换成浮点数据[4]。

2.1下位机串口硬件初始化

下位机硬件串口和上位机串口属性设置类似,具体代码如下:

RCC->APB2ENR|=1<<2; //使能串口1时钟

GPIOA->CRH&=0XFFFFFF0F;

GPIOA->CRH|=0X000000B0;//设置PA口输入输出模式

RCC->APB2RSTR|=1<<14; //串口复位

RCC->APB2RSTR&=~(1<<14);//停止串口复位

USART1->BRR=mantissa; //设置串口波特率

USART1->CR1|=0X200C; //一位停止位,无校验

USART1->CR1|=1<<8; // 串口中断使能USART1->CR1|=1<<5;// 接收缓冲区非空中断使能

MY_NVIC_Init(2,1,USART1_IRQn,2);//设置串口中断优先级

由于下位机串口发送接收的是字节数据,需要将字节数据转换成浮点数据[5],通过下列语句进行转换,x为缓冲区接收到的字节变量,y为浮点数据。

y=(*(float *)&x;));

發送数据时需要将浮点数据转换成字节收据进行发送,使用下列语句进行转换。x为缓冲区接收到的字节变量,y为浮点数据[6]。

(*(float *)&x;)=y;

2.2 卡尔曼滤波

卡尔曼滤波是一种常见的时域滤波方法,该方法可以根据系统的输入输出观测数据,对系统状态进行最优估计[7]。该滤波算法[8]可以有效剔除系统中的随机噪声和干扰的影响,便于计算机编程实现,并能够对现场采集的数据进行实时更新和处理,因此,在许多方面得到了广泛应用。滤波效果见图1。

3 上位机设计

上位机串口通讯软件采用Visual studio2005 C#语言编写,由于上位机和下位使用串口进行通讯,因此在编写上位机软件时必须引用System.IO.Ports命名空间,在程序开头部分使用下列语句:using System.IO.Ports。

引用后创建串口变量并对它的属性进行设置,并将串口serialPort的波特率设置为9600kbs,8位数据位,一个停止位,无奇偶校验。

在程序中使用Read()方法读取缓冲区的数据,发送数据使用serialPort2.Write()方法,为了实时观察传感变化的情况,上位机软件需要须用到chart控件,使用时应在程序开头部分引用下列语句:System.Windows.Forms.DataVisualization.Charting

需对chart控件的ChartAreas["ChartArea1"].AxisY属性的MajorTickMark、MinorTickMark进行设置,添加点使用chart1.Series["Series1"].Points的AddXY()方法。

4 通信控制設计

由于需要传递的数据大部分是浮点数据,而浮点数据在内存中占用4个字节,并且在STM32F103C8T6和PC中都是小端存储模式,所以PC上位机和下位机之间通讯封装了7个字节的数据包,其格式是:

FF M f1 f2 f3 f4 0A

FF代表数据包开始,M代表传送数据类型,f1-f4代表4个字节浮点数据,0A表示数据结束。上位机发送7个字节的数据包,下位机串口接收到数据进行中断响应,在单片机内部中断响应的过程如下:首先对接收到的数据进行解包,如果数据封装完整,单片就把设置好的数据发送给上位机,如果单片机中断响应没有正确获得数据包,直接进行丢包处理。上位机接收到数据,产生接收数据事件触发响应,上位机响应后检查设置的数据是否一致,如果一致,就在上位机上相应控件显示,并且生成日志,以便查看参数设置记录,上位机检查如果发现设置参数不一致,再重新发送。

5 结论

综上所述,在嵌入式应用开发中,上位机和下位机之间通过串口进行通讯时,由于传感器存在各种干扰因素,需要对获取的数据进行滤波,在本文中使用卡尔曼滤波的方法进行滤波,获得了较好的效果。同时由于整个通讯过程存在数据丢失时或者干扰的可能,需对数据进行封装和丢包处理,以便能够正确解析通讯数据。

【参考文献】

【1】曾华, 冯浩, 赵浩. 有刷直流电机振动转矩的解析与实验研究[J]. 轻工机械, 2014, 32(1):70-74.

【2】王安阳, 刘欢. 直流有刷电机传导发射特性和外置滤波电路数值试验研究[J]. 小型内燃机与车辆技术, 2017(6):18-23.

【3】顾万里, 张森, 胡云峰,等. 有刷直流电机非线性控制系统设计[J]. 吉林大学学报(工学版), 2017, 47(3):900-907.

【4】顾万里, 胡云峰, 张森,等. 有刷直流电机自适应滑模控制器设计与实验[J]. 西安交通大学学报, 2017, 51(9):112-117.

【5】李宗俐, 许芳, 梁頔男,等. 有刷直流电机约束预测控制器设计及实现[J]. 吉林大学学报(信息科学版), 2017, 35(4):363-369.

【6】苏坚坚, 陈少斌. 基于最小二乘测速方法的有刷直流电机调速[J]. 机电技术, 2017(6):59-61.

【7】武立, 周云山, 张容川. 基于卡尔曼滤波的光电式扭矩传感器研究[J]. 计算机仿真, 2017(11):275-279.

【8】赵美蓉, 于锦辉, 王进,等. 基于卡尔曼滤波的光纤压力信号解调方法[J]. 纳米技术与精密工程, 2017(5):353-359.

猜你喜欢
数据采集传感器
康奈尔大学制造出可拉伸传感器
简述传感器在物联网中的应用
“传感器新闻”会带来什么
跟踪导练(三)2
光电传感器在自动检测和分拣中的应用
基于开源系统的综合业务数据采集系统的开发研究
基于扩展卡尔曼滤波的PMSM无位置传感器控制