传感器数据采集系统设计
2018-11-07刘冠艳
刘冠艳
(曲靖市麒麟职业技术学校,云南 曲靖 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 结论
综上所述,在嵌入式应用开发中,上位机和下位机之间通过串口进行通讯时,由于传感器存在各种干扰因素,需要对获取的数据进行滤波,在本文中使用卡尔曼滤波的方法进行滤波,获得了较好的效果。同时由于整个通讯过程存在数据丢失时或者干扰的可能,需对数据进行封装和丢包处理,以便能够正确解析通讯数据。