« 14-9 課題9 エルロン・コイルLEDをPWMにより制御する(0~9の10段階PWM制御) | メイン | 15-1 赤外線2ch受信機RX2の紹介と回路設計 »

はてなブックマークに追加   14-10 課題10 赤外線2ch受信機 RX2&RX2-T用ファームウエアの完成

 今までの赤外線・PWM制御などのプログラミング技法の集大成として、赤外線2ch受信機RX2-Tのプログラミングを完成しましょう。これまでの課題の例題の知識で完成することができます。完成後は、そのまま軽量型赤外線2ch受信機RX2のファームウエアとして搭載します。

赤外線2ch受信機 RX2-Tの仕様

信号形式:38kHz変調赤外線
受信チャネル:4ch(使用チャネル2ch)
使用チャネル:1chエルロン、3chスロットル
エルロン制御方式:ソフトウェアPWM
スロットル制御方式:ハードウェアPWM
電源:3.7V(リポ1セル推奨)
スロットル接続可能モータ:オレンジ・モータまたはLED
エルロン接続可能コイル:100ΩコイルまたはLED

kadai10_web.jpg
オレンジ・モータ MK07-3.3 (φ7mmx17mm 3.3Ω Orange)

空欄または省略された部分を埋めてプログラムを完成してください。

//  赤外線2ch受信機 RX2&RX2-T対応
// ex10_rx2.c
// モータ:PWM機能使用(0~10の11段階)
// エルロン:ソフトウェアPWM制御(0~9の10段階)
// for PIC12F683

#include<12f683.h>

#fuses INTRC_IO,NOWDT,PUT,NOPROTECT,NOMCLR,NOBROWNOUT
//ウオッチドック・タイマなし、パワーアップ・タイマ使用
//プロテクトなし、MCLRなし

#use delay(CLOCK=8000000) //8MHz駆動
#byte GP=5
#bit IRSIG=GP.3
#bit rcoil1=GP.0
#bit rcoil2=GP.1
#bit lcoil1=GP.4
#bit lcoil2=GP.5

#define ON 1
#define OFF 0
#define HI 1
#define LOW 0
#define rcoil 0x03
#define lcoil 0x30

long duty;//PWMデューティ
signed long th_count,al_count;//パルス・カウント用
int on_coil,cycl_count,coil_duty;

#int_rtcc
void coil_pwm()
{
set_timer0(6);

if(coil_duty==0){
GP=OFF;
}
else if( (その1) ){
//coil_duty=9でduty=100%
GP=on_coil;//選択されたcoil=ONにする
}
else{
GP=OFF;
}
cycl_count= (その2) ;
cycl_count= (その3) ;//0~9の10段階

}

//メイン・ルーチン

