Day41:四轴飞行器控制系统 (基础)

项目功能:
姿态检测 (MPU6050 陀螺仪 + 加速度计)
电机控制 (4 个电调 + PWM)
遥控器信号接收 (PWM 输入捕获)
平衡控制 (PD 控制算法)
硬件连接:
MPU6050:I2C(PB6-SCL, PB7-SDA)
电调:4 个 PWM 输出 (PA0-PA3)
遥控器:PWM 信号输入 (PA4-PA7)
软件架构:
姿态解算:读取 MPU6050 数据→计算欧拉角
控制算法:PD 控制器调节 PWM 占空比
输入处理:捕获遥控器 PWM 信号→解析控制指令
核心代码:(MPU6050 读取 + 姿态计算)

// 读取MPU6050加速度和陀螺仪数据
void MPU6050_Read_Data(mpu6050_data_t *data){
  uint8_t buf[14];
  
  // 读取加速度、陀螺仪、温度数据
  HAL_I2C_Master_Transmit(&hi2c1, MPU6050_ADDR, &reg_addr, 1, 1000);
  HAL_I2C_Master_Receive(&hi2c1, MPU6050_ADDR, buf, 14, 1000);
  
  // 转换为实际值(注意小端模式)
  data->ax = (int16_t)(buf[0] | (buf[1] << 8));
  data->ay = (int16_t)(buf[2] | (buf[3] << 8));
  data->az = (int16_t)(buf[4] | (buf[5] << 8));
  data->gx = (int16_t)(buf[8] | (buf[9] << 8));
  data->gy = (int16_t)(buf[10] | (buf[11] << 8));
  data->gz = (int16_t)(buf[12] | (buf[13] << 8));
  
  // 转换为g和°/s单位
  data->ax *= 0.000061; // LSB/(g) = 16384
  data->ay *= 0.000061;
  data->az *= 0.000061;
  data->gx *= 0.061;    // LSB/(°/s) = 131
  data->gy *= 0.061;
  data->gz *= 0.061;
}

// 姿态计算(简化版)
void Attitude_Calculate(mpu6050_data_t *data, float *roll, float *pitch){
  // 使用加速度计计算倾角(简化,忽略陀螺仪积分)
  *roll = atan2(data->ay, data->az) * 57.3;  // 横滚角(°)
  *pitch = atan2(-data->ax, sqrt(data->ay*data->ay + data->az*data->az)) * 57.3; // 俯仰角(°)
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值