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

}

相关推荐
曾浩轩3 小时前
跟着江协科技学STM32之3-3GPIO输入
科技·stm32·嵌入式硬件
三佛科技-187366133973 小时前
FT8440AD非隔离12V350mA智能家居芯片方案(直接替代SDH8302)
单片机·嵌入式硬件·物联网
章鱼哥嵌入式开发3 小时前
【STM32F103按键外部中断检测实现】
stm32·单片机·嵌入式硬件·stm32入门教程·嵌入式开发实战·从零开始学stm32·单片机新手入门指南
进击的小头3 小时前
02_嵌入式C与控制理论入门:自动控制理论核心概念拆解
c语言·单片机·算法
mftang4 小时前
基于GD32的直流无刷电机控制算法实现和验证
单片机·嵌入式硬件·rt-thread·gd32f527i-eval
清风6666664 小时前
基于单片机的十字路口交通信号灯控制系统设计
单片机·嵌入式硬件·毕业设计·课程设计·期末大作业
渡我白衣4 小时前
计算机组成原理(10):逻辑门电路
android·人工智能·windows·嵌入式硬件·硬件工程·计组·数电
清风6666664 小时前
基于单片机的雨量检测智能汽车雨刮器模拟系统设计与实现
单片机·嵌入式硬件·汽车·毕业设计·课程设计·期末大作业
少一倍的优雅4 小时前
hi3863 (ws63) 智能小车 (二)信息交互
单片机·嵌入式硬件·交互·harmonyos·hi3863