單片機(jī)解碼PPM信號(hào)
上述代碼每個(gè)通道都要占用一個(gè)中斷口。但是一般的Arduino只有數(shù)字口2、3具有中斷功能,也就是說(shuō)只能接兩個(gè)通道。如果想使用更多的通道,就需要用mega了,mega有5個(gè)外部中斷源。其實(shí),還有一種簡(jiǎn)單辦法可以用一個(gè)中斷接收所有通道。這就是繞過(guò)接收機(jī)的解碼電路,使用arduino直接對(duì)PPM信號(hào)解碼。這種方式麻煩的地方是需要拆開(kāi)接收機(jī),把解碼前的PPM信號(hào)引出來(lái)。
本文引用地址:http://m.butianyuan.cn/article/201611/322110.htm參考:http://diydrones.com/profiles/blogs/705844:BlogPost:38393
打開(kāi)接收機(jī)后,尋找PPM信號(hào)接口有幾種辦法:
1. 查芯片資料,如Futaba接收機(jī)使用BU4015BF移位寄存器芯片,管腳1或9焊一根線引出即可。
2. 使用示波器
3. 使用arduino,寫入測(cè)量脈寬的程序,在電路板上找吧,直到出現(xiàn)一些隨機(jī)數(shù)估計(jì)就是了。
找到以后使用下面代碼進(jìn)行解碼。此段代碼使用查詢方式,效率較低。更有效率的辦法是使用兩個(gè)中斷。一個(gè)中斷檢測(cè)同步信號(hào),另一個(gè)中斷處理PPM信號(hào)。ARDUINO 代碼復(fù)制打印
- //http://diydrones.com/profiles/blogs/705844:BlogPost:38393
- #define channumber4//How many channels have your radio?
- intvalue[channumber];
- voidsetup()
- {
Serial.begin(57600);//Serial Begin pinMode(3,INPUT);//Pin 3 as input - }
- voidloop()
- {
while(pulseIn(3,LOW)<5000){}//Wait for the beginning of the frame for(intx=0; x<=channumber-1; x++)//Loop to store all the channel position { value[x]=pulseIn(3,LOW); } for(intx=0; x<=channumber-1; x++)//Loop to print and clear all the channel readings { Serial.print(value[x]);//Print the value Serial.print(" "); value[x]=0;//Clear the value afeter is printed } Serial.println("");//Start a new line - }
評(píng)論