四旋翼飞行器的设计
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
acc)&&(check_gry==sum_gry)&&(check_
ang==sum_ang))
{
check_ok=1;
}
//-------- 以下为接收
控制变量 --------//
if(uart0_receiveend == 1)
// 如果控制数据接收已经完成
Delay_Ms(5); //P13.0 =
~P13.0;
//------------ 校验位
判断 ----------------//
s
u
m
_
acc=0x55+0x51+imu_buff [0]+imu_buff
[1]+imu_buff [2]+imu_buff [3]+imu_buff
angle_y = (imu_buff[21] * 256) +
(imu_buff[20]);
angle_y = angle_y / 32768.0 * 180;
angle_z = (imu_buff[23] * 256) +
(imu_buff[22]);
angle_z = angle_z / 32768.0 * 180;
if(moto_x2 < 0) moto_x2 = 0;
if(moto_x3 > 4000) moto_x3 = 4000;
if(moto_x3 < 0) moto_x3 = 0;
if(moto_x4 > 4000) moto_x4 = 4000;
if(moto_x4 < 0) moto_x4 = 0;
pid_pit_d_begin+uart0_control[10];
pid_yaw_p = pid_yaw_p_begin+uart0_
control[11];pid_yaw_d =pid_yaw_d_begin+
uart0_control[12];
Power=uart0_control[13];
buff[9]); // 从数组转换 GRYO 数据
gryo_x = gryo_x / 32768.0 * 2000;
gryo_y = (imu_buff[12] * 256) + (imu_
buff[11]);
gryo_y = gryo_y / 32768.0 * 2000;
gryo_z = (imu_buff[14] * 256) + (imu_
moto_x3 = (rc_thr * 15 + (+ pid_pit + pid_yaw));
moto_x4 = (rc_thr * 15 + (- pid_pit + pid_yaw));
if(moto_x1 > 4000) moto_x1 = 4000; if(moto_x1 < 0) moto_x1 = 0; if(moto_x2 > 4000) moto_x2 = 4000;
预定义)、姿态角度参数、校验参数、串口协 议参数 ( 主要定义输入输出的帧头帧尾和 所需数组长度 )、主循环时间参数。
以下是主要的程序源码 : void main(void) { R_MAIN_UserInit(); Delay_Ms(2000); while (1U) {
}
}
//-------- 以下为姿态数据ቤተ መጻሕፍቲ ባይዱ算 ----
----//
acc_x = (imu_buff[1] * 256) + (imu_
buff[0]); // 从数组转换 ACC 数据
acc_x = acc_x / 32768.0 * 16;
acc_y = (imu_buff[3] * 256) + (imu_
if(check_ok==1)
{
if((Power !
=0x90)&&(time_s<2))// 是否按下停机或与遥
控器失去联系
{
check_ok=0;
TDR01 =
4000 + (unsigned int)moto_x1; // 油门基准输出
1MS 为 4000
x*0.1>50) integral_x_sum=50;
else if (pid_rol_
i*integral_x*0.1<-50) integral_x_sum=-50;
else integral_x_
sum=pid_rol_i*integral_x*0.1;
if(pid_pit_i*integral_y*0.1>50)
基准输出 1MS 为 4000
}
else// 油 门 小
于 1.18MS 关闭电机输出
{
moto_x1 = 0;moto_x2 = 0;
moto_x3 = 0;moto_x4 = 0;
TDR01 = min_thr; TDR02 = min_thr; // 最小输
s
u
m
_
ang=0x55+0x53+imu_buff [18]+imu_buff
[19]+imu_buff [20]+imu_buff [21]+imu_buff
[22]+imu_buff [23]+imu_buff [24]+imu_buff [25];
if((check_acc==sum_
buff[2]);
acc_y = acc_y / 32768.0 * 16;
acc_z = (imu_buff[5] * 256) + (imu_
buff[4]);
acc_z = acc_z / 32768.0 * 16;
gryo_x = (imu_buff[10] * 256) + (imu_
100) -integral_y_sum+(pid_pit_d*0.08) * gryo_
y; //PID 计算公式,100 为姿态控制中立点 .
pid_yaw = 0;
moto_x1 = (rc_thr * 15 + (+ pid_rol + pid_yaw));
moto_x2 = (rc_thr * 15 + (- pid_rol + pid_yaw));
计算公式 --------//
pid_rol = (pid_rol_
p*0.08) * (angle_x + rc_rol - 100) +integral_x_
sum+(pid_rol_d*0.08) * gryo_x; //PID 计 算 公
式,X 方向 GRYO 为反向输出。
pid_pit = (pid_pit_p*0.08) * (angle_y + rc_pit -
TDR02 = 4000 + (unsigned int)moto_x2; // 油门
基准输出 1MS 为 4000
TDR03 = 4000 + (unsigned int)moto_x3; // 油门
基准输出 1MS 为 4000
TDR04 = 4000 + (unsigned int)moto_x4; // 油门
rol_i =pid_rol_i_begin+uart0_control[6];pid_rol_
d =pid_rol_d_begin+uart0_control[10];
pid_pit_
p=pid_pit_p_begin+uart0_control[8];pid_pit_i
=pid_pit_i_begin+uart0_control[9];pid_pit_d =
{
uart0_
receiveend = 0; // 接收读取,接收完成清零
if((uart0_
control[0] == 0x55) && (uart0_control[14] ==
0xEB))// 协议校验正确
{ time_s=0;
//1s 中断循环次数
integral_y_sum=50;
else if(pid_pit_
i*integral_y*0.1<-50) integral_y_sum=-50;
else integral_y_
sum=pid_pit_i*integral_y*0.1 ;
//-------- 以 下 为 PID
ms 定时器中断,系统时间开始
R_UART0_Start(); // 打开 COM0 端 口 57600-N-8-1
//--------I 的计算 ---
-------// 积分值 i 限制在 200 以内 且缩
小2倍
integral_x+=angle_x;
integral_y+=angle_y;
integral_z+=angle_z;
if(pid_rol_i*integral_
rc_thr =
uart0_control[1];rc_rol = uart0_control[2];
rc_
pit = uart0_control[3];rc_yaw = uart0_control[4];
pid_
rol_p =pid_rol_p_begin+uart0_control[8];pid_
电子科技 Electronics Technology
四旋翼飞行器的设计
李奥伟 黄 起 杨雪山 北华航天工业学院电子工程系 河北廊坊 065000
【文章摘要】 四旋翼飞行器也称为四旋翼直升
机,是一种有 4 个螺旋桨且螺旋桨呈十 字形交叉的飞行器。它广泛的应用于 民用航拍和军事侦查中,具有噪声低, 滞空时间长,耗能少,廉价且易于控制 等特点,在航模爱好者中得到广泛的 制作和改装。
【关键词】 四轴飞行器 ;十字模式 ;PID 调节
近年来,随着航模爱好者的增加,越来 越多的航模爱好者投向了四轴飞行器,也 即四旋翼。四旋翼在设计时可分为十字模 式和 X 模式,通过改变螺旋桨的转速来使 四旋翼进行俯仰、滚转、偏航三种基本的运 动。十字模式较为简单,每次只改变一个轴 上的两个桨的转速,而 X 模式是通过改变 四个桨的转速来改变四旋翼的运动姿态, 所以 X 模式的四旋翼可以进行更为精细的 调节。四旋翼的发展不仅是因为它的价格 达到了大众可以接受的范围,而且它的技 术能被越来越多的人掌握。我们现在所设 计的便是通过经典的 PID 来控制四旋翼的 飞行。 此次设计四旋翼采用的是十字模式, 用六通遥控器来进行控制,选用的机架是 F450 的机架、十寸桨 1045 和 1000kv 的无 刷电机。接下来就是进行飞控板的设计,我 们选用的是瑞萨的 R5F100LEA 芯片和串 口 6 轴加速度计 / 陀螺仪 MPU6050 模块, 在无线模块的选用中我们也使用了串口无 线,这样降低了设计的难度,同时也使程序 的编写更加简洁。 首先添加头文件 , 然后定义滚转俯仰 偏航的 PID 参数、积分定义,定义四个电机 输出参数、运动控制量参数(如最小油门的
[4]+imu_buff [5]+imu_buff [6]+imu_buff [7];
s
u
m
_
gry=0x55+0x52+imu_buff [9]+imu_buff
[10]+imu_buff [11]+imu_buff [12]+imu_buff
[13]+imu_buff [14]+imu_buff [15]+imu_buff [16];
出油门
TDR03 = min_thr; TDR04 = min_thr; // 最小输
出油门
}
}
void R_MAIN_UserInit(void)
{
EI();
R_TAU0_Channel0_Start(); // 打 开
电机 PWM 输出计时器
R_TAU0_Channel7_Start(); // 打 开
buff[13]);
gryo_z = gryo_z / 32768.0 * 2000;
angle_x = (imu_buff[19] * 256) +
(imu_buff[18]); // 从数组转换 ANGLE 数据
电子制作 005
电子科技 Electronics Technology
angle_x = angle_x / 32768.0 * 180;