基于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 361次下载  
        赞
        2
 
        收藏 1
      
 回复
  相关推荐
 




















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