用stm32读取遥控器接收机PPM信号各通道值

article/2025/9/14 14:41:18

引言

无人机遥控器接收机接收方式可以在遥控上设置成PPM模式和S.BUS模式,用示波器观察接收机信号输出引脚可以得到一系列的方波,很像PWM方波,而我们所需要的是七,八个或更多的通道信号,多路的PWM信号调制在同一通道上就是PPM调制,而把一路通道上的多路PWM信号读取还原出来就是本文主要干的事

PPM信号

简单地说就是周期20ms,单个PWM脉宽在1000us~2000us,多路PWM信号在同一个通道上的信号,差不多就是长这样此图转载自https://blog.csdn.net/yibu_refresh/article/details/45752131?utm_source=blogxgwz1&utm_medium=distribute.pc_relevant.none-task-blog-title-8&spm=1001.2101.3001.4242
值得注意的是,通道中,所有低电平脉宽一样,都是500us
很容易想到用输入捕获来获取每个PWM脉宽,即可获得从遥控器发出来的信息
但是我没有用输入捕获,而是用了外部中断,检测到下降沿触发中断,在中断中计时,即可获得每个PWM脉宽
主要程序源码如下
初始化程序

 void PPM_Init()//使用PE2
{GPIO_InitTypeDef GPIO_InitStructure;EXTI_InitTypeDef EXTI_InitStructure;NVIC_InitTypeDef NVIC_InitStructure;RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE, ENABLE);//使能GPIOA,GPIOE时钟GPIO_InitStructure.GPIO_Pin=GPIO_Pin_2 ;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN;GPIO_Init(GPIOE, &GPIO_InitStructure);RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOE, EXTI_PinSource2);//PE2 连接到中断线2EXTI_InitStructure.EXTI_Line = EXTI_Line2;EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;EXTI_InitStructure.EXTI_LineCmd = ENABLE;EXTI_Init(&EXTI_InitStructure);NVIC_InitStructure.NVIC_IRQChannel = EXTI2_IRQn;//外部中断2NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x03;//抢占优先级3NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x02;//子优先级2NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//使能外部中断通道NVIC_Init(&NVIC_InitStructure);//配置
}

这个是 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加1if(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。

有错误的话请指正,欢迎交流学习!


http://chatgpt.dhexx.cn/article/fqdRiqmP.shtml

相关文章

气体浓度PPM与mg/m3的换算关系

1)换算方法之一:《空气和废气检测分析方法(第四版增补版)》(中国环境科学出版社)空气中气体污染物浓度的表示方法 空气中污染物的浓度是以单位体积内所含污染物的质量来表示,即毫克每立方米…

ppm与LSB含义,换算

