• 公司地址
    广东,深圳
  • 联系电话
    4000-077-366

磁致伸缩位移传感器软件程序设计

  磁致伸缩位移传感器单片机的数据采集、信号处理和通信程序开发采用的是ArchimedesC交叉编译器,它是专为51系列单片机设计的一种高效的C语言编译器,使用它可以缩短开发周期,降低开发成本,而且开发出的系统易于维护,可靠性高,可移植性好。上位PC机的通信程序则基于面向对象的VC++6.0实现。

  一、数据采集与信号处理程序

  1、数据采集程序

  主要是根据AD1674的启动转换和读取转换结果的时序关系,对相关引脚进行编程,从而控制数据的采集与转换,部分程序代码如下:

  int GetADC(void)

  {

  AD-ENABLE=1;/*CE=1.AD1674芯片使能允许*/

  AD-SELECT=0;/*=0.AD1674芯片片选有效*/

  AD-CONVERT=0;/*R/=0.启动AD转换*/

  while(AD-BUSY);/*等待AD转换结束*/

  AD-CONVERT=1;/*R/=1.开始读取AD转换结果*/

  value=((WORD)High)<<4|((WORD)(Low &0x0f));

  return(value);/*返回12位采样值*/

  }

  2、信号处理程序

  采用基于抽取被测信号特征量的滑动数字滤波算法。磁环在静止状态下,磁致伸缩位移传感器输出的模拟信号波形。可以看出在测量稳定值上叠加有一个频率较高的干扰信号存在,其最大峰-峰值约为25mV,周期为440μs。如果直接将单次测量值采样传送给控制器,在高精度的测量场合下,随机得到非正常测量值的几率是比较高的,最大误差为12个LSB。因此,最好是对某一位移量进行连续的多次测量,得到一组N个测量值,并使这组测量值包含一个干扰周期,以便从中获得一个能够代表正确值的测量值。针对该模拟波形,最好是提取N个测量值中的N-4个值,再对其取平均值,就能得到正确的测量值,从而抽取到被测信号的特征量。同时,在实际测量中,被测实体的运动速度可能较快,相应地,传感器的位移量变化也比较快。如果采用一般的均值滤波算法,都需连续采样N个数据,需要时间比较长,故检测速度慢。为克服这一缺点,可采用滑动平均值滤波法。即先在RAM中建立一个数据缓冲区,依顺序存放N次采样数据,每采进一个新数据,就将最早采集的那个数据丢掉,而后求包括新数据在内的N个数据的算术平均值。这样,每进行一次采样,就可计算出一个新的平均值,从而大大加快了数据处理的速度。这种算法的核心为:每得到一个新的被测信号的特征量数据,移动一次数据块,然后求出新一组数据之和,再求平均值。对不同的信号特征,还可以采取不同的抽取特征量的方法,即这种基于抽取被测信号特征量的滑动滤波算法具有一定的普遍适用性,算法框图见下图所示。

磁致伸缩位移传感器滤波算法
磁致伸缩位移传感器滤波算法

  二、数据通信模块

  1、LCD显示

  主要根据LCD显示器的结构与原理,把要显示的数字对应的码转换写出,即写出对应的段选码表,从显示主程序中调用该表,就可以在LCD上显示出磁致伸缩位移传感器的输出变化值。

  2、单片机通信程序

  为确保通信成功,通信双方必须在软件上有一系列的约定,即软件协议。单片机与CPU之间事先必须约定好字符的编码形式、奇偶校验形式、起始位和停止位的规定及数据传输的波特率。串行口的控制寄存器有两个,串行控制寄存器SCON用来设置字符格式,特殊功能寄存器PCON能改变波特率。因此在单片机串行通信之前,要对串行口进行初始化。下面是以串行口中断方式编写的发送和接收程序部分代码:

  interrupt[0x23]void SCON-int(void)/*串行中断服务程序*/

  {

  Rec-data=SBUF;/*接收上位机握手信号*/

  if(Rec-data==0xff)/*与上位机握手成功*/

  {

  RI=0;SBUF=test-data[0];/*发送串行数据给上位机*/

  while(!TI);TI=0;

  SBUF=test-data[1];

  while(!TI);TI=0;

  PUTBYTE(test-data[0]);/*发送串行数据给液晶显示屏*/

  PUTBYTE(test-data[1]);

  }

  else while(!RI);RI=0;

  }

  3、Windows平台下PC机与单片机通信程序

  上位机串行通信程序采用VisualC++6.0实现。在Windows环境下,不允许用户直接控制串口的中断,而采用VC自身提供的ActiveX控件MicrosoftCommunicationsControl,即MSComm控件,可以直接在应用程序中嵌入MSComm控件,从而方便地进行计算机串口的通信管理。该控件提供了对Windows通信驱动程序的API函数接口,它屏蔽了通信过程的低层操作,使用时只需关心控件的相关属性和事件。即设置MSComm控件的相应属性,调用控件的相应方法和事件,按照通讯协议要求发出命令号,上位机完成相应功能,便能实现数据通讯。串行通信程序,采取事件驱动的方式(Event-drive)接收来自与下位单片机的二进制数据,并将接收到的数据以图形的形式绘制到屏幕,方便用户直观地观察数据的变化。通信协议设置为:波特率为9600bit/s,无奇偶校验,8位数据位,1位停止位。选用COM1通信口。