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修改
赞
9
收藏 7
回复
相关推荐
干货,感谢分享。
你好,代码编译不了,可以请教一下吗,大神
你好,编译时在最后报错,屏蔽掉下面就没有一点问题了
IMUupdate(Angle_gx,Angle_gy,Angle_gz,Angle_ax,Angle_ay,Angle_az);
想请教一下大神这是怎么回事啊
报错原因了?相关截图有吗?
找到原因了,没有连接到正确的头文件。不过得到的数据貌似有点不太对,下记截图
直接读出值有变化,但是俯仰角值很奇怪