搜索
热搜: ROHM 模拟 车载
查看: 4015|回复: 2

【传感器试用】代码详解三轴加速度计KX224-1053使用

  [复制链接]

该用户从未签到

11

主题

401

帖子

0

精华

金牌会员

最后登录
2022-1-27
发表于 2020-1-17 14:59:26 | 显示全部楼层 |阅读模式
本帖最后由 freeelectron 于 2020-1-19 11:59 编辑

1、基本特性
测量范围可配置±8g, ±16g or ±32g
输出速率可达25600Hz
2048字节的fifo/filo
支持spiiic接口
支持自测
3 x 3 x 0.9 mm LGA封装

2、IO口描述
图片1.png
SCLK/SCLSPII2C的信号SDI/SDASPI数据输入引脚或者I2C数据引脚SDO/ADDR4线spi的数据输出引脚或者I2C设备地址配置引脚,不能悬空nCSSPI片选或者I2C模式下接到IO_VDD引脚,不能悬空NC:内部未连接,可以悬空、可以接到GND、可以接到VDD、也可以接到IO_VDDINT1INT2:外部中断引脚2POR期间是高阻状态,POR之后是低电平,不使用保持悬空TRIGFIFO缓冲的控制触发引脚,不使用接到GNDIO_VDDVDD:电源输入引脚,需要接0.1uF电容到地。

3、设备I2C地址
图片2.png
Y这一位默认是1,需要改动可联系厂家,X这一位由用户设计,由SDO/ADDR引脚来决定。

4、寄存器描述
图片3.png
5、软件实现
5.1寄存器以及设置参数定义
  1. #define   ADDR_PIN 0

  2. #if ADDR_PIN  
  3.   #define KX224_1053_I2C_ADDR           0x3E
  4.   #define KX224_1053_I2C_7BIT_ADDR      0x1F
  5. #else
  6.   #define KX224_1053_I2C_ADDR           0x3C
  7.   #define KX224_1053_I2C_7BIT_ADDR      0x1E
  8. #endif

  9. #define   KX224_1053_XHP_L          0x00
  10. #define   KX224_1053_XHP_H          0x01

  11. #define   KX224_1053_YHP_L          0x02
  12. #define   KX224_1053_YHP_H          0x03

  13. #define   KX224_1053_ZHP_L          0x04
  14. #define   KX224_1053_ZHP_H          0x05

  15. #define   KX224_1053_XOUT_L         0x06
  16. #define   KX224_1053_XOUT_H         0x07

  17. #define   KX224_1053_YOUT_L         0x08
  18. #define   KX224_1053_YOUT_H         0x09

  19. #define   KX224_1053_ZOUT_L         0x0A
  20. #define   KX224_1053_ZOUT_H         0x0B

  21. #define   KX224_1053_COTR           0x0C

  22. #define   KX224_1053_WHO_AM_I       0x0F

  23. #define   KX224_1053_TSCP           0x10
  24. #define   KX224_1053_TSPP           0x11

  25. #define   KX224_1053_INS1           0x12
  26. #define   KX224_1053_INS2           0x13
  27. #define   KX224_1053_INS3           0x14
  28. #define   KX224_1053_STATUS_REG     0x15
  29. #define   KX224_1053_INT_REL        0x17

  30. #define   KX224_1053_CNTL1          0x18
  31.            //PC1 bit[7]
  32.        #define  STANDBY_MODE                0x00
  33.        #define  OPERATE_MODE                0x80
  34.            //RES bit[6]
  35.        #define  LOW_POWER                   0x00
  36.        #define  HIGH_RESOLUTION             0x40
  37.            //DRDYE bit[5]
  38.        #define  DRDYE_DIS                   0x00
  39.        #define  DRDYE_EN                    0x20
  40.            //GSEL1, GSEL0 bit[4:3]
  41.        #define  RANGE_8G                    0x00
  42.        #define  RANGE_16G                   0x08
  43.        #define  RANGE_32G                   0x10
  44.            //TDTE bit[2]
  45.        #define  TDTE_DIS                    0x00
  46.        #define  TDTE_EN                     0x04
  47.            //WUFE bit[1]
  48.        #define  WAKE_UP_FUN_DIS             0x00
  49.        #define  WAKE_UP_FUN_EN              0x02
  50.            //TPE  bit[0]
  51.        #define  TILT_POS_FUN_DIS            0x00
  52.        #define  TILT_POS_FUN_EN             0x01

  53. #define   KX224_1053_CNTL2          0x19
  54. #define   KX224_1053_CNTL3          0x1A

  55. #define   KX224_1053_ODCNTL         0x1B
  56.            //IIR_BYPASS ,bit[7]
  57.        #define IIR_BYPASS_APPLY             0x00
  58.        #define IIR_BYPASS_BYPASS            0x80
  59.            //LPRO,bit[6]
  60.        #define  COR_FREQ_ODR_9              0x00
  61.        #define  COR_FREQ_ODR_2              0x40
  62.            //RESERVED,bit[5:4]
  63.            //OSA3, OSA2, OSA1,OSA0,bit[3:0]
  64.        #define  ODR_12_5HZ                  0x00
  65.        #define  ODR_25HZ                    0x01
  66.        #define  ODR_50HZ                    0x02
  67.        #define  ODR_100HZ                   0x03
  68.        #define  ODR_200HZ                   0x04
  69.        #define  ODR_400HZ                   0x05
  70.        #define  ODR_800HZ                   0x06
  71.        #define  ODR_1600HZ                  0x07
  72.        #define  ODR_0_781HZ                 0x08
  73.        #define  ODR_1_563HZ                 0x09
  74.        #define  ODR_3_125HZ                 0x0A
  75.        #define  ODR_6_25HZ                  0x0B
  76.        #define  ODR_3200HZ                  0x0C
  77.        #define  ODR_6400HZ                  0x0D
  78.        #define  ODR_12800HZ                 0x0E
  79.        #define  ODR_25600HZ                 0x0F

  80. #define   KX224_1053_INC1           0x1C
  81. #define   KX224_1053_INC2           0x1D
  82. #define   KX224_1053_INC3           0x1E
  83. #define   KX224_1053_INC4           0x1F
  84. #define   KX224_1053_INC5           0x20
  85. #define   KX224_1053_INC6           0x21

  86. #define   KX224_1053_TILT_TIMER     0x22
  87. #define   KX224_1053_WUFC           0x23
  88. #define   KX224_1053_TDTRC          0x24

  89. #define   KX224_1053_TDTC           0x25
  90. #define   KX224_1053_TTH            0x26
  91. #define   KX224_1053_TTL            0x27
  92. #define   KX224_1053_FTD            0x28
  93. #define   KX224_1053_STD            0x29
  94. #define   KX224_1053_TLT            0x2A
  95. #define   KX224_1053_TWS            0x2B
  96. #define   KX224_1053_FFTH           0x2C
  97. #define   KX224_1053_FFC            0x2D
  98. #define   KX224_1053_FFCNTL         0x2E
  99. #define   KX224_1053_ATH            0x30

  100. #define   KX224_1053_TILT_ANGLE_LL  0x32
  101. #define   KX224_1053_TILT_ANGLE_HL  0x33
  102. #define   KX224_1053_HYST_SET       0x34
  103. #define   KX224_1053_LP_CNTL        0x35
  104. #define   KX224_1053_BUF_CNTL1      0x3A
  105. #define   KX224_1053_BUF_CNTL2      0x3B
  106. #define   KX224_1053_BUF_STATUS_1   0x3C
  107. #define   KX224_1053_BUF_STATUS_2   0x3D
  108. #define   KX224_1053_BUF_CLEAR      0x3E
  109. #define   KX224_1053_BUF_READ       0x3F
  110. #define   KX224_1053_SELF_TEST       0x60
