查看: 771|回复: 1

无人机中级篇:第十一讲:遥控器PWM与PPM协议

[复制链接]

50

主题

857

帖子

1697

积分

金牌飞友

Rank: 6Rank: 6

积分
1697
飞币
840
注册时间
2017-8-7
发表于 2022-10-23 21:41:14 | 显示全部楼层 |阅读模式
传统的遥控器接收机是采用多路PWM的方式进行输出的,遥控器中有多少个通道,接收机中就有多少路PWM输出,例如下图中的遥控器有6个可用通道,其接收机也有6个PWM输出通道与之对应:


无人机中级篇:第十一讲:遥控器PWM与PPM协议-1.jpg

无人机中级篇:第十一讲:遥控器PWM与PPM协议-2.jpg

        此接收机除了PWM输出之外还有S.BUS协议输出方式,关于S.BUS我们已经在上一节中介绍过了,这里不再赘述。下面我们主要针对PWM信号输出来做讲解。

        接收机的1-7个PWM输出通道,都是以PWM的形式输出的,这就需要飞控能够采集并解析这些PWM信号,并为飞控所用。我们知道PWM信号所表示的数值就是高电平持续时间占用整个周期时长的百分比,例如下图所示:

无人机中级篇:第十一讲:遥控器PWM与PPM协议-3.jpg

       接收机输出的PWM与之前章节中讲述的电调需要接收的PWM完全一致。只不过我们需要使用飞控程序来读取接收机输出的PWM信号值。我们以第一个通道的PWM为例,讲述飞控程序对其处理的具体方法:

        (1)检测引脚由低点平变为高电平的时刻,并记录当前时间t0,表示高电平开始;
(2)检测引脚由高电平变为低点平的时刻,并记录当前时间t1,表示高电平结束;
(3)继续检测引脚由低点平变为高电平的时刻,并记录当前时间t2,表示一个PWM周期结束;
(4)计算高电平时常 = t1 - t0;
(5)计算整个PWM周期 = t2 - t0;
(6)计算PWM占空比 = 高电平时常 / PWM周期
        在STM32系列中,我们可以为GPIO引脚设置成PWM采集模式,并通过采集寄存器来读取当前PWM的周期和PWM占空比。  

无人机中级篇:第十一讲:遥控器PWM与PPM协议-4.jpg

        每一个遥控器通道都需要一个PWM采集器进行采集,但是对于STM32来说不可能使用多个定时器来采集多个通道的PWM,这对于STM32的资源来说十分浪费。因此采用的就是PPM编码。PPM编码是PWM的扩展协议,可以在一个管脚中传输多路PWM信号。
        PPM的频率通常是50Hz,周期长度20ms,每一个周期中可以存放最多10路PWM信号,每一路PWM的周期为2ms,如下图所示:

无人机中级篇:第十一讲:遥控器PWM与PPM协议-5.jpg

       使用STM32的管脚中断配合定时器中的计数可以准确的捕获一个周期内的PPM信号中的高低电平变化,每2ms就是一路PWM信号的周期。

378

主题

416

帖子

1173

积分

金牌飞友

Rank: 6Rank: 6

积分
1173
飞币
755
注册时间
2017-8-4
发表于 2022-10-23 21:48:28 | 显示全部楼层
PPM信号的每一路并不是固定2mS周期的,而是用周期代表信号宽度,即高低电平加起来算周期。并行PWM才是固定周期,用高电平脉宽算信号宽度。这点破事调试了好几天才发现。
您需要登录后才可以回帖 登录 | 加入联盟

本版积分规则

快速回复 返回顶部 返回列表