新聞中心

        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://www.104case.com/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)閉
        主站蜘蛛池模板: 上林县| 红安县| 五台县| 四会市| 冷水江市| 中方县| 剑川县| 淳安县| 雷山县| 迭部县| 淄博市| 通榆县| 荥经县| 大渡口区| 无极县| 安国市| 沿河| 泾源县| 顺义区| 嘉峪关市| 英吉沙县| 桃园市| 高雄市| 精河县| 万盛区| 宁城县| 青龙| 自贡市| 怀来县| 洛扎县| 盘锦市| 北海市| 太仆寺旗| 慈利县| 澎湖县| 扎兰屯市| 民县| 大英县| 紫阳县| 沾益县| 平罗县|