n表示ADC位数 关于PPM与LSB 一、ppm:百万分之一 ppm是英文part per million的缩写,表示百万分之几,在不同的场合与某些物理量组合,常用于表示器件某个直流参数的精度。下面举例说明。 1.用于描述电压基准(Voltage …

理学知识01-ppm、ppb、ppt换算

1. 浓度 浓度是分析化学中的一个名词。含义是以1升溶液中所含溶质的摩尔数表示的浓度。以单位体积里所含溶质的物质的量(摩尔数)来表示溶液组成的物理量,叫作该溶质的摩尔浓度,又称该溶质物质的量浓度。 2. 浓度单位 在文献阅读过…

元器件温度系数(ppm/℃)是什么?

温漂也称为零点漂移或者温度漂移,一般指环境温度变化时引起半导体参数的变化,这样会造成静态工作点的不稳定,使电路动态参数不稳定,甚至使电路无法正常工作。 温度系数是材料的物理属性随着温度变化而变化的速率。常用单位是&…

SPP、ASPP与PPM

SPP、ASPP与PPM SPPPPMASPP SPP SPP模块是何凯明大神在2015年的论文《Spatial Pyramid Pooling in Deep ConvolutionalNetworks for Visual Recognition》中被提出。 在R-CNN中需要固定输入图片的尺寸,因为卷积层后面的全连接层的结构是固定的。但在现实中&#xf…

PPM文件

PPM文件 简介文件分类及扩展举例 简介 PPM(Portable Pixmap Format)是一种简单的图像格式,仅包含格式、图像宽高、bit数等信息和图像数据。 用txt打开.ppm文件的话,文件内容会如下所示: 文件分类及扩展 除开PPM还有两个与之相关…

ppm理解与代码实现

PWM指的是脉宽调制,狭义说就是舵机信号中正脉冲宽度,就是高电平宽度来表示控制量大小,PPM是脉冲和脉冲之间间隔调制,狭义的说,对于遥控器输出或者接收机输出而言,两个脉冲上升沿之间间隔表示控制量大小.在遥控设备的传统中PWM通常是单通道的控制量,而PPM则是以帧为单位,帧内每个…

[图像处理] PPM、PGM、PBM图像格式剖析

今天突然需要用到PPM这个图像文件格式,之前没见过,在此记录一下。 PPM、PGM、PBM这三个图像文件格式很少见,其实也不难,分别用于彩色图像、灰度图像、二值图像。这里以PPM格式为例。 PPM格式有两种类型:字节码和ASCII。…

PPM文件格式详解

PPM图像格式是由Jef Poskanzer 在1991年所创造的。 PPM(Portable Pixmap Format)还有两位兄长,大哥名叫「PBM」,二哥人称「PGM」,他们三兄弟各有所长,下面为你们一一介绍: PBM 是位图&#xf…

什么是ppm,如何转化到西格玛水平

本文共678字,预计阅读需要2.5分钟 我们经常听到,如果一家公司的质量水平达到了六个西格玛水平,那么也就意味着在100万次出错机会中出现的缺陷数不会超过3.4个,也就是3.4ppm。那ppm到底是什么呢? ppm是英文parts per mi…

PPM信号介绍

原文地址:http://nicekwell.net/blog/20161223/ppmxin-hao-jie-shao.html 我们知道PWM信号可以控制舵机,一般信号周期是20ms,脉宽在500us~2500us之间。   实际上这种pwm信号不仅可以控制舵机,航模中使用的电调(有刷和…

晶振PPM指标、频率和时间偏差

目录 PPM的含义频率随温度的变化振荡器的分类 PPM的含义 PPM是Parts Per Million的缩写,定义为百万分之一,1ppm即是一百万分之一。 PPM是晶振、TCXO等振荡器的一个重要参数,它代表频率误差的精准度,PPM值越小越精准。 频率随温度…

Laravel快速接入JWT用户认证(多用户认证)tymon/jwt-auth

JWT应用 创建新项目安装快速接入创建 Token 完成接口多用户认证创建 Admin JWT 是 JSON Web Token 的缩写,它是一个规范,让用户和服务器之间传递安全可靠的信息。 创建新项目 创建一个 Laravel的新项目,我们依然推荐大家使用 LTS 的版本&am…

JIT是什么

什么是JIT 一些其他解释的网站:http://www.sohu.com/a/169704040_464084 1、动态编译(dynamic compilation)指的是“在运行时进行编译”;与之相对的是事前编译(ahead-of-time compilation,简称AOT&#xf…

JWT入门教程

简介 JWT,JSON Web Token,开放的、行业标准(RFC 7519),用于网络应用环境间安全传递声明。JWT的声明一般被用来在身份提供者和服务提供者间传递被认证的用户身份信息,以便于从资源服务器获取资源,也可以增加一些额外的…

JT项目-1

DAY01 学习京淘的意义 1 为什么选择电商项目作为java培优部分的重要项目 火(用户量广) 技术难点多,高(高并发,高可用)尤其是在中国 谷歌是全球并发最高的网站 学习成本低(无需精通业务部分) 2 学习完京淘项目对我们的就业有什么好处 代替1-2年工作经验 技术就业范…

JWT --- 入门学习

不知道为什么,不用springboot test测试或者启动类启动,会报这个错误,找不到类路径 1.常见的认证机制 basic auth : 每次请求都会携带用户的username,password,易被黑客拦截。 Cookie auth : 我们请求服务器,创建一个session对象,…

Jetty

本文介绍一个使用Jetty开发的Web的小例子。 Jetty是一个开源的servlet容器,它为基于Java的web容器(例如JSP和servlet)提供运行环境。可以把它理解为和Tomcat一样,不过Jetty更小更轻量级。如果想更深入学习Jetty推荐看&#xff1a…

JWT入门详解

目录 一、JWT简介 1.什么是JWT? 2.为什么要使用JWT? 二、JWT的工作原理 三、JWT的组成 1.Header(头部) 2.Payload(载荷) Reserved claims(保留) Public claims(公有) Private claims(私有) 3.s…