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