MMA845xQ系列是飞思卡公司出品的一系列加速度传感器芯片,通过测量XYZ三轴的加速度可以检测倾角,自由落体,翻转,脉冲,振动等一系列运动状态。
我用的是14位精度的MMA8451Q。单片机型号为STC8A8K64

通过读取倾角寄存器获得X,Y,Z三个方向的重力加速度向量值,根据三角函数公式,计算传感器与自然坐标轴的夹角。
另外初步测试了偏差校正功能。

I2C读写模块 MMA8451.c/MMA8451.h

MMA8451.h

#ifndef __MMA8451_H
#define __MMA8451_Hextern unsigned char BUF[6];void Init_MMA8451();
void Multiple_read_MMA8451();
unsigned char Single_Read_MMA8452(unsigned char REG_Address);
void Single_Write_MMA8451(unsigned char REG_Address,unsigned char REG_data);
#endif

MMA8451.c

#include "MMA8451.h"
#include "intrins.h"
#include "config.h"#define   uchar unsigned char
#define   uint unsigned inttypedef unsigned char BYTE;
typedef unsigned int WORD;
typedef unsigned long int LWORD;sbit      SCL=P1^1;      //IIC时钟引脚定义 根据自己线路板连接
sbit      SDA=P1^0;      //IIC数据引脚定义#define    SlaveAddress   0x38BYTE BUF[6]; //数据区 /**************************************
延时5微秒(STC90C52RC@12M)
不同的工作环境,需要调整此函数,注意时钟过快时需要修改
当改用1T的MCU时,请调整此延时函数
**************************************/
void Delay5us()
{_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
}/**************************************
延时5毫秒(STC90C52RC@12M)
不同的工作环境,需要调整此函数
当改用1T的MCU时,请调整此延时函数
**************************************/
void Delay5ms()
{WORD n = 560;while (n--);
}/**************************************
起始信号
**************************************/
void MMA8451_Start()
{SDA = 1;                    //拉高数据线SCL = 1;                    //拉高时钟线Delay5us();                 //延时SDA = 0;                    //产生下降沿Delay5us();                 //延时SCL = 0;                    //拉低时钟线
}/**************************************
停止信号
**************************************/
void MMA8451_Stop()
{SDA = 0;                    //拉低数据线SCL = 1;                    //拉高时钟线Delay5us();                 //延时SDA = 1;                    //产生上升沿Delay5us();                 //延时
}/**************************************
发送应答信号
入口参数:ack (0:ACK 1:NAK)
**************************************/
void MMA8451_SendACK(bit ack)
{SDA = ack;                  //写应答信号SCL = 1;                    //拉高时钟线Delay5us();                 //延时SCL = 0;                    //拉低时钟线Delay5us();                 //延时
}/**************************************
接收应答信号
**************************************/
bit MMA8451_RecvACK()
{SCL = 1;                    //拉高时钟线Delay5us();                 //延时CY = SDA;                   //读应答信号SCL = 0;                    //拉低时钟线Delay5us();                 //延时return CY;
}/**************************************
向IIC总线发送一个字节数据
**************************************/
void MMA8451_SendByte(BYTE dat)
{BYTE i;for (i=0; i<8; i++)         //8位计数器{dat <<= 1;              //移出数据的最高位SDA = CY;               //送数据口SCL = 1;                //拉高时钟线Delay5us();             //延时SCL = 0;                //拉低时钟线Delay5us();             //延时}MMA8451_RecvACK();
}/**************************************
从IIC总线接收一个字节数据
**************************************/
BYTE MMA8451_RecvByte()
{BYTE i;BYTE dat = 0;SDA = 1;                    //使能内部上拉,准备读取数据,for (i=0; i<8; i++)         //8位计数器{dat <<= 1;SCL = 1;                //拉高时钟线Delay5us();             //延时dat |= SDA;             //读数据               SCL = 0;                //拉低时钟线Delay5us();             //延时}return dat;
}//******单字节写入*******************************************void Single_Write_MMA8451(uchar REG_Address,uchar REG_data)//2a 01
{MMA8451_Start();                  //起始信号MMA8451_SendByte(SlaveAddress);   //发送设备地址+写信号MMA8451_SendByte(REG_Address);    //内部寄存器地址MMA8451_SendByte(REG_data);       //内部寄存器数据MMA8451_Stop();                   //发送停止信号
}//********单字节读取*****************************************uchar Single_Read_MMA8452(uchar REG_Address)
{  uchar REG_data;MMA8451_Start();                          //起始信号MMA8451_SendByte(SlaveAddress);           //发送设备地址+写信号MMA8451_SendByte(REG_Address);                   //发送存储单元地址,从0开始    MMA8451_Start();                          //起始信号MMA8451_SendByte(SlaveAddress+1);         //发送设备地址+读信号REG_data=MMA8451_RecvByte();              //读出寄存器数据MMA8451_SendACK(1);   MMA8451_Stop();                           //停止信号return REG_data;
}//*********************************************************
//
//连续读出MMA8451内部加速度数据,地址范围0x01~0x06
//
//*********************************************************
void Multiple_read_MMA8451()//Multiple_Read_MMA8451();
{   uchar i;MMA8451_Start();                          //起始信号MMA8451_SendByte(SlaveAddress);           //发送设备地址+写信号MMA8451_SendByte(0x01);                   //发送存储单元地址,从0x01开始  MMA8451_Start();                          //起始信号MMA8451_SendByte(SlaveAddress+1);         //发送设备地址+读信号for (i=0; i<6; i++)                      //连续读取6个地址数据,存储中BUF{BUF[i] = MMA8451_RecvByte();          //BUF[0]存储0x32地址中的数据if (i == 5){MMA8451_SendACK(1);                //最后一个数据需要回NOACK}else{MMA8451_SendACK(0);                //回应ACK}}MMA8451_Stop();                          //停止信号Delay5ms();
}//*****************************************************************//初始化MMA8451,根据需要请参考pdf进行修改************************
void Init_MMA8451()
{Single_Write_MMA8451(0x2a,0x01);   //Single_Write_MMA8451(0x2b,0x02);   //}

V1:获取倾角 计算atan值
main.c


/*********************************************
P10 数据口 P11时钟口
P0,P2,接数码管倾角寄存器0x01-0x06
读取数据为重力加速度在传感器坐标轴上分量
通过计算过程转换为自然XYZ坐标轴夹角tan值
当tan值在极值(无穷大)一侧时,改用cot值计算
***********************************************/#include "config.h"
//#include "MPU6050.h"
#include "MMA8451.h"
#include "display.h"
#include <math.h>void delay_ms(u8 ms);int xa,ya,za;//*********************************************************************
//****************角度计算*********************************************
//*********************************************************************int MMA8451_Get_Angle(long x,long y,long z,u8 dir);
void MMA8451_Add_Angle2(int x,int y,int z);
void MMA8451_Get_Angle3(int x,int y,int z);// ===================== 主函数 =====================
void main(void)
{int x,y,z;//所有I/O口全设为准双向,弱上拉模式P0M0=0xff;   P0M1=0xff;P1M0=0xff;  P1M1=0xff;P2M0=0xff;  P2M1=0xff;P3M0=0xff;  P3M1=0xff;P4M0=0xff;  P4M1=0xff;P5M0=0xff;  P5M1=0xff;P6M0=0xff;  P6M1=0xff;P7M0=0xff;  P7M1=0xff;//P1=0x00;P1M0=0xfc;   P1M1=0xfc; //时钟口1.1 数据口1.0 11111100 11111100P0 = 0xFF;P0M0=0x00; P0M1=0x00;    //数码管数据通道 00000000 00000000 常规P2 = 0xFF;P2M0=0x00; P2M1=0x00;   //数码管位选通道 00000000 00000000 常规initLedDisplay();delay_ms(100);Init_MMA8451();  //初始化MPU-6050delay_ms(100);EA = 1; //允许总中断while(1){//   Init_MMA8451();    //  delay_ms(100);delay_ms(100);Multiple_read_MMA8451();x=(unsigned int)BUF[0]<<8|BUF[1];y=(unsigned int)BUF[2]<<8|BUF[3];z=(unsigned int)BUF[4]<<8|BUF[5];//hexstr[7]=(BUF[0]&0xf0)>>4;//hexstr[6]=(BUF[0]&0x0f);//hexstr[5]=16;//hexstr[4]=(BUF[2]&0xf0)>>4;//hexstr[3]=(BUF[2]&0x0f);//hexstr[2]=18;//hexstr[1]=(BUF[4]&0xf0)>>4;//hexstr[0]=(BUF[4]&0x0f);//hexstr[1]=(BUF[5]&0xf0)>>4;//hexstr[0]=(BUF[5]&0x0f);//  x=(char)BUF[0];//   y=(char)BUF[2];// z=(char)BUF[4];xa=MMA8451_Get_Angle(x,y,z,1);ya=MMA8451_Get_Angle(x,y,z,2);za=MMA8451_Get_Angle(x,y,z,0);hexstr[7]=ya/1000;//  if(ya<0)//     hexstr[7]=16,ya=-ya;//  else //     hexstr[7]=17;hexstr[6]=(ya%1000)/100;hexstr[5]=(ya%100)/10;hexstr[4]=ya%10;hexstr[3]=xa/1000;//    if(za<0)//     hexstr[3]=16,za=-za;//  else//      hexstr[3]=17;hexstr[2]=(xa%1000)/100;hexstr[1]=(xa%100)/10;hexstr[0]=xa%10;showLedDisplay();delay_ms(3000);}
}int abs_round(double v){return (int)(v>=0?(v+0.5):(v-0.5));
}void MMA8451_Get_Angle3(int x,int y,int z)
{double temp,xd,yd,zd;temp = sqrt((double)(x*x+y*y+z*z));yd = y/temp;if(yd<=0.707 && yd>=-0.707){yd = asin(yd);ya = yd*180/3.1416+0.5;}else{yd = acos(yd);ya = yd*180/3.1416-0.5;ya=90-ya;}zd = z/temp;if(zd<=0.707 && zd>=-0.707){zd = asin(zd);za = zd*180/3.1416+0.5;}else{zd = acos(zd);za = zd*180/3.1416-0.5;za=90-za;}xd = x/temp;if(xd<=0.707 && xd>=-0.707){xd = asin(xd);xa = xd*180/3.1416+0.5;}else{xd = acos(xd);xa = xd*180/3.1416-0.5;xa=90-xa;}
}void MMA8451_Add_Angle2(int x,int y,int z)
{double temp,xd,yd,zd;temp = sqrt((double)(x*x+y*y+z*z));zd = asin(z/temp)*180/3.1416; //与自然Z轴的角度xd = asin(x/temp)*180/3.1416; //与自然X轴的角度yd = asin(y/temp)*180/3.1416; //与自然Y轴的角度za += (int)(zd+0.5);ya += (int)(yd+0.5);xa += (int)(xd+0.5);}int MMA8451_Get_Angle(long x,long y,long z,u8 dir)
{double temp;double res=0;switch(dir){case 0://与自然Z轴的角度temp = sqrt((double)(x*x+y*y));if(temp<abs(z)){ temp=temp/z;res=atan(temp);}else{temp= z/temp;res=atan(temp);if(res>=0)res = 1.5708 - res;elseres = - 1.5708 - res;}res=atan(temp);break;case 1://与自然X轴的角度temp = sqrt((double)(y*y+z*z));if(temp>=abs(x)){ temp=x/temp;res=atan(temp);}else{temp= temp/x;res=atan(temp);if(res>=0)res = 1.5708 - res;elseres = - 1.5708 - res;}break;case 2://与自然Y轴的角度temp = sqrt((double)(x*x+z*z));if(temp>=abs(y)){ temp=y/temp;res=atan(temp);}else{temp= temp/y;res=atan(temp);if(res>=0)res = 1.5708 - res;elseres = - 1.5708 - res;}break;}//    if(res<0) res = 1.5708+res;return res*1800/3.1416;//把弧度转换成角度
}void  delay_ms(u8 ms)
{u16 i;do{i = MAIN_Fosc / 13000;while(--i) ;   //13T per loop}while(--ms);
}

V2:加上偏差校正,可抵消因机械误差引起的14度以内的微小角度偏移。

main.c


/*********************************************
P10 数据口 P11时钟口
P0,P2,接数码管P30 P31 P32 P33接触点开关P30 清零校准寄存器重新计算校正值
P31 获取当下倾角值
P32 清零校准计算器
P33 将最近一次计算的校正值写到校准寄存器
***********************************************/
#include "config.h"
//#include "MPU6050.h"#include "MMA8451.h"
#include "display.h"#include <math.h>int MMA8451_Get_Angle(long x,long y,long z,u8 dir);void displayAngle();/* ============================================= */void    delay_ms(u8 ms);unsigned char hexstr_cp[8];int xa,ya,za;// ===================== 主函数 =====================
void main(void)
{unsigned char reg;unsigned int ux,uy,uz;int sx,sy,sz;//所有I/O口全设为准双向,弱上拉模式P0M0=0xff;    P0M1=0xff;P1M0=0xff;  P1M1=0xff;P2M0=0xff;  P2M1=0xff;P3M0=0xff;  P3M1=0xff;P4M0=0xff;  P4M1=0xff;P5M0=0xff;  P5M1=0xff;P6M0=0xff;  P6M1=0xff;P7M0=0xff;  P7M1=0xff;//P1=0x00;P1M0=0xfc;   P1M1=0xfc; //时钟口1.1 数据口1.0 11111100 11111100P0 = 0xFF;P0M0=0x00; P0M1=0x00;    //数码管数据通道 00000000 00000000 常规P2 = 0xFF;P2M0=0x00; P2M1=0x00;   //数码管位选通道 00000000 00000000 常规P2 = 0xFF;P3M0=0x00;  P3M1=0x00;initLedDisplay();delay_ms(100);Init_MMA8451();   //初始化MPU-6050delay_ms(100);EA = 1; //允许总中断while(1){//   Init_MMA8451();    //  delay_ms(100);if(!P30){delay_ms(10);if(!P30){while(!P30);showdot = 0;delay_ms(100);reg = Single_Read_MMA8452(0x2A); reg &= 0xFE; Single_Write_MMA8451(0x2A, reg); delay_ms(100);Single_Write_MMA8451(0x2F,0x00);Single_Write_MMA8451(0x30,0x00);Single_Write_MMA8451(0x31,0x00);delay_ms(100);reg = Single_Read_MMA8452(0x2A); reg |= 0x01; Single_Write_MMA8451(0x2A, reg);delay_ms(100);Multiple_read_MMA8451();/*hexstr[7]=(BUF[0]&0xf0)>>4;hexstr[6]=(BUF[0]&0x0f);hexstr[5]=(BUF[1]&0xf0)>>4;hexstr[4]=(BUF[1]&0x0f);hexstr[3]=(BUF[2]&0xf0)>>4;hexstr[2]=(BUF[2]&0x0f);hexstr[1]=(BUF[3]&0xf0)>>4;hexstr[0]=(BUF[3]&0x0f);*/displayAngle();showLedDisplay();hexstr_cp[0]=hexstr[0];hexstr_cp[1]=hexstr[1];hexstr_cp[2]=hexstr[2];hexstr_cp[3]=hexstr[3];hexstr_cp[4]=hexstr[4];hexstr_cp[5]=hexstr[5];hexstr_cp[6]=hexstr[6];hexstr_cp[7]=hexstr[7];ux=((unsigned int)BUF[0]<<8)|BUF[1];uy=((unsigned int)BUF[2]<<8)|BUF[3];uz=((unsigned int)BUF[4]<<8)|BUF[5];/*if(BUF[0]>0x7f){ux=(~ux+1)>>2;sx=ux/8;}else{sx=((~ux+1)>>2)/8;}if(BUF[2]>0x7f){uy=(~uy+1)>>2;sy=uy/8;}else{sy=((~uy+1)>>2)/8;}if(BUF[4]>0x7f){uz=(~uz+1)>>2;sz=(4069+uz)/8;}else{sz=(int)(4069-(uz>>2))/8;if(sz<0){sz+=256;}}*/if(BUF[0]>0x7f){                  ux=(~ux+1)>>2;sx=ux/8;}else{sx=~(ux>>2)+1;sx=sx/8;}if(BUF[2]>0x7f){uz=(~uz+1)>>2;sz=uz/8;}else{sz=~(uz>>2)+1;sz=sz/8;}if(BUF[4]>0x7f){uy=(~uy+1)>>2;sy=(4069+uy)/8;}else{sy=~(uy>>2)+1;sy=(4069+sy)/8;                }    /*delay_ms(100);reg = Single_Read_MMA8452(0x2A); reg &= 0xFE; Single_Write_MMA8451(0x2A, reg); delay_ms(100);Single_Write_MMA8451(0x2F,(char)sx);Single_Write_MMA8451(0x30,(char)sy);Single_Write_MMA8451(0x31,(char)sz);delay_ms(100);reg = Single_Read_MMA8452(0x2A); reg |= 0x01; Single_Write_MMA8451(0x2A, reg);delay_ms(100);reg = Single_Read_MMA8452(0x2F);hexstr[7]=(reg&0xf0)>>4;hexstr[6]=(reg&0x0f);hexstr[5]=0;reg = Single_Read_MMA8452(0x30);hexstr[4]=(reg&0xf0)>>4;hexstr[3]=(reg&0x0f);hexstr[2]=18;reg = Single_Read_MMA8452(0x31);hexstr[1]=(reg&0xf0)>>4;hexstr[0]=(reg&0x0f);showLedDisplay();*/delay_ms(3000);}}if(!P31){delay_ms(10);if(!P31){while(!P31);delay_ms(100);Multiple_read_MMA8451();/*hexstr[7]=(BUF[2]&0xf0)>>4;hexstr[6]=(BUF[2]&0x0f);hexstr[5]=(BUF[3]&0xf0)>>4;hexstr[4]=(BUF[3]&0x0f);hexstr[3]=(BUF[4]&0xf0)>>4;hexstr[2]=(BUF[4]&0x0f);hexstr[1]=(BUF[5]&0xf0)>>4;hexstr[0]=(BUF[5]&0x0f);*/displayAngle();showLedDisplay();delay_ms(3000);}}if(!P32){delay_ms(10);if(!P32){while(!P32);showdot = 0;delay_ms(100);reg = Single_Read_MMA8452(0x2A); reg &= 0xFE; Single_Write_MMA8451(0x2A, reg); delay_ms(100);Single_Write_MMA8451(0x2F,0x00);Single_Write_MMA8451(0x30,0x00);Single_Write_MMA8451(0x31,0x00);delay_ms(100);reg = Single_Read_MMA8452(0x2A); reg |= 0x01; Single_Write_MMA8451(0x2A, reg);/*delay_ms(100);reg = Single_Read_MMA8452(0x2F);hexstr[7]=(reg&0xf0)>>4;hexstr[6]=(reg&0x0f);hexstr[5]=0;reg = Single_Read_MMA8452(0x30);hexstr[4]=(reg&0xf0)>>4;hexstr[3]=(reg&0x0f);hexstr[2]=16;reg = Single_Read_MMA8452(0x31);hexstr[1]=(reg&0xf0)>>4;hexstr[0]=(reg&0x0f);*/hexstr[0]=0;hexstr[1]=0;hexstr[2]=0;hexstr[3]=0;hexstr[4]=0;hexstr[5]=0;hexstr[6]=0;hexstr[7]=0;showLedDisplay();delay_ms(3000);}}if(!P33){delay_ms(10);if(!P33){while(!P33);showdot = 1;delay_ms(100);reg = Single_Read_MMA8452(0x2A); reg &= 0xFE; Single_Write_MMA8451(0x2A, reg); delay_ms(100);Single_Write_MMA8451(0x2F,0x00);Single_Write_MMA8451(0x30,0x00);Single_Write_MMA8451(0x31,0x00);delay_ms(100);Single_Write_MMA8451(0x2F,(char)sx);Single_Write_MMA8451(0x30,(char)sy);Single_Write_MMA8451(0x31,(char)sz);delay_ms(100);reg = Single_Read_MMA8452(0x2A); reg |= 0x01; Single_Write_MMA8451(0x2A, reg);/*delay_ms(100);reg = Single_Read_MMA8452(0x2F);hexstr[7]=(reg&0xf0)>>4;hexstr[6]=(reg&0x0f);hexstr[5]=0;reg = Single_Read_MMA8452(0x30);hexstr[4]=(reg&0xf0)>>4;hexstr[3]=(reg&0x0f);hexstr[2]=17;reg = Single_Read_MMA8452(0x31);hexstr[1]=(reg&0xf0)>>4;hexstr[0]=(reg&0x0f);*/hexstr[0]=hexstr_cp[0];hexstr[1]=hexstr_cp[1];hexstr[2]=hexstr_cp[2];hexstr[3]=hexstr_cp[3];hexstr[4]=hexstr_cp[4];hexstr[5]=hexstr_cp[5];hexstr[6]=hexstr_cp[6];hexstr[7]=hexstr_cp[7];showLedDisplay();delay_ms(3000);}}}
}void displayAngle(){int x,y,z;x=(unsigned int)BUF[0]<<8|BUF[1];y=(unsigned int)BUF[2]<<8|BUF[3];z=(unsigned int)BUF[4]<<8|BUF[5];xa=MMA8451_Get_Angle(x,y,z,1);ya=MMA8451_Get_Angle(x,y,z,2);za=MMA8451_Get_Angle(x,y,z,0);//hexstr[7]=ya/1000;if(ya<0)hexstr[7]=16,ya=-ya;else hexstr[7]=17;hexstr[6]=(ya%1000)/100;hexstr[5]=(ya%100)/10;hexstr[4]=ya%10;//hexstr[3]=xa/1000;if(xa<0)hexstr[3]=16,xa=-xa;elsehexstr[3]=17;hexstr[2]=(xa%1000)/100;hexstr[1]=(xa%100)/10;hexstr[0]=xa%10;/*//hexstr[3]=za/1000;if(za<0)hexstr[3]=16,za=-za;elsehexstr[3]=17;hexstr[2]=(za%1000)/100;hexstr[1]=(za%100)/10;hexstr[0]=za%10;*/}int MMA8451_Get_Angle(long x,long y,long z,u8 dir)
{double temp;double res=0;switch(dir){case 0://与自然Z轴的角度temp = sqrt((double)(x*x+y*y));if(temp<abs(z)){ temp=temp/z;res=atan(temp);}else{temp= z/temp;res=atan(temp);if(res>=0)res = 1.5708 - res;elseres = - 1.5708 - res;}res=atan(temp);break;case 1://与自然X轴的角度temp = sqrt((double)(y*y+z*z));if(temp>=abs(x)){ temp=x/temp;res=atan(temp);}else{temp= temp/x;res=atan(temp);if(res>=0)res = 1.5708 - res;elseres = - 1.5708 - res;}break;case 2://与自然Y轴的角度temp = sqrt((double)(x*x+z*z));if(temp>=abs(y)){ temp=y/temp;res=atan(temp);}else{temp= temp/y;res=atan(temp);if(res>=0)res = 1.5708 - res;elseres = - 1.5708 - res;}break;}//    if(res<0) //res = 1.5708+res;return res*1800/3.1416;//把弧度转换成角度
}void  delay_ms(u8 ms)
{u16 i;do{i = MAIN_Fosc / 13000;while(--i) ;   //13T per loop}while(--ms);
}

PS:display.c是数码管显示模块,config.h来自STC例程。可以根据自己的外设环境改变配置。

加速度传感器芯片MMA8451Q初步——倾角计算与校准值相关推荐

  1. 溢出检测单符号位法_设计经验:如何用三轴加速度传感器检测倾斜角?

    本文介绍了三轴加速度传感器的特性,并通过一个典型的应用--检测倾斜角--对单轴.双轴和三轴加速度传感器进行了比较,并给出了选型建议. 在前两篇文章中,我们介绍了单/双轴加速度传感器在来检测倾斜角上的应 ...

  2. linux加速度传感器校准,加速度传感器校准方法及装置与流程

    本申请涉及传感器校准领域,具体而言,涉及一种加速度传感器校准方法及装置. 背景技术: 在移动终端中,导航软件的使用频率越来越高,比如说百度地图.高德导航等.目前,移动终端通常包含加速度传感器,在导航过 ...

  3. 与众不同 windows phone (18) - Device(设备)之加速度传感器, 数字罗盘传感器

    原文:与众不同 windows phone (18) - Device(设备)之加速度传感器, 数字罗盘传感器 [索引页] [源码下载] 与众不同 windows phone (18) - Devic ...

  4. 平方根计算在加速度传感器中的应用

    帮助实际使用场景中,用户手持传感器,不受正反面.侧面影响,准确识别动作. 平方根运算,可以解决加速度传感器,判断X.Y.Z任意方向的运动幅度. 下面展示原始数据及示平方根后的数据在曲线图中的展示. x ...

  5. ST公司 Lis2dh12 三轴加速度传感器,计算加速度值转成角度值

    目录 概述 项目上使用了一款Lis2dh12三轴加速度传感器.开发前要准备的工作. 1.原理图: 1.1.创建lis2dh12.c文件 1.2.在此重点说明,如果想调传感器的中断灵敏度,注意:关注1. ...

  6. 树莓派基础实验31:MPU6050陀螺仪加速度传感器实验

    一.介绍    MPU6050是世界上第一款也是唯一一款专为智能手机.平板电脑和可穿戴传感器的低功耗.低成本和高性能要求而设计的6轴运动跟踪设备.    它集成了3轴MEMS陀螺仪,3轴MEMS加速度 ...

  7. 带你了解加速度传感器的几种应用

    加速度传感器是一种能够测量加速力的电子设备.加速力也就是当物体在加速过程中作用在物体上的力.加速度传感器有两种:一种是角加速度传感器,是由陀螺仪改进过来的.另一种就是线加速度传感器.它也可以按测量轴分 ...

  8. android 三轴加速度传感器【转】

    一.手机中常用的传感器 在Android2.3 gingerbread系统中,google提供了11种传感器供应用层使用,具体如下:(Sensor类) #define SENSOR_TYPE_ACCE ...

  9. 基于三轴加速度传感器的计步算法

    基于三轴加速度传感器计步算法 By Sky.J 2018.08.08 概述 今天主要是想要分享利用三轴加速度传感器计步的一个算法步骤. 数据分析--->模型 这里拿到的是ADI公司的测试数据,可 ...

最新文章

  1. ECharts 图表导出
  2. [云炬ThinkPython阅读笔记]1.6 形式语言和自然语言
  3. 物理磁盘空间使用已满导致数据库hang起
  4. 微型计算机原理risc,微型计算机原理习题及解答-20210409003329.docx-原创力文档
  5. Yarn 国内加速,修改镜像源
  6. android 底部tab效果,Android 仿微信底部渐变Tab效果
  7. js 学习笔记(一)
  8. xml dtd 约束建立xml文档
  9. 『转』Dr.Web Security Space 8 – 免费3个月
  10. tomcat、netty以及nodejs的helloworld性能对比
  11. 计算机桌面壁纸希望,电脑用的励志的壁纸简约壁纸
  12. Linux 通配符 与 正则表达式 的区别与详解
  13. chrome 自动操纵谷歌小恐龙
  14. 整理了46个python人工智能库,详细介绍(含资源),建议收藏
  15. ACP.敏捷概念梳理1
  16. Linux内存管理之UMA模型和NUMA模型
  17. About Sealed
  18. 软件测试流程及主要内容
  19. Delphi写游戏外挂
  20. Python isdigit()方法能处理带符号的数字字符串么?

热门文章

  1. 基于控制主题的对话生成 相关论文总结
  2. 慢节奏的和府,能否掌握资本带来的“加速度”
  3. 从秋香,芳娜到不嫁国人的女大学生
  4. 华为C8815 ROOT 成功
  5. 烧录flash_烧录固件完成后,配置JFLASH让程序自动运行
  6. VC++游戏编程基础无法找到“d3d9.h”问题
  7. 开发工具---Eclipse 教程Ⅰ
  8. C语言handle对象对应java,c语言和java语言之间的关系到底是怎么样的,两种 体系?还是一种体系的不同阶段?还是其它的什么?...
  9. 计算机网络技术教程第3版课后答案,《计算机网络技术基础教程》课后习题答案刘四清版3.doc...
  10. java模拟实现操作系统进程调度中的多级反馈队列算法