模吧

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

33364查看 | 53回复

【大力电子】单片机解码PPM信号-深层了解遥控-为DIY控作准备

  [复制链接]
发表于 2014-5-3 09:47:15 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
单片机解码PPM信号--深层了解遥控----(该篇可为DIY控作准备)
无线遥控就是利用高频无线电波实现对模型的控制。如天地飞的的6通道2.4 GHz遥控器,一套200多块,具有自动跳频抗干扰能力,从理论上讲可以让上百人在同一场地同时遥控自己的模型而不会相互干扰。而且在遥控距离方面也颇具优势,2.4 GHz遥控系统的功率仅仅在100 mW以下,而它的遥控距离可以达到1km以上。
【大力电子】单片机解码PPM信号-深层了解遥控-为DIY控作准备 模型,遥控器,天地飞,FUTABA,接收机 作者:Marshal 5194
遥控器发射机、接收机原理
每个通道信号脉宽0~2ms,变化范围为1~2ms之间。1帧PPM信号长度为20ms,理论上最多可以有10个通道,但是同步脉冲也需要时间,模型遥控器最多9个通道。
【大力电子】单片机解码PPM信号-深层了解遥控-为DIY控作准备 模型,遥控器,天地飞,FUTABA,接收机 作者:Marshal 1787
PPM格式
【大力电子】单片机解码PPM信号-深层了解遥控-为DIY控作准备 模型,遥控器,天地飞,FUTABA,接收机 作者:Marshal 6351
只连接了通道3(油门)
arduino要测量脉宽时间很简单。有专门的库函数pulseIn( )。问题在于这个库函数使用查询方式,程序在测量期间一直陷在这里,CPU利用率太低。因此下面代码采用中断方式,效率很高。
1.  //read PPM signals from 2 channels of an RC reciever
2.  //http://arduino.cc/forum/index.php/topic,42286.0.html
3.   
4.  //接收机两个通道分别接arduino的数字口2、3脚
5.  //Most Arduino boards have two external interrupts: numbers 0 (on digital pin 2) and 1 (on digital pin 3).
6.  //The Arduino Mega has an additional four: numbers 2 (pin 21), 3 (pin 20), 4 (pin 19), and 5 (pin 18).
7.  int ppm1 = 2;  
8.  int ppm2 = 3;
9.   
10. unsigned long rc1_PulseStartTicks,rc2_PulseStartTicks;      
11. volatile int rc1_val, rc2_val;  
12.  
13. void setup() {
14.  
15.         Serial.begin(9600);  
16.  
17.         //PPM inputs from RC receiver
18.         pinMode(ppm1, INPUT);
19.         pinMode(ppm2, INPUT);
20.  
21.         // 电平变化即触发中断
22.         attachInterrupt(0, rc1, CHANGE);   
23.         attachInterrupt(1, rc2, CHANGE);   
24. }
25.  
26. void rc1()
27. {
28.         // did the pin change to high or low?
29.         if (digitalRead( ppm1 ) == HIGH)
30.                 rc1_PulseStartTicks = micros();    // store the current micros() value
31.         else
32.                 rc1_val = micros() - rc1_PulseStartTicks;
33. }
34.  
35. void rc2()
36. {
37.         // did the pin change to high or low?
38.         if (digitalRead( ppm2 ) == HIGH)
39.                 rc2_PulseStartTicks = micros();   
40.         else
41.                 rc2_val = micros() - rc2_PulseStartTicks;
42. }
43.  
44. void loop() {
45.  
46.         //print values
47.         Serial.print("channel 1:  ");
48.         Serial.print(rc1_val);  
49.         Serial.print("        ");
50.         Serial.print("channel 2:  ");   
51.         Serial.println(rc2_val);  
52. }
上述代码每个通道都要占用一个中断口。但是一般的Arduino只有数字口2、3具有中断功能,也就是说只能接两个通道。如果想使用更多的通道,就需要用mega了,mega有5个外部中断源。其实,还有一种简单办法可以用一个中断接收所有通道。这就是绕过接收机的解码电路,使用arduino直接对PPM信号解码。这种方式麻烦的地方是需要拆开接收机,把解码前的PPM信号引出来。
【大力电子】单片机解码PPM信号-深层了解遥控-为DIY控作准备 模型,遥控器,天地飞,FUTABA,接收机 作者:Marshal 2600
打开接收机后,寻找PPM信号接口有几种办法:
1.        查芯片资料,如Futaba接收机使用BU4015BF移位寄存器芯片,管脚1或9焊一根线引出即可。
2.        使用示波器
3.        使用arduino,写入测量脉宽的程序,在电路板上找吧,直到出现一些随机数估计就是了。
找到以后使用下面代码进行解码。此段代码使用查询方式,效率较低。更有效率的办法是使用两个中断。一个中断检测同步信号,另一个中断处理PPM信号。
ARDUINO 代码
1.  //http://diydrones.com/profiles/blogs/705844:BlogPost:38393
2.  #define channumber 4 //How many channels have your radio?
3.  int value[channumber];
4.   
5.  void setup()
6.  {
7.          Serial.begin(57600); //Serial Begin
8.          pinMode(3, INPUT); //Pin 3 as input
9.  }
10. void loop()
11. {
12.         while(pulseIn(3, LOW) < 5000){} //Wait for the beginning of the frame
13.         for(int x=0; x<=channumber-1; x++)//Loop to store all the channel position
14.         {
15.                 value[x]=pulseIn(3, LOW);
16.         }
17.         for(int x=0; x<=channumber-1; x++)//Loop to print and clear all the channel readings
18.         {
19.                 Serial.print(value[x]); //Print the value
20.                 Serial.print(" ");
21.                 value[x]=0; //Clear the value afeter is printed
22.         }
23.         Serial.println(""); //Start a new line
24. }
发表于 2021-6-28 22:00:27 | 显示全部楼层


