单片机学习小组
登录
直播中
刘埃生
8年用户
1791经验值
私信
关注
如何去实现PPM信号的接收与存储设计呢
开启该帖子的消息推送
PPM
信号
遥控器
什么是PPM?怎样去读取PPM信号呢?
如何去实现PPM信号的接收与存储设计呢?
回帖
(1)
刘景
2022-3-1 11:03:08
1、前言
由于时间原因,我使用的遥控器是直接买的成品,富斯I6x+IA6B接收机,据说是一代神控,富斯的遥控器总共有ibus模式、***us模式、PPM模式。我使用的是PPM模式。
2、什么是PPM
PPM信号其实就是很多个PWM信号综合到一起,形成一路PWM信号的形式叫做PPM信号。
PPM信号一帧数据分为低电平(0.5ms)+高电平(0.5ms-1.5ms),高电平长度与PWM占空比成正比。因为一帧信号最多要2ms,信号周期为20ms,所以理论一次PPM信号可以发送10帧数据,但是由于要确定帧头信号,所以要加入同步帧,真正的PPM信号里面最多有9帧数据帧。
3、读取PPM
根据PPM的发送原理,我们很轻易就可以想到通过测量电平的时间就可以获得PPM信号的数据帧。有两种方法(1)根据GPIO的高电平输入同时开始定时器计时,(2)使用TIM定时器的输入捕获功能。
因为无人机属于比较危险的玩具,一旦失去控制后果不堪设想,从安全角度出发我使用比较稳妥的
定时器输入捕获方法
。
4、程序设计
定时器输入捕获的初始化不在赘述,在stm32基础篇有详细介绍。直接看PPM信号的接收,存储。
uint16_t PPM_Sample_Cnt=0;
uint32_t PPM_Time=0;
uint16_t PPM_Okay=0;
uint16_t PPM_Databuf[8]={0};
uint8_t TIM2_CH2_CAPTURE_STA=0;
/**
* 功能:TIM2_ch1中断服务函数,接收PPM信号储存在PPM_Databuf中
* 入口参数:
* 返回值:
*/
void TIM2_IRQHandler(void)
{
if(TIM_GetITStatus(TIM2,TIM_IT_CC2)==!RESET)//捕获中断
{
if(TIM2_CH2_CAPTURE_STA&0x01)//符合条件的话说明上次捕获了高电平,那么这次捕获的一定是低电平
{
PPM_Time=TIM_GetCapture2(TIM2);
if(PPM_Time>0)
PPM_Time++;
if(PPM_Okay==1)
{
PPM_Databuf[PPM_Sample_Cnt]=PPM_Time;
PPM_Sample_Cnt++;
if(PPM_Sample_Cnt>8)
PPM_Okay=0;
}
if(PPM_Time>7000)//识别到帧尾
{
PPM_Okay=1;
PPM_Sample_Cnt=0;
}
TIM_OC2PolarityConfig(TIM2,TIM_ICPolarity_Rising);
TIM2_CH2_CAPTURE_STA=0;//清掉标志位准备开始下一次上升沿和下降沿检测
}
else
{
TIM_SetCounter(TIM2,0);//以上为清零
TIM2_CH2_CAPTURE_STA|=0x01;//高电平指示被赋值
TIM_OC1PolarityConfig(TIM2,TIM_ICPolarity_Falling); //当捕获上升沿后改为捕获下降沿
}
}
TIM_ClearITPendingBit(TIM2, TIM_IT_CC2|TIM_IT_Update); //清除中断标志位,一定不要忘,要不然下次进不了中断
}
因为PPM信号最长为2ms,但是空白数据帧会超过2ms,所以我们只需要判断有一个数据超过2ms即可认定为是上一次PPM信号的最后一帧,即刻开始接收最新的PPM信号的第一帧,因为我的遥控器是十通道,但是我还用不到这么多,所以设计接收八通道,预留两个通道备用。
最后接收到的PPM数据帧储存在PPM_Databuf[8]这个数组中。
5、总结
PPM信号
是现在多通道控制领域比较常见的一种
串行信号
,但是它也有一个重大的缺点,就是最快需要20ms才能接收一次数据。这也就是信号频率只有50Hz。对于一些高精度仪器不可用,
ibus和***us是并行多通道数据传输方案
,在频率上优于PPM,所以后期可以升级信号模式。
1、前言
由于时间原因,我使用的遥控器是直接买的成品,富斯I6x+IA6B接收机,据说是一代神控,富斯的遥控器总共有ibus模式、***us模式、PPM模式。我使用的是PPM模式。
2、什么是PPM
PPM信号其实就是很多个PWM信号综合到一起,形成一路PWM信号的形式叫做PPM信号。
PPM信号一帧数据分为低电平(0.5ms)+高电平(0.5ms-1.5ms),高电平长度与PWM占空比成正比。因为一帧信号最多要2ms,信号周期为20ms,所以理论一次PPM信号可以发送10帧数据,但是由于要确定帧头信号,所以要加入同步帧,真正的PPM信号里面最多有9帧数据帧。
3、读取PPM
根据PPM的发送原理,我们很轻易就可以想到通过测量电平的时间就可以获得PPM信号的数据帧。有两种方法(1)根据GPIO的高电平输入同时开始定时器计时,(2)使用TIM定时器的输入捕获功能。
因为无人机属于比较危险的玩具,一旦失去控制后果不堪设想,从安全角度出发我使用比较稳妥的
定时器输入捕获方法
。
4、程序设计
定时器输入捕获的初始化不在赘述,在stm32基础篇有详细介绍。直接看PPM信号的接收,存储。
uint16_t PPM_Sample_Cnt=0;
uint32_t PPM_Time=0;
uint16_t PPM_Okay=0;
uint16_t PPM_Databuf[8]={0};
uint8_t TIM2_CH2_CAPTURE_STA=0;
/**
* 功能:TIM2_ch1中断服务函数,接收PPM信号储存在PPM_Databuf中
* 入口参数:
* 返回值:
*/
void TIM2_IRQHandler(void)
{
if(TIM_GetITStatus(TIM2,TIM_IT_CC2)==!RESET)//捕获中断
{
if(TIM2_CH2_CAPTURE_STA&0x01)//符合条件的话说明上次捕获了高电平,那么这次捕获的一定是低电平
{
PPM_Time=TIM_GetCapture2(TIM2);
if(PPM_Time>0)
PPM_Time++;
if(PPM_Okay==1)
{
PPM_Databuf[PPM_Sample_Cnt]=PPM_Time;
PPM_Sample_Cnt++;
if(PPM_Sample_Cnt>8)
PPM_Okay=0;
}
if(PPM_Time>7000)//识别到帧尾
{
PPM_Okay=1;
PPM_Sample_Cnt=0;
}
TIM_OC2PolarityConfig(TIM2,TIM_ICPolarity_Rising);
TIM2_CH2_CAPTURE_STA=0;//清掉标志位准备开始下一次上升沿和下降沿检测
}
else
{
TIM_SetCounter(TIM2,0);//以上为清零
TIM2_CH2_CAPTURE_STA|=0x01;//高电平指示被赋值
TIM_OC1PolarityConfig(TIM2,TIM_ICPolarity_Falling); //当捕获上升沿后改为捕获下降沿
}
}
TIM_ClearITPendingBit(TIM2, TIM_IT_CC2|TIM_IT_Update); //清除中断标志位,一定不要忘,要不然下次进不了中断
}
因为PPM信号最长为2ms,但是空白数据帧会超过2ms,所以我们只需要判断有一个数据超过2ms即可认定为是上一次PPM信号的最后一帧,即刻开始接收最新的PPM信号的第一帧,因为我的遥控器是十通道,但是我还用不到这么多,所以设计接收八通道,预留两个通道备用。
最后接收到的PPM数据帧储存在PPM_Databuf[8]这个数组中。
5、总结
PPM信号
是现在多通道控制领域比较常见的一种
串行信号
,但是它也有一个重大的缺点,就是最快需要20ms才能接收一次数据。这也就是信号频率只有50Hz。对于一些高精度仪器不可用,
ibus和***us是并行多通道数据传输方案
,在频率上优于PPM,所以后期可以升级信号模式。
举报
更多回帖
rotate(-90deg);
回复
相关问答
PPM
信号
遥控器
单片机解码
ppm
单片机接受航模遥控器
信号
2018-06-19
5991
请问FPGA怎么解调模拟
信号
?
2019-05-05
2870
怎么
实现
STM32采集无人机遥控器
PPM
信号
?
2021-11-18
1065
请问如何
去
实现
基于软件无线电的
信号
接收
模块?
2021-04-20
1067
用单片机接受航模遥控器的
信号
,请问这种
接收
机发送的是什么
信号
?
2018-06-19
5871
如何
去
实现
STM32的USART串口
接收
数据处理
呢
2021-12-09
1060
STM32F4数据的
存储
和读取该如何
去
实现
呢
2021-12-15
1692
如何
去
实现
STM8串口
接收
字符串的中断源码
呢
2021-12-09
1427
如何
去
实现
SBUS
信号
的编码与解码
呢
2021-12-20
3792
如何
去
实现
Stm32 Uart用DMA的方式
接收
数据
呢
2021-12-14
2593
发帖
登录/注册
20万+
工程师都在用,
免费
PCB检查工具
无需安装、支持浏览器和手机在线查看、实时共享
查看
点击登录
登录更多精彩功能!
首页
论坛版块
小组
免费开发板试用
ebook
直播
搜索
登录
×
20
完善资料,
赚取积分