MiniFly四轴飞行器程序框架 衔接项目 学习笔记

一、程序框架 

 radiolinkTask :无线通信任务。该任务主要负责接收从 NRF51822 发送(串口方式)过
来的数据,然后对数据进行打包和校验,打包成 ATKP 格式并校验无误后发送到
atkpRxAnlTask 的接收队列里,同时回传一帧数据给 NRF51822。
usblinkRxTask :USB 通信接收任务。该任务主要负责接收上位机发下来(USB 虚拟串
口方式)的数据,然后对数据进行打包和校验,打包成 ATKP 格式并校验无误后发送到
atkpRxAnlTask 的接收队列里。
atkpRxAnlTask :ATKP 数据包接收处理任务。该任务主要是处理遥控器和上位机发下
来的数据包,解析到的控制指令则发送到 stabilizerTask 中去。
stabilizerTask: :四轴平衡控制任务。该任务运行的内容比较多,也是比较关键的内容。
包括传感器数据读取,数据融合,获取控制数据,空翻检测,异常检测,PID 控制,PWM
输出控制等。
wifilinkTask :手机控制任务。该任务主要是接收 WiFi 摄像头模块的串口数据,然后按
照 WiFi 摄像头模块通讯协议解析成对应的控制指令,并将控制指令发送到 stabilizerTask。
atkpTxTask: :ATKP 数据包发送任务。该任务主要是获取 stabilizerTask 中的传感器数据、
姿态数据、电机 PWM 输出数据等数据以定周期发送给 radiolinkTask 和 usblinkTxTask,由这
两个任务分别发送飞遥控器和上位机。
usblinkRxTask :USB 通信发送任务。该任务主要负责发送 atkpTxTask 发送过来的数据
包,这些数据包主要是传感器数据、姿态数据等。

二、核心代码

由于我们的第一个目标是要实现控制起飞降落,也就是油门控制量,那么下面我们直击该函数分析   

 control->thrust 为油门控制量,这个值增大四轴升高,减小则下降。 control->roll,control->pitch,control->yaw 为 PID 输出的姿态控制量 。油门控制量和姿态控制量整合后控制电机,整合代码在 power_control.c 文件的函数 powerControl () 中实现,代码如下:

void powerControl(control_t *control)  /*功率输出控制*/
{
s16 r = control->roll / 2.0f;
s16 p = control->pitch / 2.0f;
motorPWM.m1 = limitThrust(control->thrust - r - p + control->yaw);
motorPWM.m2 = limitThrust(control->thrust - r + p - control->yaw);
motorPWM.m3 = limitThrust(control->thrust + r + p + control->yaw);
motorPWM.m4 = limitThrust(control->thrust + r - p - control->yaw); 
if (motorSetEnable)
{
motorPWM=motorPWMSet;
}
motorsSetRatio(MOTOR_M1, motorPWM.m1);  /*控制电机输出百分比*/
motorsSetRatio(MOTOR_M2, motorPWM.m2);
motorsSetRatio(MOTOR_M3, motorPWM.m3);
motorsSetRatio(MOTOR_M4, motorPWM.m4);
}

1.结构介绍

MiniFly 右上角为 M1 机臂,在代码中对应电机为 motorPWM.m1 ,然后顺时针依次为 M2,M3,M4。如果四轴受外力干扰导致 PITCH 轴向前倾斜 3 度,那么M1 和 M4 需要提高升力,M2 和 M3 减小升力来恢复平衡状态,所以有以下规则:

2.控制过程

Roll 方向(向右为正)旋转,为了恢复平衡,则 M3 和 M4 同侧出力,M1 和 M2 反向出力(m1 和 m2 的 Roll 为 - ,m3 和 m4 的 Roll 为 + );
Pitch 方向(向前为正)旋转,为了恢复平衡,则 M2 和 M3 同侧出力,M1 和 M4 反向出力(m1 和 m4 的 Pitch 为 - ,m2 和 m3 的 Pitch 为 + );
Yaw 方向(逆时针为正)旋转,为了恢复平衡,则 M1 和 M3 同侧出力,M2 和 M4 反向出力,(m2 和 m4 的 Yaw 为 - ,m1 和 m3 的 Yaw 为 + );
bool 型变量 motorSetEnable,为 true,使能手动设置电机占空比,这样可以方便单独调试某几个电机,默认不使能。
motorsSetRatio()当然就是设定对应电机定时器通道占空比的函数了,设定的占空比作用到 MOS 管,然后控制电机,从而控制四轴。

3.衔接思路

由于我们第一步是只想让它实现起飞降落,因此与方向无关,在只需在定高模式下引进我们的控制油门参量就可以了

猜你喜欢

转载自blog.csdn.net/seek97/article/details/81381137