引言
我们跑步或骑自行车时,手臂的振动常常使我们手中的电子设备所显示的图像看起来模糊不清,长时间观看(如观看MP4视频、收发短信等)容易造成视觉疲劳。汽车轮船的显示设备(如车载GPS),强振动机床的数控系统以及一些工程机械(如挖掘机、推土机等)也会发生类似的问题。可见,由于振动而导致显示效果模糊不清的现象是普遍存在的。
究其原因,在于这些显示设备输出的均为静态图像,基础的振动使其成为(相对于人)振动图像,由于人神经系统的滞后(人的正常反应时间大约需要0.3s),造成大脑所接收到的是模糊不清的画面。当然对于人的神经系统我们暂时束手无策,但是我们可以首先检测出基础的振动状态,由微控制器控制显示器件的输出图像朝反方向偏移(如此,实时的偏移即是动态显示),综合的显示效果自然是(相对于人)静止不动的图像,上面的问题就迎刃而解了。
问题的描述
问题的产生
正常情况下显示器件相对观察者是静止的,但很多情况下显示器件会发生振动,这些振动会使显示器件所显示的图像看起来模糊不清,长时间观看容易造成视觉疲劳。如图1所示,基础振动在⊿t时间内,产生(⊿x,⊿y)的绝对位移(这里假定人静止不动),由于显示器件所显示的图像是静态的或者是与基础振动无关的动态图像流,那么图像也会在这⊿t时间内产生(⊿x,⊿y)的绝对位移。人的视觉系统的反应速度(人的正常反应时间大约需要0.3s)低于基础振动的速度,几幅相互间有偏移的图像就会重叠在一起如图1所示,造成图像看起来模糊不清。
问题的解决方法
最容易也是最简单的解决办法就是测量出在⊿t时间内产生的(⊿x,⊿y)绝对位移值,然后控制显示器件使输出图像产生相反方向的偏移量(-⊿x,-⊿y)。这样综合的效果是图像相对观察者是静止的,图像又变得清晰了!
要实现这种对振动图像的补偿会遇到几个挑战。首先,是基础振动的绝对位移值的测量,我们先来分析基础振动的特点:
·振动频率低(3Hz~30Hz);
·振幅较小(1mm~3mm),据此我们可以计算基础振动的最大加速度(amax=4π2f2?A=10.87g);
·对显示效果影响最大的是显示器件平面内的平面运动;
·振动多发生在便携设备上。
针对这种振动最简单的测量方法是实时测得振动的加速度a,然后对其作时间的二次积分得到基础振动的绝对位移值,这种方法不适合做长时间的测量,因为积分的起始点选择可靠性和加速度的噪声会使长时间的积分运算后误差放大。现在问题归纳为对一个加速度a<10.87的振动进行实时测量,并对加速度a作二次积分计算位移值。其次,是如何实时输出具有相反方向偏移量的动态图像。这涉及到两个速度:处理器的运算速度和显示器件的响应速度。因为实时动态图像的显示需要很大的计算量(处理每秒钟40帧的128×64的单色图像就需要每秒40 kBytes的处理量,这对MCU是个较大的挑战);普通的LCD屏幕也要有较长的响应延时,刷新一幅128×64的单色图像就需要1024×72μs=73.7ms(ST7920),这简直无法实现图像的动态显示。还有一个问题是显示模块与信源的通讯,模块化设计要有方便的数据接口以适应不同的要求,还要考虑到显示模块长期的振动会使通讯电缆造成疲劳损坏。
设计概述
基础振动的绝对位移值的测量
上文提到,基础振动的绝对位移值的测量可归纳为对一个加速度 a<10.87的振动进行实时测量,并对加速度a作二次积分计算位移值。本系统中加速度传感器采用低量程三轴向加速度传感器MMA7260QT,最大量程为±6g,响应频宽为fXY=350Hz、fZ=150Hz,MMA7260QT的敏感方向如图3所示,XY轴输出电压与芯片平面内的加速度成比例。
因为所要测量的加速度值和重力加速度值在一个量级,所以要考虑重力加速度的影响。让传感器平面平行于显示器件平面(如图4中的ABC平面为显示器平面,平面为水平面),初始位置时传感器各轴所测得的加速度分量aX0、aY0、aZ0反映了显示器相对水平面的倾角(图4中的θ1、θ2)。如果显示器只在当前平面内做平动,aX0、aY0、aZ0就是X、Y、Z的加速度的常值分量;如果显示器还在当前平面内有转动,只有aZ0是Z轴加速度的常值分量,aX0、aY0是随转角θ1、θ2而变的变量;如果显示器Z轴与铅垂线夹角还有变化,aZ0也是随转角θ1而变的变量。第一种情形的处理比较简单,直接将aX0、aY0、aZ0作为初始位置静止的初值,是积分不变量,进行二次积分即可得到位置;第二、三种情形处理较为复杂,要将aX0、aY0、aZ0作为初始位置运动的初值,也看作积分不变量,但是进行二次积分时要知道初始位置的运动参数,这要选择振动加速度的极值点(此时速度为零)作为运动的起始点开始积分,当然这种算法会稍微复杂。
还要考虑加速度的噪声会因为积分而被放大,使积分结果不准。加速度噪声的来源有:传感器本身的噪声、周边电路的电磁串扰、电源的波动、负载的波动(OLED的功耗与被点亮的点数成比例)。MMA7260QT传感器内部集成信号电路输出纹波较小(nRMS=4.7mVrms),为了滤去由于电磁干扰等引起的高频噪声,给系统加一个通频带在50Hz内的RC低通滤波器。由于模拟滤波器难以调整,系统的软件还加入了简单而且快速的数字惯性滤波器,能很好地消除周期性干扰和较宽频率的随机干扰信号。
实时输出具有相反方向偏移量的动态图像
上文已述及处理器的运算速度和显示器件的响应速度是两个关键。本系统显示器件选择OLED器件即有机发光二极管(Organic Light-Emitting Diode,OLED)该显示器件具有轻薄、易携、全彩、高亮度、省电、视角宽广及高应答速度等优点,为未来人机互动的接口开启了新的纪元,如今采用OLED作为显示器件的电子产品几乎已经普及。
本系统所采用的OLED显示材料的响应时间在μs量级,OLED器件的驱动芯片SSD1303的并行总线写入时间仅为300ns,因此总的响应时间(包括驱动芯片的延迟和OLED材料的延迟)仍然是μs,只要MCU速度足够快,是完全能实现图像的动态显示的。另外SSD1303支持垂直偏移指令和水平滚动指令,因此只需将GDDRAM一次写满,图像需要平动时仅需要写一条偏移或滚动指令,而不是刷新整个GDDRAM。
本系统所采用的微控制器MC9S08QG8工作频率高达20MHz,有8kBytes的FLASH存储器,512Bytes的RAM。如果处理器仅用来完成图像数据的变换和GDDRAM的刷新是没有问题的,但是处理器还要进行数字滤波等处理,难以完成所有的工作,因此系统采用偏移或滚动指令来实现平动。
显示模块与信源的通讯
为了方便与信源接口,本系统采用MC9S08QG8自带的SPI控制器,提供SPI接口作为信号输入通道。考虑到显示模块可能工作在比较恶劣的场合,通讯线缆连接固定的信源和振动的显示模块,会因为长期的弯曲而疲劳破坏,本系统特意设计集成了单片射频收发芯片,可以进行短距离无线数据传输。单片射频收发芯片采用挪威Nordic VLSI公司推出的单片射频收发芯片nRF905,它能简单地实现200m范围内的传输速率在100kb/s内的数据传输。
硬件描述
本系统的硬件框图如图5所示。整个硬件系统由微控制器电路、加速度传感器电路、滤波器电路、OLED电路、射频收发电路和稳压电路组成。
本系统所设计的微控制器电路如图6所示,MC9S08QG8包含上电复位电路(POR)和内部时钟源(ICS),这会简化微控制器电路且减少外部时钟电路造成的高频干扰。MC9S08QG8具有单线的背景调试接口(BDM),能够进行实时总线捕捉,系统采用BDM进行系统调试并附加LED作为工作指示。
OLED电路
本系统如图7所示,是用双色OLED12864显示屏,采用SSD1303驱动。支持64级亮度控制,工作电压在2.4V-3.5V之间,最大列电极输出电流320μA,最大行电极吸入电流45mA,单色256级对比度控制,内置振荡器,垂直、水平滚动显示支持。OLED的片选端接到PA0,数据输入端与加速度采集端分时复用。由于本系统不需要读GDDRAM,为了节省I/O,将RD、RES端置高。
射频收发电路
射频收发电路如图8所示,采用挪威Nordic VLSI公司推出的单片射频收发模块nRF905,工作频率覆盖433/868/915MHz三个国际通用的ISM(工业、科学和医学)频段,可用在需要多信道工作的特殊场合;它是GMSK调制,抗干扰能力强,适合工业控制场合。采用DSS+PLL频率合成技术,频率稳定性极好;灵敏度高(达到+100dBm);最大发射功率达+10dBm;使用距离最远可达1000米。工作电压低(1.9V~3.6V),功耗小(待机状态仅为1μA),以+10dBm的输出功率发射时电流只有11mA,工作于接收模式时的电流为12.5mA,并且内建空闲模式与关机模式,易于实现节能。工作速率最高可达100kb/s,外围元件少(仅10个),基本无需调试。SPI控制脚接到MC9S08QG8的SPI脚上,接收数据完成脚DR接MC9S08QG8的外部中断请求脚(IRQ),JP3用来选择发送/接收模式。
软件描述
系统软件主要包括初始化模块、刷新GDDRAM模块、读取加速度模块、数字滤波模块、极值判断模块、积分模块、输出偏移量模块和中断处理模块。程序的流程如图9,具体的程序实现这里不作赘述。