三轴加速度传感器KXTJ3-1057 for LuaTask 驱动 手把手教程
KXTJ3-1057简介
KXTJ3-1057和KXTJ2-1009 pin to pin 兼容,驱动也兼容。原是Kionix出品的一款手机上非常常用的三轴加速度传感器,后被ROHM收购。产品数据手册: https://atta.szlcsc.com/upload/public/pdf/source/20191031/C442603_12AC3C8489586CE5186C5DB6A78C43C5.pdf?Expires=4070880000&OSSAccessKeyId=LTAIJDIkh7KmGS1H&Signature=xO%2B7CeKnGRDmRCYs1IojjqVATtw%3D&response-content-disposition=attachment%3Bfilename%3DC442603_KXTJ3-1057_2019-10-31.PDF
概述:
ROHM Semiconductor 的 KXTJ3-1057 是三轴 ±2g、±4g、±8g 或 ±16g 微加工硅晶加速计。这些元件采用 Kionix 的专有等离子微加工工艺技术制造。加速度使这些元件运动,进而产生电容器差是这些元件的加速度检测的基本原理,而且使用共模消除法减少由于工艺变化、温度和环境影响造成的误差。利用玻璃浆料将另一片盖形晶圆与该器件粘结在一起,使这些元件实现晶圆级密封。独立的 ASIC 器件与感测元件封装在一起,用于进行信号调节和数字化通讯。
这种加速计采用 2 mm x 2 mm x 0.9 mm LGA 塑料封装,由 1.71 VDC 至 3.6 VDC 电源供电。稳压器用于在输入电源电压范围内保持内部工作电压恒定。这样就能在输入电压范围内保持稳定的工作特性,而且实现几乎检测不到的比率误差。I2C 数字协议用于与芯片进行通讯,以便对该部件进行配置并监视输出。
内部结构图:
参考电路图:
特性:
- 体积小:2 mm x 2 mm x 0.9 mm LGA 封装
- 低电流消耗:待机状态 0.9 µA,低功耗状态 10 µA,高分辨率模式 155 µA
- 电源电压范围宽:1.71 V 至 3.6 V,且内置稳压器
- 更宽用户可宽展配置 g 范围:±2 g、±4 g、±8 g 或 ±16 g
- I2C 数字通讯接口,高达 3.4 MHz
- 高分辨率环形功能,阈值可配置,低至 3.9 mg
- 用户可配置输出数据速率:0.781 Hz 至 1600 Hz
- 采用改进型设计,几乎消除了回流焊后偏移和灵敏度漂移
- 高度可配置的中断控制功能
- 符合 RoHS/REACH 规范
编写KXTJ3-1057 for LuaTask 驱动
抽象驱动所用到的函数
- I2C 通信自检函数
- KXTJ3-1057 寄存器定义
- KXTJ3-1057 读寄存器函数
- KXTJ3-1057 写寄存器函数
- KXTJ3-1057 读中断状态函数
- KXTJ3-1057 清中断函数
- KXTJ3-1057 初始化函数
- KXTJ3-1057 功能自检函数
KXTJ3-1057 的寄存器地址
1 | local KXTJ3_ADDR = 0x0E --KXTJ3 的地址 |
KXTJ3 的7位从机地址,请参阅你购买的产品手册给的规格书,通常是0x0E 或 0x0F 。
KXTJ3-1057 读写寄存器函数
LuaTask 的I2C 调用的是内部的硬件I2C,所以core给了几个API:https://wiki.openluat.com/doc/luatApi4G/#i2c
1 | -- 初始化并打开I2C操作 |
为了规避I2C异常,提高I2C抗干扰能力,建议I2C使用完后就立刻关闭。如上代码,每次读取寄存器1个字节。读写寄存器的函数可以根据实际情况,一次读取或写入两个字节,写寄存器函数每次写完后,会重读当前寄存器,方便调试。
I2C 数字通信自检函数
参考KXTJ3-1057 数据手册,可以找到寄存器“DCST_RESP” 专门用来做 KXTJ3-1057 数字通信验证的,如果接线正常,I2C工作正常, 那么读取该寄存器 KXTJ3-1057 会返回0x55,依据这个可以判断LuaTask的I2C和KXTJ3-1057的数字接线、数字通信是否正常,如果不返回0x55,要检查硬件和I2C端口号是否正确。
1 | --- 数字通信自检验证 |
读取和复位状态寄存器
当中断源寄存器1的DRDY和WUFS位被置位时,该寄存器Bit4置位,表示有位移或者加速度变化产生。当读取加速度数据或读取中断释放寄存器(INT_REL)时,Bit4复位。
1 | --- 读中断状态 |
读取中断源寄存器
实际上读取寄存器的操作可以直接用readRegister函数直接实现,这里演示的是二次封装该方法,方便跨页面调用。
1 | --- 读取中断源寄存器 |
KXTJ3-1057 工作模式切换
KXTJ3-1057 部分寄存器写入数据必须在准备模式才能写入,工作模式写入无效。配置CTRL_REG1寄存器Bit7的值可切换工作模式:
- 0 = stand-by mode
- 1 = operating mode
1 | --- 配置 KXTJ3工作模式 |
实际应用中,也可以在准备模式配置玩寄存器后,配置CTRL_REG1的同时切换KXTJ3为工作模式。
读取三轴加速度数据
1 | --- 读取三轴输出值,注意结果是 Tri-axis 数字量 |
这部分没啥好说的,就是读取加速度三轴的高低位寄存器的值,根据CTRL_REG1寄存器配置的分辨率,然后换算成Tri-axis 数字量。
KXTJ3-1057 三轴功能自检函数
KXTJ3-1057 提供了一套功能自检逻辑,帮助用户判断三轴传感器是否正常工作。当写入0xCA到SELF_TEST寄存器,内部测量自检方法被启用, 加速度的静电驱动会让X,Y,Z三轴产生偏移,对该寄存器写入0x00,则关闭自建并恢复正常工作。
1 | -- KXTJ3-1057 功自检 |
KXTJ3-1057 初始化示例
下面介绍 KXTJ3-1057 初始化的例子, 读者可根据自己的实际情况和项目需求进行更改,其中一些直接用writeRegister写寄存器的方法, 大家可以自己动手封装成方法,方便在其他页面调用。
1 | --- 初始化配置 |
源码
1 | --[[ |