新闻中心

EEPW首页>嵌入式系统>设计应用> 单片机解码PPM信号

单片机解码PPM信号

作者: 时间:2016-11-27 来源:网络 收藏
无线遥控就是利用高频无线电波实现对模型的控制。如天地飞的的6通道2.4 GHz遥控器,一套200多块,具有自动跳频抗干扰能力,从理论上讲可以让上百人在同一场地同时遥控自己的模型而不会相互干扰。而且在遥控距离方面也颇具优势,2.4 GHz遥控系统的功率仅仅在100 mW以下,而它的遥控距离可以达到1km以上。


遥控器发射机、接收机原理

每个通道信号脉宽0~2ms,变化范围为1~2ms之间。1帧PPM信号长度为20ms,理论上最多可以有10个通道,但是同步脉冲也需要时间,模型遥控器最多9个通道。

本文引用地址://m.amcfsurvey.com/article/201611/322110.htm

PPM格式


只连接了通道3(油门)


arduino要测量脉宽时间很简单。有专门的库函数pulseIn( )。问题在于这个库函数使用查询方式,程序在测量期间一直陷在这里,CPU利用率太低。因此下面代码采用中断方式,效率很高。
代码参考:http://arduino.cc/forum/index.php/topic,42286.0.html
ARDUINO 代码复制打印

        
  1. //read PPM signals from 2 channels of an RC reciever
  2. //http://arduino.cc/forum/index.php/topic,42286.0.html
  3. //接收机两个通道分别接arduino的数字口2、3脚
  4. //Most Arduino boards have two external interrupts: numbers 0 (on digital pin 2) and 1 (on digital pin 3).
  5. //The Arduino Mega has an additional four: numbers 2 (pin 21), 3 (pin 20), 4 (pin 19), and 5 (pin 18).
  6. intppm1 =2;
  7. intppm2 =3;
  8. unsignedlongrc1_PulseStartTicks,rc2_PulseStartTicks;
  9. volatileintrc1_val, rc2_val;
  10. voidsetup(){
  11. Serial.begin(9600);
  12. //PPM inputs from RC receiver
  13. pinMode(ppm1,INPUT);
  14. pinMode(ppm2,INPUT);
  15. // 电平变化即触发中断
  16. attachInterrupt(0, rc1, CHANGE);
  17. attachInterrupt(1, rc2, CHANGE);
  18. }
  19. voidrc1()
  20. {
  21. // did the pin change to high or low?
  22. if(digitalRead(ppm1)==HIGH)
  23. rc1_PulseStartTicks =micros(); // store the current micros() value
  24. else
  25. rc1_val =micros()- rc1_PulseStartTicks;
  26. }
  27. voidrc2()
  28. {
  29. // did the pin change to high or low?
  30. if(digitalRead(ppm2)==HIGH)
  31. rc2_PulseStartTicks =micros();
  32. else
  33. rc2_val =micros()- rc2_PulseStartTicks;
  34. }
  35. voidloop(){
  36. //print values
  37. Serial.print("channel 1: ");
  38. Serial.print(rc1_val);
  39. Serial.print(" ");
  40. Serial.print("channel 2: ");
  41. Serial.println(rc2_val);
  42. }

上一页 1 2 下一页

关键词:单片机解码PPM信

评论


技术专区

关闭