完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
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,所以后期可以升级信号模式。 |
|
|
|
只有小组成员才能发言,加入小组>>
3324 浏览 9 评论
3003 浏览 16 评论
3498 浏览 1 评论
9077 浏览 16 评论
4094 浏览 18 评论
1199浏览 3评论
615浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
603浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2343浏览 2评论
NUC980DK61YC启动随机性出现Err-DDR是为什么?
1902浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-31 04:40 , Processed in 1.000876 second(s), Total 50, Slave 41 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号