注册/登录
论坛 > 板卡试用区
发帖|
看3692|回4|收藏
小马哥-1650185 看全部
2018-11-19 21:43:41
本帖最后由 小马哥-1650185 于 2018-11-19 22:17 编辑

加速度传感器是一种可以检测"倾斜"、"撞击"、"振动"等这些传感器动作状态的传感器。传感器有1轴2轴3轴等种类,例如1轴可检测1个方向(只检测纵向),2轴可检测2个方向(纵向和横向),3轴可检测3个方向(纵向、横向和高度)。
传感器评估套件中搭载的加速度传感器为3轴,所以可检测XYZ三个方向。

芯片资料
6.jpg

原理图
1.jpg

pcb 布局图
2.jpg
使用时,电源电压的设定(1.8 或 3.0V)
3.jpg

KX224初始化

代码:

  1. init(void)
  2. {
  3.   byte rc;
  4.   unsigned char reg;
  5.   unsigned char gsel;

  6.   rc = read(KX224_WHO_AM_I, ®, sizeof(reg));
  7.   if (rc != 0) {
  8.     Serial.println(F("Can't access KX224"));
  9.     return (rc);
  10.   }
  11.   Serial.print(F("KX224_WHO_AMI Register Value = 0x"));
  12.   Serial.println(reg, HEX);
  13.   
  14.   if (reg != KX224_WAI_VAL) {
  15.     Serial.println(F("Can't find KX224"));
  16.     return (rc);
  17.   }

  18.   reg = KX224_CNTL1_VAL;
  19.   rc = write(KX224_CNTL1, ®, sizeof(reg));
  20.   if (rc != 0) {
  21.     Serial.println("Can't write KX224 CNTL1 register at first");
  22.     return (rc);
  23.   }

  24.   reg = KX224_ODCNTL_VAL;
  25.   rc = write(KX224_ODCNTL, ®, sizeof(reg));
  26.   if (rc != 0) {
  27.     Serial.println("Can't write KX224 ODCNTL register");
  28.     return (rc);
  29.   }

  30.   rc = read(KX224_CNTL1, ®, sizeof(reg));
  31.   if (rc != 0) {
  32.     Serial.println(F("Can't read KX224 CNTL1 register"));
  33.     return (rc);
  34.   }
  35.   gsel = reg & KX224_CNTL1_GSELMASK;

  36.   reg |= KX224_CNTL1_PC1;
  37.   rc = write(KX224_CNTL1, ®, sizeof(reg));
  38.   if (rc != 0) {
  39.     Serial.println(F("Can't write KX224 CNTL1 register at second"));
  40.     return (rc);
  41.   }
  42.   
  43.   switch(gsel) {
  44.     case KX224_CNTL1_GSEL_8G :
  45.       // (Equivalent counts) / (Range) = (32768 / 8)
  46.       _g_sens = 4096;
  47.     break;

  48.     case KX224_CNTL1_GSEL_16G :
  49.       // (Equivalent counts) / (Range) = (32768 / 16)
  50.       _g_sens = 2048;
  51.     break;

  52.     case KX224_CNTL1_GSEL_32G :
  53.       // (Equivalent counts) / (Range) = (32768 / 32)
  54.       _g_sens = 1024;
  55.     break;

  56.     default:
  57.     break;
  58.   }
  59.   return (rc);
  60. }
读取数据

代码:

  1. byte KX224::get_rawval(unsigned char *data)
  2. {
  3.   byte rc;

  4.   rc = read(KX224_XOUT_L, data, 6);
  5.   if (rc != 0) {
  6.     Serial.println(F("Can't get KX224 accel value"));
  7.   }

  8.   return (rc);
  9. }

  10. byte KX224::get_val(float *data)
  11. {
  12.   byte rc;
  13.   unsigned char val[6];
  14.   signed short acc[3];

  15.   rc = get_rawval(val);
  16.   if (rc != 0) {
  17.     return (rc);
  18.   }

  19.   acc[0] = ((signed short)val[1] << 8) | (val[0]);
  20.   acc[1] = ((signed short)val[3] << 8) | (val[2]);
  21.   acc[2] = ((signed short)val[5] << 8) | (val[4]);

  22.   // Convert LSB to g
  23.   data[0] = (float)acc[0] / _g_sens;
  24.   data[1] = (float)acc[1] / _g_sens;
  25.   data[2] = (float)acc[2] / _g_sens;

  26.   return (rc);  
  27. }

串口输出结果
4.jpg

波形信息
5.jpg




wudianjun2001 看全部
2018-11-20 10:57:21
牛牛。。。。。
stary666 看全部
2018-11-20 11:39:52
看看 logo.png
stary666 看全部
2018-11-20 11:40:28
不错
微风→寒 看全部
2018-11-21 10:26:50
666                  

罗姆半导体技术社区

Powered by Discuz! X3.4

首页|标准版|触屏版|电脑版