一、模块介绍 模块的主芯片运用freescale公司的MMA7455L芯片,模块设计在主芯片的基础上加入了简单的外围电路,使用者只需做简单的改动就可以在I2C和SPI两种接口方式之间简单变换,不需另外加入电路,让使用者使用起来更加方便。它可以实现基于运动的功能,如游戏控制、手持终端和倾斜滚动的自由落体硬盘保护等。具有更高的封装高度、但价格却更低。 MMA7455L是一款三轴的加速度传感器,它能检测物体的运动和方向,它根据物体的运动和方向来改变输出信号的电压值。各个轴在不运动或者失重的状态下(0g),其输出为1.65V。如果沿着某个方向运动,或者受到重力作用,输出电压就会根据设定的灵敏度相应的改变。然后通过I2C或者SPI的方式读取代表物体运动和方向的数值 MMA7455L是一款数字输出、低功耗、紧凑型电容式微机械加速度计,具有信号调理、低通滤波器、温度补偿、自测、可配置通过中断引脚(INT1 或 INT2)检测 0g、以及脉冲检测(用于快速运动检测)等功能。0g偏置和灵敏度是出厂配置,无需外部器件。客户可使用指定的0g寄存器和g-Select量程选择对0g偏置进行校准,量程可通过命令选择 3个加速度范围(2g/4g/8g)。 二、XYZ三轴加速度传感器的工作原理简介 MMA7455L加速度传感器主要由两部分组成:G-单元和信号调理ASIC电路(见上图)。G-单元是机械结构,它是用半导体制作技术、有多晶硅半导体材料制成,并且是密封的,上图中的积分、放大、滤波、温度补偿、控制逻辑和EEPROM相关电路、振荡器、始终生成器、以及自检等电路组成,完成G-单元测量的电容值到电压输出的转换。 G-单元的功能等效于上图所示,它相当于在两个固定的电容板中间放置一个可移动的极板。当有加速度作用于系统时,可移动的极板偏离起始位置。可移动极板与其中一个固定极板的距离增加,同时与另一个固定极板的距离减少,距离的变化使两个两个等效电容的值发生变化(如图)。总结而言,G-单元的原理是利用可移动的极板偏离起始位置的距离,来改变两个电容的值。 信号调理ASIC电路将G-单元测量的两个电容值转换成加速度值,并使加速度与输出电压成正比。当测量完毕后,在INT1/INT2输出高电平,用户可以通过I2C和SPI接口读取MMA7455L内部的寄存器的值,判断运动的方向。自检单元用于保证G-单元和加速计芯片中的电路工作正常,输出电压成比例。 三、MMA7455L引脚说明 四、加速度模块引脚说明 五、模块三轴分布示意图与典型加速度下数字量输出 六、接线原理图及软件程序控制 传统的加速度传感器一般为模拟输出,用户需要A/D采样后,将模拟量转换为数字量,再进行数据处理。MMA7455提供数字接口,用户直接读取MMA7455L的寄存器得到输出数字量,方便用户的数据处理,在没有A/D接口的MCU上照常使用。I2C总线通讯可以使用MCU硬件I2C单元,也可以使用模拟I2C通讯,对MCU的支持更加广泛。 下图为模块与控制器连接示意图,图中的电容电阻模块已经集成,不用再加。 (一) I2C通讯模式 1、与控制器的接线示意图 2、软件控制时序 <单字节读取> <多字节读取> <单字节写入> <多字节写入> (二)SPI通讯模式 (1)与控制器的接线示意图 (2)软件控制 <四线模式_八位寄存器读> <三线模式_八位寄存器读> <三线模式_八位寄存器写> 七、模块电路原理图 八、参考例程(I2C通讯模式例程) /*******************************************************************/ /************** I2C通信部分 ***************/ /*******************************************************************/ void iic_start() //函数功能:I2C通信开始 { sda=1; iic_delay(); scl=1; iic_delay(); sda=0; iic_delay(); } void iic_stop() //函数功能:I2C通信停止 { sda=0; iic_delay(); scl=1; iic_delay(); sda=1; iic_delay(); } void iic_ack() //函数功能:I2C通信查应答位 { sda=1; scl=1; iic_delay(); ack_sign=sda; scl=0; } void iic_write_byte(uchar wdata)//函数功能:向I2C从机写入一个字节 { uchar i,temp,temp1; temp1=wdata; for(i=0;i<8;i++) { scl = 0; iic_delay(); temp=temp1; temp=temp&0x80; if(temp==0x80) sda=1; else sda=0; iic_delay(); scl=1; iic_delay(); scl=0; iic_delay(); temp1=temp1<<1; } } char iic_read_byte(void) //函数功能:从I2C从机中读出一个字节 { uchar x; char data_data; for(x=0;x<8;x++) { data_data=data_data<<1; sda=1; iic_delay(); scl=0; iic_delay(); scl=1; iic_delay(); if(sda==1) data_data|=0x01; //else // data_data&=0xfe; } return data_data; } void iic_write(uchar byte_add,uchar wdata)//函数功能:按地址写入一字节数据 { uchar t; t=(IIC_WRITE<<1); iic_start(); iic_write_byte(t); iic_ack(); iic_write_byte(byte_add); iic_ack(); iic_write_byte(wdata); iic_ack(); iic_stop(); } char iic_read(uchar byte_add) //函数功能:按地址读出一字节数据 { uchar t; char x; t=(IIC_WRITE<<1); iic_start(); iic_write_byte(t); iic_ack(); iic_write_byte(byte_add); iic_ack(); t=((IIC_READ<<1)|0x01); iic_start(); iic_write_byte(t); iic_ack(); x=iic_read_byte(); iic_ack(); iic_stop(); return x; } 十、模块说明 红树伟业推出的MMA7455L模块,设计使用官方推荐设计,板卡线路经过高电磁兼容设计和优化,具有输出精确,体积小,工作可靠,各种标识清晰,扩展性好等特点。模块外围电路简单,原理易懂,使用方便可靠。有I2C和SPI两种通讯模式,广泛满足各类MCU与之链接。它是MMA7660的升级版,精度更高,采集速度更快,为小车比赛有较高要求的朋友提供一个新的解决方案。 本期模块介绍刀子结束,欢迎大家一起关注我们红树伟业,我们共同讨论,共同学习,共同进步,你们的批评与建议,我们才能做到更好。 |