您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 项目/工程管理 > 飞思卡尔-加速度计MMA7660---红树伟业
一、简介MMA7660是-1.5g~1.5g范围的XYZ三轴收到到的加速度大小,由数字IIC输出,是非常低功耗、小形容性MEMS传感器,具有低通滤波器,用于0g和增益误差的补偿以及用户可配置的转化成6位数值。模拟电压为2.4-3.6V,数字工作电压1.71-3.6V,可进行三轴取向/运动的检测,广泛应用与手机、PDA、便携PC的防盗、游戏的运动检测等由于MMA7660比较低端,因此也只有6BIT的精度,而且输出值上还会有3个刻度的误差,因此在值的输出上,必须经过一个软件的均值滤波处理。一般来说,如果传感器只是应用于方位检测的话,8个值的滤波就够了。而用于动作检测的话,一般使用32阶的均值滤波。MMA7660的采用IIC的接口。在读取XYZ坐标的时候,最好采用的就是MultipleByteRead的方式,这样才能保证XYZ三个坐标是同一次采样的结果。如果分开读取,则有可能读取到不同组的采样数据。二、工作原理:MMA7660是一种电容式g-sensor.电容式g-sensor大多为欧美厂商,其技术是在wafer的表面做出梳状结构,当产生动作时,由侦测电容差来判断变形量,反推出加速度的值.与压阻式不同的是,电容式很难在同一个结构中同时感测到三个轴(X,Y,Z)的变化,通常都是X,Y和Z分开来的,(这也就是为什么当板子水平放置时,无论如何改变X,Y的位置,都不会有中断产生,因为这时它只能检测Z轴的变化,X,Y的变化它检测不到,只有当我们将板子倾斜一个角度后才能检测X,Y的变化).而压阻式在同一个结构就能感测到三个轴的变化.MMA7660加速度传感器主要由两部分组成:G-单元和信号调理ASIC电路(见上图)。G-单元是机械结构,它是用半导体制作技术、有多晶硅半导体材料制成,并且是密封的,图中的积分、放大、滤波、温度补偿、控制逻辑和EEPROM相关电路、振荡器、始终生成器、以及自检等电路组成,完成G-单元测量的电容值到电压输出的转换G-单元的等效电路如上图所示,它相当于在两个固定的电容板中间放置一个可移动的极板。当有加速度作用于系统时,中间极板偏离静止位置。用中间极板偏离知之为止的距离测量加速度,中间极板与其中一个固定极板的距离增加,同时与另一个固定极板的距离减少,且距离变化值相等。距离的变化使得两个极板间的电容改变(如图)。信号调理ASIC电路将G-单元测量的两个电容值转换成加速度值,并使加速度与输出电压成正比。当测量完毕后,在INT1/INT2输出高电平,用户可以通过IIC和SPI接口读取MMA7660内部的寄存器的值,判断运动的方向。自检单元用于保证G-单元和加速计芯片中的电路工作正常,输出电压成比例。三、工作模式:MMA7660主要有三种工作模式.(MMA7660有10个寄存器可供设置其工作模式,采样速率,中断使能等。)1).Standby(待机)模式此时只有I2C工作,接收主机来的指令.该模式用来设置寄存器.也就是说,要想改变MMA7660的任何一个寄存器的值,必须先进入Standby模式.设置完成后再进入Active或Auto-Sleep模式.2).ActiveandAuto-Sleep(活动并且Auto-Sleep)模式MMA7660的工作状态分两种,一种是高频度采样,一种是低频度采样.为什么这样分呢,为了节省功耗,但是在活动时又保持足够的灵敏度.所以说MMA7660的Active模式其实又分两种模式,一种是纯粹的Active模式,即进了Active模式后一直保持高的采样频率,不变.还有一种是Active&Auto-Sleep模式,就是说系统激活后先进入高频率采样,经过一定时间后,如果没检测到有活动,它就进入低频率采样,所以就叫做Auto-Sleep,它不是睡眠模式,它只是降低采样频率.MMA7660有两种工作模式,一个为Auto-Sleep,即Running模式。在该模式下,传感器可以配置较高的采样率。3).Auto-Wake(自动唤醒)模式Auto-Sleep后就进入低频率采样模式,这种模式就叫做Auto-Wake摸式,即自动唤醒模式.值得注意的是,该模式并非真正的休眠模式,而只是低速采样模式。在该模式下,能够有效地降低芯片的运行功耗。四、管脚介绍四、初始化:六、模块原理图七、模块接线图简图八、参考程序/**************************************起始信号**************************************/voidIIC_Start(){SDA=1;//拉高数据线SCL=1;//拉高时钟线Delay5us();//延时SDA=0;//产生下降沿Delay5us();//延时SCL=0;//拉低时钟线}/**************************************停止信号**************************************/voidIIC_Stop(){SDA=0;//拉低数据线SCL=1;//拉高时钟线Delay5us();//延时SDA=1;//产生上升沿Delay5us();//延时}/**************************************发送应答信号入口参数:ack(0:ACK1:NAK)**************************************/voidIIC_SendACK(bitack){SDA=ack;//写应答信号SCL=1;//拉高时钟线Delay5us();//延时SCL=0;//拉低时钟线Delay5us();//延时}/**************************************接收应答信号**************************************/bitIIC_RecvACK(){SCL=1;//拉高时钟线Delay5us();//延时CY=SDA;//读应答信号SCL=0;//拉低时钟线Delay5us();//延时returnCY;}/**************************************向IIC总线发送一个字节数据**************************************/voidIIC_SendByte(BYTEdat){BYTEi;for(i=0;i8;i++)//8位计数器{dat=1;//移出数据的最高位SDA=CY;//送数据口SCL=1;//拉高时钟线Delay5us();//延时SCL=0;//拉低时钟线Delay5us();//延时}IIC_RecvACK();}/**************************************从IIC总线接收一个字节数据**************************************/BYTEIIC_RecvByte(){BYTEi;BYTEdat=0;SDA=1;//使能内部上拉,准备读取数据,for(i=0;i8;i++)//8位计数器{dat=1;SCL=1;//拉高时钟线Delay5us();//延时dat|=SDA;//读数据SCL=0;//拉低时钟线Delay5us();//延时}returndat;}//*********************************voidMMA7660_write(ucharREG_Address,ucharREG_data){IIC_Start();//起始信号IIC_SendByte(SlaveAddress);//发送设备地址+写信号IIC_SendByte(REG_Address);//内部寄存器地址IIC_SendByte(REG_data);//内部寄存器数据IIC_Stop();//发送停止信号Delay5us();//延时}//********单字节读取*****************************************ucharMMA7660_read(ucharREG_Address){ucharREG_data;IIC_Start();//起始信号IIC_SendByte(SlaveAddress);//发送设备地址+写信号IIC_SendByte(REG_Address);//发送存储单元地址,从0开始IIC_Start();//起始信号IIC_SendByte(SlaveAddress+1);//发送设备地址+读信号REG_data=IIC_RecvByte();//读出寄存器数据IIC_SendACK(1);IIC_Stop();//停止信号returnREG_data;}voidMMA7660_Startup(void){MMA7660_write(MMA7660_MODE,0x00);//standmodefirsttomodifytheregistersMMA7660_write(MMA7660_SPCNT,0);//disablesleepcountMMA7660_write(MMA7660_INTSU,0x84);//enabletapandshakexdetectioninterruptMMA7660_write(MMA7660_PDET,0x75);//enablez_axistapdetection10101countsMMA7660_write(MMA7660_SR,0);//SPSregisters(samplespersecond)MMA7660_write(MMA7660_PD,0x17);//tap/pulsedebouncecountregistersMMA7660_write(MMA7660_MODE,0x41);//gotoactivemodeintpush_pull}九、模块说明红树伟业推出的MMA7660模块,结构简单,尺寸小,不占据空间。VCC采用5V电源供电,内部有622稳压芯片,转化成3.3V供给芯片MMA7660。SCL和SDA为IIC总线上的时钟和信号线,时钟为高时,读取数据。在上面的程序上,已经写的非常清楚了。MMA7660特点鲜明,比起MMA7361来说,数据读取速度要快,这点对于C组模型车来说是非常重要的,采集速度越快,反馈速度越快,小车才能走得直。而MMA7455是MMA7660的升级版,精度更高,且有SPI通信功能,速度更快。MMA7660的INT为中断引脚,当数据准备发送时候,会发出信号给MCU。模块的介绍就到此结束,下期再推出MMA7455的介绍,欢迎大家一起来讨论,关注我们红树伟业,一起学习,一起进步,你们的批评与建议,我们才能做到更好。
本文标题:飞思卡尔-加速度计MMA7660---红树伟业
链接地址:https://www.777doc.com/doc-7113547 .html