黄工无刷电机学习
直播中

尚文清

7年用户 1571经验值
私信 关注
[问答]

如何设计出一个利用PPM控制无人机动作的四轴无人机?

如何设计出一个利用PPM控制无人机动作的四轴无人机?

回帖(1)

qwe041

2021-9-23 09:40:37
1、前言
前面两次我们成功的将PPM信号的读取、储存和油门处理完成了,这次我们要开始真正的控制无人机,首先我们要了解无人机前后,左右,旋转,升降的原理。


2、动作原理
引用:https://blog.csdn.net/weixin_35703797/article/details/52072105
我觉得他的博客讲的非常清晰,大家可以阅读以下。
我直接使用博主的结论:


*1号电机(前左)= 悬停油门 + 右倾的量 - 前飞的量 - 旋转的量
*2号电机(前右)= 悬停油门 - 右倾的量 - 前飞的量 + 旋转的量
*3号电机(后左)= 悬停油门 + 右倾的量 + 前飞的量 + 旋转的量
*4号电机(后右)= 悬停油门 - 右倾的量 + 前飞的量 - 旋转的量


3、程序设计
这里我预先加入了上锁解锁模式


/*****************************用于处理遥控器的命令和PID输出的综合控制程序**********************************
*2021.2.17 完成没有PID干预的遥控器四通道(前后,左右,油门,转向)的综合控制,采用数据帧不排序直接处理
*
*
*
*
*1号电机(前左)= 悬停油门 + 右倾的量 - 前飞的量 - 旋转的量
*2号电机(前右)= 悬停油门 - 右倾的量 - 前飞的量 + 旋转的量
*3号电机(后左)= 悬停油门 + 右倾的量 + 前飞的量 + 旋转的量
*4号电机(后右)= 悬停油门 - 右倾的量 + 前飞的量 - 旋转的量
**************/


/**  
  *  功能:将处理的数据控制电机
  *  入口参数:
  *  返回值:
  */
void DataOutput_ToMOT(uint8_t rc_lock)
{               


        if(rc_lock == 0)//已解锁
        {
                Rc.mot1 = Rc.THROTTLE+((int)Rc.ROLL-1500)-((int)Rc.PITCH-1500)-((int)Rc.YAW-1500);
                Rc.mot2 = Rc.THROTTLE-((int)Rc.ROLL-1500)-((int)Rc.PITCH-1500)+((int)Rc.YAW-1500);
                Rc.mot3 = Rc.THROTTLE+((int)Rc.ROLL-1500)+((int)Rc.PITCH-1500)+((int)Rc.YAW-1500);
                Rc.mot4 = Rc.THROTTLE-((int)Rc.ROLL-1500)+((int)Rc.PITCH-1500)-((int)Rc.YAW-1500);
        }
        else       
        {
                Rc.mot1=0;
                Rc.mot2=0;
                Rc.mot3=0;
                Rc.mot4=0;
        }
        MOT_Control(Rc.mot1,Rc.mot2,Rc.mot3,Rc.mot4);


}


其实非常简单,MOT_Control就是我在stm32基础篇的PWM驱动无刷电机中使用的程序,只需要将处理好的数据写入电机对应的定时器即可。
这里我预留了一个全局变量rc_lock(0,解锁;1,上锁),我现在直接软件设定为0,默认解锁模式,后面我们为了安全,可以将rc_lock通过遥控器控制改变。比如辅助通道1接收到信号,rc_lock=0,再一次=1,之类的都可以。


4、总结
PPM信号控制无人机非常重要,我们要确保数据正确,及时。只有这样后期的PID才能正常发挥作用。所以PPM信号一定要正确。这就是我为什么将接收PPM信号设计为5Hz的原因,就像,PPM信号没有不要紧,顶多就是动作多做一会儿,有PID在把关,不会出现很大错误,但为了追求速度而导致PPM信号出错,炸机是小事,炸到人就是大事了。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分