本帖最后由 freeelectron 于 2020-1-19 11:59 编辑
1、基本特征
l 3轴磁阻磁传感器
l I2C接口
l 12bit/14bit数字输出
l 灵敏度:0.042μT/LSB(Typ)
l 测量范围:±1200μT(Typ) (备注:1T=10000G,±1200μT=±12G)
l 工作温度范围: -40°C to +85°C
l 封装:MLGA010V020A 2.00mm x 2.00mm x 1.00mm
l 工作电流(100SPS): 0.15mA(Typ)
2、引脚描述
ADDR:用于编程I2C地址;DRDY:中断引脚,一般接在mcu的外部中断引脚上。
3、I2C地址
I2C地址取决于ADDR引脚
ADDR | 7bit addr | 8bit addr |
0 | 0x0E | 0x1C |
1 | 0x0F | 0x1E |
4、寄存器列表
5、程序编写
5.1、寄存器以及设置参数定义
5.2、读取设备ID
设备ID一般都是一个固定值,芯片出厂的时候已经固化在芯片里面了,只读,可用于检测I2C通信是否正常、检测芯片是否存在。
- bool BM1422AGMVCheck(void)
- {
- uint8 chip_id=0;
-
- chip_id=BM1422AGMV_ReadRegU8(BM1422AGMV_WIA);
-
- if(chip_id==0x41)
- {
- return true;
- }
- else
- {
- return false;
- }
- }
5.3、传感器初始化设定
- void BM1422AGMVInit(void)
- {
- BM1422AGMV_WriteRegU8(BM1422AGMV_CNT1,BM1422AGMV_PC1_ACTIVE|
- BM1422AGMV_OUT_BIT_14|
- BM1422AGMV_RST_LV_RST_RE|
- BM1422AGMV_ODR_10HZ|
- BM1422AGMV_FS1_CON); //上电、14bit输出、复位、输出速率10hz、连续测量模式
-
- BM1422AGMV_WriteRegU8(BM1422AGMV_AVE_A,BM1422AGMV_AVE_A_4); //设置采样次数平均时间 :4次
-
- BM1422AGMV_WriteRegU8(BM1422AGMV_CNT4_M,0xff); //
- BM1422AGMV_WriteRegU8(BM1422AGMV_CNT3,BM1422AGMV_FORCE_START); //启动测量
- BM1422AGMVGetSensitive();
- }
5.4、获取灵敏度
- static uint8 sensitive;
- void BM1422AGMVGetSensitive(void)
- {
- uint8 val;
-
- val=BM1422AGMV_ReadRegU8(BM1422AGMV_CNT1); //获取灵敏度
-
- if(val&BM1422AGMV_OUT_BIT_14==BM1422AGMV_OUT_BIT_14)
- {
- sensitive=24;
- }
- else
- {
- sensitive=6;
- }
- }
5.5、读取数据
- void BM1422AGMVRead(void)
- {
- sint16 x_count,y_count,z_count;
- uint16 temp_count;
- float x,y,z,temp;
-
- x_count=BM1422AGMV_ReadRegU16(BM1422AGMV_DATAX_L);
- y_count=BM1422AGMV_ReadRegU16(BM1422AGMV_DATAY_L);
- z_count=BM1422AGMV_ReadRegU16(BM1422AGMV_DATAZ_L);
-
- x=(float)x_count/sensitive;
- y=(float)y_count/sensitive;
- z=(float)z_count/sensitive;
-
- printf("x=%fuT x=%fuT x=%fuT\r\n",x,y,z);
-
- temp_count=BM1422AGMV_ReadRegU16(BM1422AGMV_TEMP_L);
-
- printf("temp_count=%d\r\n",temp_count);
- }
把磁场数据的数字值转化为实际值的过程参考了官方的arduino例程,用磁性的东西,靠近传感器,输出三轴数据变化;
温度数据,读出来是数字值,怎么转化为实际值,手册里面没有说明。