从零开始DIY四轴无人机,超详细的电路设计和代码开发教程带你飞!
大家好,我是阿森!今天给大家带来一个超实用的四轴无人机DIY教程。作为一个捣鼓了10多年无人机的老玩家,我把自己踩过的坑都总结出来,希望能帮助大家少走弯路。“
⚠️ 安全提示:无人机DIY涉及到高速旋转的螺旋桨,务必注意安全!测试时一定要在开阔场地进行,远离人群。
一、硬件选型
1. 机架选择
我建议新手从450mm轴距的机架开始练习。为什么?因为:
体积适中,好操控承重够用(一般能载重300-500g)维修成本低
推荐配置:
机架:F450同类型碳纤维机架
电机:2212 920KV无刷电机 x 4
电调:30A ESC x 4
螺旋桨:1045正反桨
飞控:CC3D / Pixhawk Mini
电池:3S 2200mAh 航模锂电池
2. 主控电路设计
这里我用最简单的CC3D飞控来讲解(个人DIY方案,仅供参考)。
// 主要引脚定义
#define MOTOR1_PINPA0 // 电机1 PWM输出
#define MOTOR2_PINPA1 // 电机2 PWM输出
#define MOTOR3_PINPA2 // 电机3 PWM输出
#define MOTOR4_PINPA3 // 电机4 PWM输出
#define MPU6050_SDA PB6 // MPU6050 IIC数据线
#define MPU6050_SCL PB7 // MPU6050 IIC时钟线
// 姿态解算相关参数
struct FlightStatus {
float roll; // 横滚角
float pitch; // 俯仰角
float yaw; // 偏航角
float altitude; // 高度
};
3. 电路连接图
重点注意事项:
电机转向一定要对!顺时针和逆时针要交替安装电调信号线不要接反所有连接点最好用热缩管保护
二、代码开发
1. PID控制器实现
class PIDController {
private:
float kp, ki, kd; // PID参数
float lastError; // 上次误差
float integral; // 积分项
public:
PIDController(float p, float i, float d) {
kp = p;
ki = i;
kd = d;
lastError = 0;
integral = 0;
}
float update(float setpoint, float measurement) {
float error = setpoint - measurement;
integral += error;
float derivative = error - lastError;
// 防止积分饱和
if(integral > 400) integral = 400;
if(integral < -400) integral = -400;
float output = kp * error + ki * integral + kd * derivative;
lastError = error;
return output;
}
};
2. 姿态解算
void calculateAttitude() {
// 读取MPU6050数据
int16_t ax, ay, az;
int16_t gx, gy, gz;
MPU6050_GetData(&ax, &ay, &az, &gx, &gy, &gz);
// 互补滤波
float dt = 0.01;// 采样周期10ms
roll = 0.98 * (roll + gx * dt) + 0.02 * atan2(ay, az);
pitch = 0.98 * (pitch + gy * dt) + 0.02 * atan2(ax, az);
yaw += gz * dt;
}
三、调试技巧
电机测试:首次通电一定要拆下螺旋桨!调参顺序:
先调稳定姿态再调定高最后调位置控制
我之前就犯过一个错误,上来就装上螺旋桨调试,结果飞机疯狂抖动把自己摔坏了...
页:
[1]