新聞中心

EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 單片機(jī)解碼PPM信號(hào)

單片機(jī)解碼PPM信號(hào)

作者: 時(shí)間:2016-11-27 來(lái)源:網(wǎng)絡(luò) 收藏
無(wú)線遙控就是利用高頻無(wú)線電波實(shí)現(xiàn)對(duì)模型的控制。如天地飛的的6通道2.4 GHz遙控器,一套200多塊,具有自動(dòng)跳頻抗干擾能力,從理論上講可以讓上百人在同一場(chǎng)地同時(shí)遙控自己的模型而不會(huì)相互干擾。而且在遙控距離方面也頗具優(yōu)勢(shì),2.4 GHz遙控系統(tǒng)的功率僅僅在100 mW以下,而它的遙控距離可以達(dá)到1km以上。


遙控器發(fā)射機(jī)、接收機(jī)原理

每個(gè)通道信號(hào)脈寬0~2ms,變化范圍為1~2ms之間。1幀PPM信號(hào)長(zhǎng)度為20ms,理論上最多可以有10個(gè)通道,但是同步脈沖也需要時(shí)間,模型遙控器最多9個(gè)通道。

本文引用地址:http://butianyuan.cn/article/201611/322110.htm

PPM格式


只連接了通道3(油門)


arduino要測(cè)量脈寬時(shí)間很簡(jiǎn)單。有專門的庫(kù)函數(shù)pulseIn( )。問(wèn)題在于這個(gè)庫(kù)函數(shù)使用查詢方式,程序在測(cè)量期間一直陷在這里,CPU利用率太低。因此下面代碼采用中斷方式,效率很高。
代碼參考:http://arduino.cc/forum/index.php/topic,42286.0.html
ARDUINO 代碼復(fù)制打印
  1. //read PPM signals from 2 channels of an RC reciever
  2. //http://arduino.cc/forum/index.php/topic,42286.0.html
  3. //接收機(jī)兩個(gè)通道分別接arduino的數(shù)字口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. // 電平變化即觸發(fā)中斷
  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. }

上一頁(yè) 1 2 下一頁(yè)

關(guān)鍵詞: 單片機(jī)解碼PPM信

評(píng)論


技術(shù)專區(qū)

關(guān)閉