main(){
int gcount;

setup_comparator(NC_NC); //ディジタル入力切り替え
setup_ccp1(CCP_PWM); //PWMモード使用宣言

setup_timer_0(RTCC_INTERNAL | RTCC_DIV_8);
// マグネット・アクチュエータ周期
//内部2MHz=0.5μs動作、
//(256-6)*8*0.5^-6=1ms、1ms*9=9ms:PWM周期=111Hz
setup_timer_2(T2_DIV_BY_4,255,1); //CCP1 PWMモード・セット
//PWM周期=(255+1)*4*(1/8E6)*4=0.512ms=1.95kHz
enable_interrupts(INT_RTCC); //timer0割り込み許可
enable_interrupts(GLOBAL); //割り込み全体許可
set_timer0(6);

set_tris_a(0x08);//GP3入力、他は出力
//GP 5 4 3 2 1 0
// lc2 lc1 ir mt rc2 rc1
// 0 0 1 0 0 0 :0x08

cycl_count=coil_duty=0;
duty=0;
th_count=0;

while(1){//ギャップ検出ルーチン
gcount=0;
while(gcount < 30){
if( (その4) ){
delay_us(100);
gcount++;
}
else{
gcount=0;
}
}

While(IRSIG==HI){
}

// 1ch(エルロン)
disable_interrupts(INT_RTCC); //timer0割り込み禁止
al_count=0;
while(IRSIG==LOW){//Low、Hiループは1回10μsに調整済み
delay_us(6);
(その5) ;
}
while(IRSIG==HI){
delay_us(6);
al_count=al_count+1; 
}

// 2ch(エレベータ):未使用
enable_interrupts(INT_RTCC);//timer0割り込み許可
while(IRSIG==LOW){
}
while(IRSIG==HI){
}

// 3ch(スロットル)
disable_interrupts(INT_RTCC);//timer0割り込み禁止
th_count=0;
while(IRSIG==LOW){ //Low、Hiループは1回10μsに調整済み
delay_us(6);
th_count=th_count+1;
}
while(IRSIG==HI){
delay_us(6);
(その6) ;
}
enable_interrupts(INT_RTCC);//timer0割り込み許可

// 4ch(ラダー):未使用
while(IRSIG==LOW){
}
while(IRSIG==HI){
}

//エルロンの処理
if(al_count<107){//パルス下限1070μs(1520-450=1070)
al_count=107;
}
if(al_count>197){//パルス上限1970μs(1520+450=1970)
al_count=197;
}
al_count=al_count-100;//パルス幅:7~97に変換

if(al_count<47){ //左スティック
(その7) ;//左コイル・セット
al_count=-(al_count-52)/5; //エルロン分解能9段階
}
else if(al_count>57){//エルロン右
(その8) ;//右コイル・セット
al_count=(al_count-52)/5;//エルロン分解能右9段階
//エルロン右:58~97 => 1~9
}
else{//ニュートラル:47<= 52 <=57
al_count=0;
}
(その9) ;//コイルPWMデューティ・セット


//スロットルの処理
if(th_count<110){//最スロー
(その10) ;
}
else if(th_count>190){//フルスロットル
th_count=1023;
}
else{
(その11) ;//PWM9段階
//th_count=110=>100,th_count=190=>900,step 10
}
(その12) ;//PWMデューティ・セット
//最スロー+フルスロットル+PWM9段階=11段階

}//while
}//main

実行

(1) 赤外線2ch受信機TX2-006pの電源スイッチをONにします。
(2) RX2-Tにバッテリを接続してONにします。
(3) 起動時はすべてのLEDが消えています。
(4) TX2-006pのジョイスティックをスロットルHi方向に徐々に倒すとモータLEDが比例して点灯します。
(5) エルロン方向に左右に倒すと比例してエルロンLEDが点灯します。
(6) スロットル最スロー、エルロン・ニュートラルでLEDはすべて消灯します。
(7) RX2-TをOFFにします。
(8) TX2をOFFにします。

 以上の動作が確認できれば、RX2-Tのプログラミングは成功です。また、ハードウェアも正常に動作しています。完成したプログラムは赤外線2ch受信機RX2のファームウエアとして搭載します。

ダウンロード

 この課題のC言語ソース・ファイルおよびHEXファイルは【ex10_rx2.lzh】よりダウンロードできます。


解答

(その1)cycl_count <= coil_duty (その2)cycl_count+1 (その3)cycl_count % 10 
(その4)IRSIG==HI (その5)al_count=al_count+1

(その6)th_count=th_count+1 (その7)on_coil=rcoil (その8)on_coil=lcoil (その9)coil_duty=al_count 
(その10)th_count=0 (その11)th_count=(th_count-100)*10 (その12)set_pwm1_duty(th_count)

 以上で赤外線2ch受信機RX2-Tのプログラミングをすべて終わります。お疲れ様でした。

長野県飯田工業高校 竹内浩一

トラックバック

このエントリーのトラックバックURL:
http://www.eleki-jack.com/mt/mt-tb.cgi/1957

コメントを投稿

(いままで、ここでコメントしたことがないときは、コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)

カレンダ

2009年5月
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31

おすすめ書籍

会社案内
情報セキュリティおよび個人情報の取り扱いについて

コメントとトラックバックは、spamを予防するために、編集担当が公開の作業をするまで非公開になっています。
コメントはそれぞれ投稿した人のものです。

About

2008年11月25日 13:06に投稿されたエントリーのページです。

ひとつ前の投稿は「14-9 課題9 エルロン・コイルLEDをPWMにより制御する(0~9の10段階PWM制御)」です。

次の投稿は「15-1 赤外線2ch受信機RX2の紹介と回路設計」です。

他にも多くのエントリーがあります。メインページアーカイブページも見てください。

Powered by
Movable Type 4.1