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; // 俯仰角(°)

}

相关推荐
VekiSon4 小时前
51单片机——UART 串口通信
单片机·嵌入式硬件·51单片机
2301_773730314 小时前
嵌入式—51单片机day3
单片机·嵌入式硬件·51单片机
gumu2716 小时前
国产MCU打印调试工具Segger RTT
单片机·mcu
smalming7 小时前
模块-图形界面之MCU
单片机·嵌入式硬件
ALzc8 小时前
深度剖析EtherCAT FOE功能:ARM固件升级的数据传输与状态机实现
c语言·stm32·ethercat·foe
余生皆假期-8 小时前
为什么反电势超前 d 轴 90°?
单片机·嵌入式硬件·嵌入式
破晓单片机8 小时前
STM32单片机分享:智能语音识别垃圾桶系统
stm32·单片机·嵌入式硬件·语音识别
华清远见IT开放实验室10 小时前
以“科技+教育”双引擎,打造虚实融合的智能化教育新生态——华清远见亮相央广网2025教育年度盛典
科技·stm32·单片机·物联网·esp32·虚拟仿真·非凡就业班
擎天柱工坊10 小时前
RK3576硬件设计全套讲解笔记1-整体硬件系统原理图详解
笔记·嵌入式硬件·硬件工程
zy1353806757310 小时前
TT119/PM1132芯片-220v转5v应急灯应用方案
科技·单片机·物联网·智能电视