基于openharmony的mmc5603地磁模块开发 原创

再见南丫岛
发布于 2022-4-18 09:34
浏览
1收藏

1、模块介绍

1)三轴磁传感器和电子电路全集成式芯片,几乎不需要外部元件
2)优越的量程和精度

  • ±30G的量程
  • 20位运行模式
  • 最小分辨率为0.0625mG
  • 2mG的均方根噪声
  • ±1度以内的指向精度

3)实际响应频率可达1000Hz
4)超小的晶圆级封装,尺寸为0.85mm x 0.85mm x 0.4mm
5)通过内部Set/Reset置/复位磁传感单元, 保证传感器精度始终如一

  • 消除温度压力等环境因素造成的零点漂移
  • 消除外磁场引起的剩磁和磁滞

6)自带灵敏度补偿
7)自带温度传感器
8)具备自检功能
9)具备数据就绪中断功能(仅在I3C模式下)
10)低功耗
11)待机模式耗电仅1μA
12)I2C 从动,快速模式(≤400 KHz)
13)拥有符合MIPI I3C1.0版本标准的I3C接口
14)1.62~3.6V宽电压单电源供电
15)I2C接口支持1.2V
16)I3C接口支持1.8V
17)符合RoHS标准

2、代码移植

主要实现寄存器的I2C读和写操作即可。代码如下:

uint8_t MMC5603_I2c_Write(uint8_t reg, uint8_t dat)
{
	uint8_t write_data[3] = {reg,dat};
    hi_i2c_data i2c_data = {0};
    i2c_data.send_buf = write_data;
    i2c_data.send_len = 2;
 
    uint32_t result = hi_i2c_write(IIC_INDEX, (MMC5603_addr<<1), &i2c_data);
    if(result == 0){
        result = 1;
    }
	return 0;
}
 
uint8_t MMC5603_I2c_Read(uint8_t reg, uint8_t *buf, uint8_t len)
{
	hi_i2c_data i2c_data = {0};
    uint8_t  buffer[1] = {0x00};
    buffer[0] = reg;
    i2c_data.send_buf = buffer;
    i2c_data.send_len = 1;
    i2c_data.receive_buf = buf;
    i2c_data.receive_len = len;
    return hi_i2c_writeread(IIC_INDEX, (MMC5603_addr<<1), &i2c_data);
}

3、驱动使用

1)初始化

void MMC5603_Enable(void)
{	
	int ret = 0;
	
	/* Inite the sensor state */
	sensor_state = 1;
	
	/* Check product ID */
	ret = MMC5603_CheckID();
	if (ret<0)
		return;	
	
	/* Auto self-test registers configuration */
	MMC5603_Auto_SelfTest_Configuration();
		
	/* Do SET operation */
	MMC5603_SET();		
 
	/* Work mode setting */
	MMC5603_Continuous_Mode_With_Auto_SR(MMC5603_CMD_BW00, 50);
	
	mmc5603_Delay_ms(20);
}

2)数据获取

STATIC mp_obj_t machine_mems_mag(size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args) {

    struct magnetic_field data;
    mmc5603nj_bpm_algo_handler(&data);
    //DEBUG_printf("MAG %0.3f,%0.3f,%0.3f\r\n",data.x,data.y,data.z);
    mp_obj_t list = mp_obj_new_list(0, NULL);
    mp_obj_list_append(list, mp_obj_new_float(data.x));
    mp_obj_list_append(list, mp_obj_new_float(data.y));
    mp_obj_list_append(list, mp_obj_new_float(data.z));
    return list;
    //return mp_const_none;
}

4、驱动代码

附件。

©著作权归作者所有,如需转载,请注明出处,否则将追究法律责任
驱动代码.zip 3.95K 255次下载
2
收藏 1
回复
举报
1条回复
按时间正序
/
按时间倒序
红叶亦知秋
红叶亦知秋

拿到驱动代码好好学习一下

回复
2022-4-18 11:14:00
回复
    相关推荐