
回复
添加资源
添加资源将有机会获得更多曝光,你也可以直接关联已上传资源 去关联
本文介绍如何在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