本帖最后由 jundao721 于 2017-4-5 18:10 编辑
BM1422GMV是一款3轴地磁传感器,是一类利用被测物体在地磁场中的运动状态不同,通过感应地磁场的分布变化而指示被测物体的姿态和运动角度等信息的测量装置。该IC内部有3个磁阻,通过检测三个轴线上的磁场强度的变化而指示被测设备的状态的。 默认选用的是IIC通讯方式,和KX022是一样的,只需要修改初始化的寄存器和初始化数值即可。这里特别注意一下,该IC电源范围为1.7-2V,使用扩展板的1.8V电源。输出数据是12bit和14bit可选。罗姆这几款IIC通讯的传感器,地址都是7位的,需要将地址左移一位,如图1所示:
关于寄存器的详细说明参考附件中的Datasheet,这里程序初始化也是参考官方的Ardunio程序。如图2所示: - void BM1422_Init(void)
- {
- Delay_nnms(0xAFFFF);
- ID = BM1422MulRead(BM1422_DEVICE_ADDRESS_0E,0x0D);
- Delay_nnms(10);
- wai = BM1422SingleRead(BM1422_DEVICE_ADDRESS_0E,BM1422_WIA);
- Delay_nnms(0xAFFFF);
- //step1
- BM1422Write(BM1422_DEVICE_ADDRESS_0E,BM1422_CNTL1,0x80);//12bit
-
- Delay_nnms(10);//(1);
- BM1422MulWrite(BM1422_DEVICE_ADDRESS_0E,BM1422_CNTL4,0x00,0x00);//sizeof(buf));
- Delay_nnms(10);
- //step2
- BM1422Write(BM1422_DEVICE_ADDRESS_0E,BM1422_CNTL2,0x08);
- Delay_nnms(10);
- //step3
- BM1422Write(BM1422_DEVICE_ADDRESS_0E,BM1422_AVE_A,BM1422_AVE_A_VAL);
- Delay_nnms(10);
- }
- void Get_RawVal(void)
- {
- //step4:
- BM1422Write(BM1422_DEVICE_ADDRESS_0E,BM1422_CNTL3,0x40);
- Delay_nnms(0xAFFFF);
- XData = BM1422MulRead(BM1422_DEVICE_ADDRESS_0E,0x10)/6;//x
- Delay_nnms(10);
- YData = BM1422MulRead(BM1422_DEVICE_ADDRESS_0E,0x12)/6;//y
- Delay_nnms(10);
- ZData = BM1422MulRead(BM1422_DEVICE_ADDRESS_0E,0x14)/6;//z
- Delay_nnms(10);
- }
复制代码水平(接近)放置时的数据如图3所示:
垂直(接近)放置时的数据如图4所示:
以上皆是为矫正前的数据,数据有跳动,后面将使用指南针进行参数矫正,会在后面更新测试。 BM1422的连接图,如图5所示:
|