STM32 四轴无人机的设计——处理遥控器PPM信号

1、前言

上一次我们已经成功接收并储存了从遥控器发送的PPM信号,但是你们知道遥控器的哪个通道对应PPM信号的哪一帧吗?没关系,我知道,哈哈,我自己测量了一下,将对应通道的数据帧位置统计了出来。

2、PPM数据帧分析

在这里插入图片描述
在这里插入图片描述
图1是我根据富斯的官方手册总结出来的,图二是我通过输入捕获,将每一个操作的数据帧测量出来。

3、数据帧分析

从上图中可以看出ch1对应的并不是data【0】,所以我们要对接收到的PPM信号进行处理,按照ch1、ch2、ch3…的顺序排列

4、程序设计

这个是我最开始接收到PPM信号,为了验证通道与数据对应时使用的排序

///**  
//  *  功能:数据整理函数,将接收到的PPM信号整理为ch1.2.3...的形式
//  *  入口参数:
//  *  返回值:
//  */
//extern uint8_t data_num[8]={4,0,5,1,6,2,7,3};
//extern uint16_t PPM_Arranged_Data[8]={0};
//void Data_Arrange(uint16_t *data)
//{
    
    
//	int i;
//	for(i=0;i<8;i++)
//	{
    
    
//		PPM_Arranged_Data[i]=data[data_num[i]];
//	}
//}

//void PPM_output(void)
//{
    
    
//	Data_Arrange(PPM_Databuf);
//}

后面我直接将PPM信号按位写入了遥控器信号的结构体中,免除了排序的步骤。

/**  
  *  功能:将从RC来的PPM信号数据写入对应Rc结构体
  *  入口参数:
  *  返回值:
  */
void PPM_DataArrange(uint16_t *data)
{
    
    
	Rc.ROLL = data[4];
	Rc.PITCH = data[0];
	Rc.THROTTLE = data[5];
	Rc.YAW = data[1];
	Rc.AUX1 = data[6];
	Rc.AUX2 = data[2];
	Rc.AUX3 = data[7];
	Rc.AUX4 = data[3];
}

这里通过数组指针,直接将各位数据写入遥控器的结构体中,后期操控的时候可以直接根据结构体名称对应,不需要再查看数据帧协议。
THROTTLE是节流阀的意思,在四旋翼中对应油门,我使用的是美国手,油门是左手上下杆。

5、下载实验

在这里插入图片描述
将左手摇杆推至中间(50%PWM),看到四个电机同时转动,说明数据接收、储存成功。(绿色小瓶为机头方向)

6、总结

本次我们只需要验证油门是否正确即可,下一次我们加入前后,左右,旋转三个动作,截止目前,总共使用了遥控器的四个通道,辅助通道的数据可以执行什么操作我们自行设计。

猜你喜欢

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