KXTJ2-1009三轴加速度计驱动

这个三轴加速度是国外的,开源做的不好,但集成在手机上用的很多。

网上搜索了一番找不到资料,官网能找到linux或者处理器平台的驱动,github上也是。

其实也就是一个IIC驱动,用国产的8位单片机。不知道为啥,竟然有很多问这个但是不会驱动的,刚好做了,拿出来记录一波。

主要参数如下,找到寄存器map就可以撸IIC驱动了

unsigned char KXTJ2_Init(void)
{
  unsigned char tmp_data=0x00;
	unsigned char tmp_count=0;
	Timer0_Delay1ms(20);
  //After the part is powered up, it takes 10ms before it is ready for I2C communication.

     do{
			  if(tmp_count++>200)
					return 0;
			  Timer0_Delay1ms(2);
	      tmp_data=Single_Read(KXTJ2_1009_I2C_SLAVE_ADDR,KXTJ2_1009_REG_DEVID);
	     }
	    while(tmp_data!=0x09);
			Single_Write(KXTJ2_1009_I2C_SLAVE_ADDR,KXTJ2_1009_REG_DATA_FORMAT,0x00);//PC1 = 0 
			Timer0_Delay1ms(20);
			Single_Write(KXTJ2_1009_I2C_SLAVE_ADDR,KXTJ2_1009_REG_DATA_FORMAT,0x40);// +-2G  12bit 
			Single_Write(KXTJ2_1009_I2C_SLAVE_ADDR,KXTJ2_1009_REG_BW_RATE,0x02);    // ODR   50HZ
			Single_Write(KXTJ2_1009_I2C_SLAVE_ADDR,KXTJ2_1009_REG_DATA_FORMAT,0xC0);// PC1 = 1 
	  	//After the part is enabled (PC1 bit in Control Register 1 is asserted), it 
      //takes from 2.1 ms to 80 ms depending on the ODR before the acceleration outputs are valid.
			Timer0_Delay1ms(100);
			 return 1;
}

核心初始化代码如上,主要配置量程,和ODR。

这样就可以读到最原始的数据了。最重要的问题来了,它的数据存放格式在官网的另一个文档里,后面才搜到。高8为和低8位的高4位有效

经过这点,就可以正确的读取到原始数据了,可是还有一个隐藏的问题,这可不像6050,16位,符号数你基本不用管。这个可是12位的有符号数,需要转成16位有符号数。下面这个函数一步到位了,直接转成了以重力加速度g值为单位的返回参数

/*
 * 函数功能:12bit加速度计转换成G值
 * 参数
 *       h--高八位值
 *       l--低八位的高四位
 * 函数返回值:加速度g值
 */   

float mma_switch(unsigned char h,unsigned char l)
{
    float ret;
    unsigned short int V1,h_l;
    int sign;
    h_l=(h<<8u)+l;

    //12位
    if(h>0x7F)
    {
        sign=-1;      
        V1=(~(h_l>>4)+1)&0X0FFF;
    }
    else
    {
        sign=1;
        V1=(h_l>>4)&0X0FFF;
    }
    ret=sign*(((double)V1)/0x3ff);
		
    return ret;
}

经过上面的转换,终于得到了三轴检测到的加速度值了,然后可以姿态解算等。用于测水平,运动加速度检测等等。如果有二次开发的可以联系我。

如果需要IMU模块 或者IMU方案定制 可以参考淘宝https://item.taobao.com/item.htm?spm=a230r.1.14.220.3fbce2151EzKi0&id=618941554431&ns=1&abbucket=3#detail

致敬开源

       --骚年追梦

 

 

 

 

评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值