STM32 四轴无人机设计——PPM控制无人机动作

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信号出错,炸机是小事,炸到人就是大事了。

猜你喜欢

转载自blog.csdn.net/qq_44011116/article/details/113871079