复制代码

5.2读取设备ID
设备ID一般都是一个固定值,芯片出厂的时候已经固化在芯片里面了,只读,可用于检测I2C通信是否正常、检测芯片是否存在。
图片4.png
  1. bool KX224_1053Check(void)
  2. {
  3.   uint8 chip_id=0;
  4.   
  5.   chip_id=KX224_1053_ReadRegU8(KX224_1053_WHO_AM_I);
  6.   
  7.   if(chip_id==0x2B)
  8.   {
  9.     return true;
  10.   }
  11.   else
  12.   {
  13.     return false;
  14.   }
  15. }
复制代码

5.3传感器初始化设定
图片5.png
图片6.png

  1. void KX224_1053Init(void)
  2. {
  3.   KX224_1053_WriteRegU8(KX224_1053_CNTL1,OPERATE_MODE|HIGH_RESOLUTION|RANGE_8G);、
  4. //运行模式、高分辨率模式、加速度范围
  5.   
  6.   KX224_1053_WriteRegU8(KX224_1053_ODCNTL,ODR_50HZ);
  7. //输出数据速率
  8. }
复制代码

5.4、获取加速度计测量范围、计算精度
由于直接读出来的是数字量,因此需要计算每个count对应的实际值
  1. uint16 g_sensitive;

  2. void KX224_1053GetRange(void)
  3. {

  4.   uint8 range;

  5.   range=KX224_1053_ReadRegU8(KX224_1053_CNTL1);

  6.   range=range&(RANGE_8G|RANGE_16G|RANGE_32G);


  7.   switch(range)

  8.   {

  9.     case RANGE_8G:

  10.       g_sensitive=32768/8;

  11.       break;

  12.     case RANGE_16G:

  13.       g_sensitive=32768/16;

  14.       break;

  15.     case RANGE_32G:

  16.       g_sensitive=32768/32;

  17.       break;

  18.     default:

  19.       break;

  20.   }   

  21. }
复制代码

5.5读取数据
  1. void KX224_1053Read(void)
  2. {
  3.   sint16 x_count, y_count, z_count;
  4.   float x,y,z;
  5.   
  6.   x_count=KX224_1053_ReadRegU16(KX224_1053_XOUT_L);
  7.   y_count=KX224_1053_ReadRegU16(KX224_1053_YOUT_L);
  8.   z_count=KX224_1053_ReadRegU16(KX224_1053_ZOUT_L);

  9.   printf(“x_count=%d   y_count=%d   z_count=%d\r\n”,x_count,y_count,z_count);

  10.   x=x_count/(g_sensitive*1.0);
  11.   y=y_count/(g_sensitive*1.0);
  12.   z=z_count/(g_sensitive*1.0);

  13. printf(“x=%f  y=%f  z=%f\r\n”,x,y,z);

  14. }
复制代码
注意上面的读数有符号数据,读出来之后再转化为实际的值。测量范围越大,精度越低。
图片7.png













回复

使用道具 举报

该用户从未签到

16

主题

2093

帖子

0

精华

金牌会员

最后登录
2024-4-25
发表于 2020-3-11 01:14:41 | 显示全部楼层
感谢分享
回复

使用道具 举报

该用户从未签到

1347

主题

6657

帖子

0

精华

论坛元老

最后登录
2020-7-26
发表于 2020-5-6 14:10:14 | 显示全部楼层
根陀螺仪差不多把
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /2 下一条

Archiver|手机版|小黑屋|罗姆半导体技术社区

GMT+8, 2024-4-25 22:10 , Processed in 0.102165 second(s), 15 queries , MemCache On.

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.

快速回复 返回顶部 返回列表