OpenHarmony Neptune开发板I2C驱动 MPU6050获取数据 原创 精华

发布于 2021-10-8 11:47
浏览
7收藏

本文介绍如何在Neptune开发板上,使用openHarmony IoT硬件子系统的IIC接口 获取MPU6050原始数据并使用四元数姿态解算通过openHarmony IoT硬件子系统PWM接口驱动舵机
1.环境准备
1.1 开发环境、编译环境搭建,参考官方文档,参考链接如下:
Neptune开发板的环境搭建及使用
1.2 Neptune开发板 openharmony V1.1.0 LTS 版本获取:
git clone https://gitee.com/hihopeorg_group/neptune-harmony-os1.1-iot.git
2.材料准备
2.1、Neptune HarmonyOS物联网 IOT模组
2.2、MPU6050 模块
2.3、SG90 伺服舵机
2.4、杜邦线若干

3.开发调试
这里我修改小熊派-E53_SC2读取三轴加速度例程 使Neptune开发板能通过IIC接口获取MPU6050原始数据
修改关键代码部分(IIC):

/***************************************************************
  * 函数功能: 通过I2C读取一个指定寄存器内容
  * 输入参数: Addr:I2C设备地址
  *           Reg:目标寄存器
  * 返 回 值: uint8_t:寄存器内容
  * 说    明: 无
  **************************************************************/
uint8_t I2C_MPU6050_ReadData(uint8_t Reg)
{
    uint8_t value = 0;
    uint32_t status = 0;
    //WifiIotI2cData mpu6050_i2c_data = {0};
    uint8_t  buffer[1] = {Reg};
    /*
    mpu6050_i2c_data.sendBuf = buffer;
    mpu6050_i2c_data.sendLen = 1;
    mpu6050_i2c_data.receiveBuf = &value;
    mpu6050_i2c_data.receiveLen = 1;
    status =IoTI2cWrite(MPU6050_I2C_IDX,(MPU6050_SLAVE_ADDRESS<<1)|0x00, buffer,sizeof(buffer));
    if (status != IOT_SUCCESS)
    {
        printf("===== Error: I2C write status = 0x%x! =====\r\n", status);
        return status;
    }
    */
    IoTI2cWrite(MPU6050_I2C_IDX,(MPU6050_SLAVE_ADDRESS<<1)|0x00, buffer,sizeof(buffer));
    HAL_Delay1();
    IoTI2cRead(MPU6050_I2C_IDX,(MPU6050_SLAVE_ADDRESS<<1)|0x01, &value,1);
    HAL_Delay1();
    /*
    status =IoTI2cRead(MPU6050_I2C_IDX,(MPU6050_SLAVE_ADDRESS<<1)|0x01, &value,1);
    if (status != IOT_SUCCESS)
    {
        printf("===== Error: I2C write status = 0x%x! =====\r\n", status);
        return status;
    }
    */
    return value;
}

这里HAL_Delay1是延时,必须要添加,否则MPU6050读不出数据:

void HAL_Delay1(void)     //大概延时30~40us
{
    uint32_t tick;
    // Calculating 100us timeout in system timer ticks
    const uint32_t timeout = 20U * osKernelGetSysTimerFreq() / 1000000u;

    tick = osKernelGetSysTimerCount(); // get start value of the Kernel system tick
    do {
        ;
    } while(osKernelGetSysTimerCount() - tick < timeout);
}

四元数姿态解算(本人比较菜)就直接下载STM32+mpu6050姿态角(精简四元数法)程序
应用到Neptune开发板中发现还不错。

openHarmony IoT硬件子系统 PWM接口驱动舵机我这篇文章介绍的很清楚
4.编译、烧录,并测试最后的完成效果。
演示:Neptune开发板 MPU6050控制SG90舵机
代码:Gitte

©著作权归作者所有,如需转载,请注明出处,否则将追究法律责任
已于2021-10-8 11:47:23修改
6
收藏 7
回复
举报
回复
添加资源
添加资源将有机会获得更多曝光,你也可以直接关联已上传资源 去关联
    相关推荐