HOME > RC信号の監視

 RC信号の監視 

自律ロボットのRCによる強制制御を行う場合,RC受信機の監視が必要です.
ロボットの制御に負担をかけないように,別に8ピンPICを搭載してPICにRC受信機の監視をさせて 受信の有無だけを出力する信号を作りました.

こんな感じでFUTABAの受信機から信号を8ピンPIC12F675に入力.
CIMG2725.JPG

FUTABAのRC送信機の電源OFF,受信機の出力なしの場合. オシロの上が受信機の信号,下がPICマイコンの監視結果でLレベル.
CIMG2721.JPG

RC送信機の電源ON,受信機の出力ありの場合. オシロの上が受信機の信号,下がPICマイコンの監視結果でHレベルの変化.
CIMG2722.JPG

別メーカ(JR)のRC送受信機でも実験.
送信機の電源OFFでも,どういうわけか受信機は不安定な出力. でもPICマイコンでは正常な受信がないとしてLレベルを出力.
CIMG2726.JPG

プログラムについて,Hレベルのパルス幅とLレベルのパルス幅をそれぞれ監視し, 正常なパルス幅でHとLレベルが5回以上繰り返して検出された時にRC受信したと判断しています.

FUTABAのRC受信機の信号監視の動画
JRのRC受信機の信号監視の動画

プログラムは以下の通り,開発環境はMPLABとHITEC-Cを使いました.

プログラム

// RC送受信機による強制制御のためのRC受信機の信号検出プログラム
// RC受信機の信号をPICのGPXに入力,GPYから受信信号の有無を示すデジタル値を出力 
#include "pic.h"
#include "delay.h"
#include "delay.c"

__CONFIG(INTIO & WDTDIS & BORDIS & MCLRDIS);


main(){
	// initialize
	unsigned long pwL, pwH;			// Hレベル,Lレベルのパルス幅
	unsigned int cntL, cntH;		// 正常なパルス幅の信号のカウント回数
	OSCCAL=_READ_OSCCAL_DATA();
	GPIO=0x00;
	ANSEL=0x00;
	CMCON=0x07;
	TRIS1=1;						// GPIO1を入力に指定,スイッチ入力
	TRIS2=0;						// GPIO2を出力指定,=0:RC信号なし,=1:RC信号あり
	GPIO2=0;						// GPIO2初期値=0V
	pwL=pwH=0;						// 0で初期化
	cntL=cntH=0;					// 0で初期化

	while (1){
		// Hレベルのパルス幅カウント
		if (GPIO1==1)pwH++; 
		else if (pwH !=0 ){
			if ( pwH>3 && pwH<15) cntH=(cntH<5)? cntH+1: 5; else cntH=0;	// 0.3-1.8ms範囲か?
			pwH=0;
		}

		// Lレベルのパルス幅カウント
		if (GPIO1==0)pwL++; 
		else if (pwL !=0 ){
			if ( pwL>50 && pwL<100) cntL=(cntL<5)? cntL+1: 5; else cntL=0;	// 10-20ms範囲か?
			pwL=0;
		}
			
		// 正常な信号が5回以上連続している時GPIO2に信号の有無を出力
		if (cntH==5 && cntL==5) GPIO2=1; else GPIO2=0;	
	
		DelayUs(50);				// 50uS単位の時間カウントとする.<- 実測では100us位?

	}		 
}

< 前の記事へ


ページトップに戻る



ESP32 Wifi Bluetooth開発ボード

Arduino Nano Every
​​
Raspberry Pi pico

FPGA XILINX Artix-7