非常有用,学习了!
回复 支持 1 反对 0

使用道具 举报

发表于 2020-6-11 09:06:00 | 显示全部楼层
非常有用,学习了!
回复 支持 1 反对 0

使用道具 举报

发表于 2020-6-5 13:58:38 | 显示全部楼层
寻找PPM信号接口有几种办法。关注这个。谢谢分享!
回复 支持 1 反对 0

使用道具 举报

发表于 2019-11-7 11:29:25 | 显示全部楼层
好贴,非常有帮助
回复 支持 1 反对 0

使用道具 举报

发表于 2019-6-13 13:14:35 | 显示全部楼层
学习了,感谢楼主的资料
回复 支持 1 反对 0

使用道具 举报

发表于 2019-4-28 18:54:21 | 显示全部楼层
顶起
回复 支持 1 反对 0

使用道具 举报

发表于 2019-3-14 21:55:23 | 显示全部楼层
好文章...收藏【大力电子】单片机解码PPM信号-深层了解遥控-为DIY控作准备 模型,遥控器,天地飞,FUTABA,接收机 作者:gosong 4329
回复 支持 1 反对 0

使用道具 举报

发表于 2019-3-6 20:38:00 | 显示全部楼层
非常有用,学习了!
回复 支持 1 反对 0

使用道具 举报

发表于 2019-3-2 22:15:05 | 显示全部楼层
有用,学习了,顶一下,支持支持
回复 支持 0 反对 1

使用道具 举报

发表于 2019-1-24 02:03:20 | 显示全部楼层
学习                                                  
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2014-5-3 10:56:27 | 显示全部楼层
沙发位,解析:
用微控器+数传模块做的控理论上通道数是可以达到几十上百的,主要取决于微处理器的处理能力和数传的带宽,就像现在的多核电脑和宽带网络一样的道理
发表于 2014-5-3 15:10:23 | 显示全部楼层
有用,学习了
发表于 2014-8-21 13:35:07 | 显示全部楼层
请教~ 如何利用PPM信号 做成通道开关?  就是用单片机解码PPM信号 然后控制三极管的通断?
发表于 2014-9-12 23:42:13 | 显示全部楼层
好形像的技术
发表于 2015-5-7 14:02:43 | 显示全部楼层
楼主,想问下PPM信号容易被干扰吗?我想控的高频头直接输出PPM给433,433放到AAT上,为了操作方便,控到aat最好连个2-3米的线才好操作

PPM用什么线传输?普通平行电缆还是用同轴带屏蔽层的电缆好?
发表于 2015-5-26 21:11:16 | 显示全部楼层
非常有用,学习了!
发表于 2015-10-8 13:52:38 | 显示全部楼层

非常有用,学习了!
发表于 2015-11-20 09:04:30 | 显示全部楼层
顶楼主,什么时候一起交流交流【大力电子】单片机解码PPM信号-深层了解遥控-为DIY控作准备 模型,遥控器,天地飞,FUTABA,接收机 作者:小冰 7123
发表于 2015-12-1 13:14:41 | 显示全部楼层
想用arduino生成4通道ppm信号,该怎么编程呢?
发表于 2016-1-5 22:29:35 | 显示全部楼层
楼主写的是PWM 不是PPM啊

点评

PWM和PPM是单路通道和多路复合通道的区别  发表于 2016-1-7 08:55
发表于 2016-1-6 22:39:49 | 显示全部楼层
好文章...收藏
发表于 2016-1-7 10:34:41 | 显示全部楼层
有用,学习了
发表于 2016-3-5 02:14:41 | 显示全部楼层
你好,我试过stm32解码天地飞WFR06S,摇杆正反方向转的电平时间是一样的,如何辨别转动的方向?
发表于 2016-3-23 17:10:06 | 显示全部楼层
有用,学习了
发表于 2016-3-27 23:17:10 | 显示全部楼层
顶顶顶顶顶顶顶
发表于 2016-6-8 14:23:23 | 显示全部楼层
楼主,看到你写的已从天地飞7中抓出PPM信号,想请教具体实现的方法,在接收机的什么地方接出线?我想把天7的接收机改成PPM输出。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|关于模吧|APP下载|广告报价|小黑屋|手机版|企业会员|商城入驻|联系我们|模吧 ( 冀公网安备13080502000084号 )

© 2013-2020 Moz8.com 模吧,玩出精彩!