APP下载

传感器数据采集系统设计

2018-11-07刘冠艳

中小企业管理与科技 2018年27期
关键词:浮点下位字节

刘冠艳

(曲靖市麒麟职业技术学校,云南 曲靖 655000)

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));

图1 卡尔曼滤波效果对比

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

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 结论

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

猜你喜欢

浮点下位字节
LEO星座增强GNSS PPP模糊度浮点解与固定解性能评估
No.8 字节跳动将推出独立出口电商APP
基于Simulink浮点模型和定点模型的问题研究
基于浮点DSP的铁路FSK信号检测
No.10 “字节跳动手机”要来了?
提高火力发电厂自动电压控制系统投入率的措施
发射机房监控系统之下位机
轻量级分组密码Midori64的积分攻击
围观党“下位”,吐槽帝“登基”
CAN总线并发通信时下位机应用软件设计