用stm32读取遥控器接收机PPM信号各通道值 |
您所在的位置:网站首页 › 富斯ia6b接收机ppm接线 › 用stm32读取遥控器接收机PPM信号各通道值 |
引言
无人机遥控器接收机接收方式可以在遥控上设置成PPM模式和S.BUS模式,用示波器观察接收机信号输出引脚可以得到一系列的方波,很像PWM方波,而我们所需要的是七,八个或更多的通道信号,多路的PWM信号调制在同一通道上就是PPM调制,而把一路通道上的多路PWM信号读取还原出来就是本文主要干的事 PPM信号简单地说就是周期20ms,单个PWM脉宽在1000us~2000us,多路PWM信号在同一个通道上的信号,差不多就是长这样 这个是 PPM数据读取程序。 uint16_t PPM_Sample_Cnt=0; u32 PPM_Time=0; uint16_t PPM_Okay=0; uint16_t PPM_Databuf[8]={0}; void EXTI2_IRQHandler(void) { if(EXTI_GetITStatus(EXTI_Line2)!=RESET) { PPM_Time = TIM3->CNT; TIM3->CNT = 0; //读取完之后清空,该值每1us加1 if(PPM_Okay==1) { PPM_Sample_Cnt++; PPM_Databuf[PPM_Sample_Cnt-1]=PPM_Time; if(PPM_Sample_Cnt>=8) PPM_Okay=0; } if(PPM_Time>=2050) { PPM_Okay=1; PPM_Sample_Cnt=0; } } EXTI_ClearITPendingBit(EXTI_Line2);//清除LINE2上的中断标志位 }接下来在主函数中调用PPM_Databuf就可以知道脉宽值了 这个是主循环程序,在LCD屏幕上显示读取到的各个通道上的数 主循环程序。 while(1) { LCD_ShowNum(30,24*PPM_i,PPM_Databuf[PPM_i],16,16); PPM_i++; if(PPM_i>=8){PPM_i=0;} delay_ms(10); } 程序解释与注意事项用外部中断检测下降沿的好处是不需要进行其他的变换,通道值稳定,但需要借助一个定时器来计时,这段程序用的是定时器3,它每隔1us计数加一,为减小程序影响,直接读取TIM3->CNT的值,这个需要注意的是要把定时器时钟频率调到1M。 有错误的话请指正,欢迎交流学习! |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |