インドアプレーンとロボット

趣味のロボットとインドアプレーンを紹介します。 K O B A R A

やれやれ

2007-11-30 02:39:08 | 飛行機 技術情報

だいぶ前から取り組んでいた、受信機のプログラムですが、

何とかそれらしく動くプログラムになりました

そんなに長いプログラムではないのですが、だいぶ苦戦しました

上手く動かなかった理由もちょっと良くわかっていないので、危ない物です。
(その後理由が判明して、対策を行いました)

センサのチェックも1回しかやっていませんので、まだまだ未完成ですが
(その後前回のデーターと比べて平均化しています、信号が安定しました)

ソフトループだけでやっていますので、10F系への移植も簡単だと思います。
(なんとか256ワードに収まったので10F200にも大丈夫だと思います)

スロットルが9段階、ラダーが17段階ですが、それらしく動きます。

PWM周期は、結構早くて、4KHzくらいになっているはずです。


フローチャートですが見えませんよね、右の表は、命令を自分なりに、種類別に分けてみた表です、これを見ながらこつこつと作りました。(暗~~






これまた大変恥ずかしながら、ソースです

メインループは、1ワードでもケチってやろうと書きましたので大変判りにくくなっています
PICマイコンで作るインドアプレーン教科書の92Pのフローチャートにやや似ていますが、詳細はだいぶ変っています。





;
; 		 赤外線受信機プログラム
;		モーターは9段階 ラダーは17段階のPWM制御
;
;				2007/11/20    T.kobara
;
;                         _____  ____
;              VDD+     1[|    '-'   |]8  -GND
;             ラダーLへ 2[| 12f629   |]7  ラダーRへ
;            並列出力   3[|          |]6   並列出力 
;          センサーイン 4[|__________|]5  モーターFETへ
;
;
;
	LIST	P=12F629
	INCLUDE	P12F629.INC

CB = _CPD_OFF			;データEEPROMもプログラム・メモリも
CB &= _CP_OFF			;コード・プロテクトしない。
CB &= _BODEN_OFF			;ブラウンアウト・リセットを使わない。
CB &= _MCLRE_OFF			;MCLRリセットを使わない。
CB &= _PWRTE_ON			;パワーアップ・タイマを使う。
CB &= _WDT_ON			;ウォッチドッグ・タイマを使う。
CB &= _INTRC_OSC_NOCLKOUT 	      ;内部発振器を使う。

	__CONFIG CB
		
C1	equ	20h		;カウンター
C2	equ	21h		;カウンター上位
MF	equ	22h		;前回センサレベルフラグ
RC	equ	23h		;ループ       カウンタ
CH	equ	24h		;チャンネル カウンタ
PWM	equ	25h		;pwm       カウンタ
SM	equ	26h		;スロットルメイン
RM	equ	27h		;ラダー R  メイン	
LM	equ	28h		;ラダー L  メイン
SS	equ	29h		;スロットルサブ
RS	equ	2Ah		;ラダー R  サブ
LS	equ	2Bh		;ラダー L  サブ
OUT	equ	2Ch		;出力バッファ
CH1	equ	2Dh		;ラダーデータ
CH3	equ	2Eh		;スロットルデータ


	org	0		;電源onスタート
	bsf	STATUS,RP0	      ;バンク 1 にする。

	call	3FFh
	movwf	OSCCAL		;内部発信校正値の書き込み

	movlw	b'00001000'	      ;入出力ポートの設定GP3のみ入力
	movwf	TRISIO		;他は出力設定

	bcf	STATUS,RP0	;バンク 0 にする。
	
	movlw	b'00000111'	;GP0~GP2までのコンパレータ解除
	movwf	CMCON

	movLw	b'00001110'	;WDTプリスケーラ18ms×64=1.15s
	movwf	OPTION_REG
	
	
;////////////////////////////////////////////////////////////

			;メインルーチン

MAIN	clrf	GPIO		;出力ポートクリア
	clrf	MF		;前回レベルフラグ   00
	clrf	RC		;ループ    カウンタ	 00  
	clrf	CH		;チャンネルカウンタ 00 
	movlw	d'8'
	movwf	PWM		;pwm     カウンタ 8
	clrf	SM		;スロットルメイン   00 
	clrf	RM		;ラダー R  メイン	00
	clrf	LM		;ラダー L  メイン   00
	clrf	SS		;スロットルサブ      00
	clrf	RS		;ラダー R  サブ	00
	clrf	LS		;ラダー L  サブ      00
	clrf	OUT		;出力バッファ  	00
	clrf	CH1		;ラダーデータ	00
	clrf	CH3		;スロットルデータ	00
	
MJ2	btfss	GPIO,3		;入力LOならループ	
	goto	LOOP
	
	movlw	d'250'
	movwf	C2		;カウンタ250セット
	
MJ1	btfss	GPIO,3		;入力LOならループ	
	goto	MJ2	

	nop	
	nop
	nop			;10us×250回=2.5ms
	nop
	nop	
			
	decfsz	C2,F		;C2-1=0なら先頭ブランク発見
	goto	MJ1
	
	goto	LOOP		;LOOP IN
			
	
;////////////////////////////////////////////////////////////
					

MJ3	btfsc	MF,0		;前回レベルフラグ0か?	
	goto	MJ7		;1なら立下りエッジ処理へ
	
	clrf	MF		;MF←00

MJ4	clrwdt			;WDT クリア
	incf	RC,F		;ループカウントUP


	
			;出力処理

MJ10	decfsz	PWM,F		;PWM0でないならMJ5へ
	goto	MJ5

	movf	SM,W
	movwf	SS		;0なら
	movf	RM,W		;各サブにセット
	movwf	RS
	movf	LM,W
	movwf	LS					
		
	movlw	d'8'
	movwf	PWM		;PWM  カウンタ 8
	
	
MJ6	clrf	OUT

	rrf	RS,W
	rlf	OUT,F		;5 各bitのセット
	rrf	RS,F
	rlf	OUT,F		;4

	rlf	OUT,F		;3
	rrf	SS,F
	rlf	OUT,F		;2 各bitのセット
	rrf	LS,W
	rlf	OUT,F		;1
	rrf	LS,F
	rlf	OUT,F		;0

	movf	OUT,W
	movwf	GPIO		;OUTデータをポートに出力

	
			;ループ入り口

LOOP	btfss	GPIO,3		;入力 LO ならMJ3へ
	goto	MJ3		;LO の処理ルーチンへ

	bsf	MF,0		;MF←01

	
	btfss	RC,7		;RC 128 以上ならMJ4へ	
	goto	MJ4		;出力処理へ

	clrf	CH		;チャンネルカウンタ クリア
	
	goto	MJ10		;出力処理ルーチンへ

MJ5	nop
	nop
	nop			;時間あわせ
	nop
	nop
	goto	MJ6


			;立下りエッジ処理

MJ7	btfsc	CH,2		;CHの2bit 1ならMJ80へ
	goto	MJ80

	btfss	CH,0		;CHの0bit 0ならMJ80へ
	goto	MJ80

	btfsc	CH,1		;CHの1bit 1ならMJ9へ
	goto	MJ9

	
	movf	RC,W		;前回RCとの平均化
	addwf	CH1,F		;
	bcf	STATUS,C		;(CH1+RC)÷2→CH1
	rrf	CH1,F		;
	
	movlw	d'10'		;
	subwf	CH1,W		;CH1-10=W
	andlw	b'00111111'	;3Fhでマスク0~64
	call	GETLM		;PWMパターン取得
	xorlw	b'11111111'	;パターンの逆転
	movwf	RM		;パターン格納
	
	movlw	d'20'		;
	subwf	CH1,W		;CH1-20=W
	andlw	b'00111111'	;3Fhでマスク0~64
	call	GETLM		;PWMパターン取得
	movwf	LM		;パターン格納

MJ80	clrf	RC		;ループカウンタ 00
	clrf	MF		;前回レベルフラグ00
	incf	CH,F		;CH+1→CH
	goto	MJ10
	

MJ9	movf	RC,W		;前回RCとの平均化
	addwf	CH3,F		;
	bcf	STATUS,C		;(CH3+RC)÷2→CH3
	rrf	CH3,F		;	

	movlw	d'6'		;
	subwf	CH3,W		;CH3-6=W
	andlw	b'00111111'	;3Fhでマスク0~64
	call	GETSM		;PWMパターン取得
	movwf	SM		;パターン格納
	goto	MJ80


;/////////////////////////////////////////////////////////////
	
	
GETSM	addwf	PCL,F		;プログラムカウンタにWデータ加算
	retlw	b'00000000'	;0
	retlw	b'00000000'	;1
	retlw	b'00000000'	;2
	retlw	b'00000000'	;3
	retlw	b'00000000'	;4
	retlw	b'00000000'	;5
	retlw	b'00000000'	;6
	retlw	b'00000000'	;7
	retlw	b'00000000'	;8
	retlw	b'00000000'	;9
	retlw	b'00000000'	;10
	retlw	b'00000000'	;11
	retlw	b'00000000'	;12
	retlw	b'00000000'	;13
	retlw	b'00000000'	;14
	retlw	b'00000000'	;15
	retlw	b'00000000'	;16
	retlw	b'00000000'	;17
	retlw	b'00000000'	;18
	retlw	b'00000000'	;19
	retlw	b'00000000'	;20
	retlw	b'00000000'	;21
	retlw	b'00000000'	;22
	retlw	b'00000000'	;23
	retlw	b'00000000'	;24
	retlw	b'00000001'	;25
	retlw	b'00000001'	;26
	retlw	b'00000011'	;27
	retlw	b'00000011'	;28
	retlw	b'00000111'	;29
	retlw	b'00000111'	;30
	retlw	b'00001111'	;31
	retlw	b'00001111'	;32
	retlw	b'00011111'	;33
	retlw	b'00011111'	;34
	retlw	b'00111111'	;35
	retlw	b'00111111'	;36
	retlw	b'01111111'	;37
	retlw	b'01111111'	;38
	retlw	b'11111111'	;39
	retlw	b'11111111'	;40
	retlw	b'11111111'	;41
	retlw	b'11111111'	;42
	retlw	b'11111111'	;43
	retlw	b'11111111'	;44
	retlw	b'11111111'	;45
	retlw	b'11111111'	;46
	retlw	b'11111111'	;47
	retlw	b'11111111'	;48
	retlw	b'11111111'	;49
	retlw	b'11111111'	;50
	retlw	b'11111111'	;51
	retlw	b'11111111'	;52
	retlw	b'11111111'	;53
	retlw	b'11111111'	;54
	retlw	b'11111111'	;55
	retlw	b'11111111'	;56
	retlw	b'11111111'	;57
	retlw	b'11111111'	;58
	retlw	b'11111111'	;59
	retlw	b'11111111'	;60
	retlw	b'11111111'	;61
	retlw	b'11111111'	;62
	retlw	b'11111111'	;63
	retlw	b'11111111'	;64
	retlw	b'11111111'	;65
		
;/////////////////////////////////////////////////////////////

GETLM	addwf	PCL,F		;プログラムカウンタにWデータ加算
	retlw	b'00000000'	;0
	retlw	b'00000000'	;1
	retlw	b'00000000'	;2
	retlw	b'00000000'	;3
	retlw	b'00000000'	;4
	retlw	b'00000000'	;5
	retlw	b'00000000'	;6
	retlw	b'00000000'	;7
	retlw	b'00000000'	;8
	retlw	b'00000000'	;9
	retlw	b'00000000'	;10
	retlw	b'00000000'	;11
	retlw	b'00000000'	;12
	retlw	b'00000000'	;13
	retlw	b'00000000'	;14
	retlw	b'00000000'	;15
	retlw	b'00000000'	;16
	retlw	b'00000000'	;17
	retlw	b'00000000'	;18
	retlw	b'00000000'	;19
	retlw	b'00000000'	;20
	retlw	b'00000000'	;21
	retlw	b'00000000'	;22
	retlw	b'00000000'	;23
	retlw	b'00000000'	;24
	retlw	b'00000000'	;25
	retlw	b'00000000'	;26
	retlw	b'00000000'	;27
	retlw	b'00000000'	;28
	retlw	b'00000001'	;29
	retlw	b'00000011'	;30
	retlw	b'00000111'	;31
	retlw	b'00001111'	;32
	retlw	b'00011111'	;33
	retlw	b'00111111'	;34
	retlw	b'01111111'	;35
	retlw	b'11111111'	;36
	retlw	b'11111111'	;37
	retlw	b'11111111'	;38
	retlw	b'11111111'	;39
	retlw	b'11111111'	;40
	retlw	b'11111111'	;41
	retlw	b'11111111'	;42
	retlw	b'11111111'	;43
	retlw	b'11111111'	;44
	retlw	b'11111111'	;45
	retlw	b'11111111'	;46
	retlw	b'11111111'	;47
	retlw	b'11111111'	;48
	retlw	b'11111111'	;49
	retlw	b'11111111'	;50
	retlw	b'11111111'	;51
	retlw	b'11111111'	;52
	retlw	b'11111111'	;53
	retlw	b'11111111'	;54
	retlw	b'11111111'	;55
	retlw	b'11111111'	;56
	retlw	b'11111111'	;57
	retlw	b'11111111'	;58
	retlw	b'11111111'	;59
	retlw	b'11111111'	;60
	retlw	b'11111111'	;61
	retlw	b'11111111'	;62
	retlw	b'11111111'	;63
	retlw	b'11111111'	;64
	retlw	b'11111111'	;65

;/////////////////////////////////////////////////////////////
	
	end



追記(fujinawaさんが言っていたスロットルの下の方で全速で回ると言う不具合を直しました)

センサの信号の前回との比較を行っています

テーブルを64用意して広い範囲のスロットル位置に対応しました。


11月24日飛行会

2007-11-24 23:16:52 | 飛行会


昨日の機体をさっそく体育館で飛ばしました、少し調整するとこんなに良く飛ぶようになりました。(生徒たちこんな風に作るのだよ~~




Q-skyも体育館で飛ばすと面白く遊べます

右の翼幅13cmのジェット機風機体もバッテリーだけのフリーフライトでしたが、良く飛びました。(今度受信機を取り付けてみます)


森上さんのこんな機体や、




ミニュームにもフラップを付けると(テープで緊急実験)ゆっくりな飛行が可能です




課題

2007-11-23 18:34:20 | 飛行機 その他
例の、母校のインドアプレーン実習のお手伝だが、今度の月曜日がおそらく最後になる、

今回用意した材料は、うす切りした発泡スチロール色々と、少々のカーボンリボンだけ、
受信機は入門KIT、モーターはオレンジモーターか6ミリモーター、プロペラはU-80か57*20ペラ直結の組み合わせだ、

生徒の作った機体は、材料にもなれないのか、重い機体や、バランスの悪い機体が多い、
今回手本の設計図もなしで作ってみたが、(その方が個性が出てよいと思ったが)
ある程度用意したほうがよかったのか??試行錯誤である。

そこで同じ材料の組み合わせで、ぜひとも飛ぶ機体を作って、見せてあげたい。
あす、飛行会なのでそれまでに作りたい、

PM5時から始めて、1時間でここまで出来た。としちゃんに送ってもらった貝印カッターがほんとよく切れる
このままで滑空させると、いい感じだ。

しかしここで、飲みに行かないかとのお誘い電話、誘惑に負けて、了解してしまった。

はたして、あしたの飛行会間に合うのか????






その後酔っ払っての作業でも、何とか完成しました。あしたがたのしみ




























Q-SKY

2007-11-18 13:49:41 | 飛行機 その他


遅ればせながら、Q-SKYの解剖です。

解剖の前にノーマルの状態でのレポートですが、16cm×16cmの機体は小さくて、とってもいい感じのデザインです。
重さは3.11g車輪を外すと、3gぴったりくらいです。

夜中に部屋で飛ばして遊んでみました

う~ん、でも左手でスライド式のスロットルや、右左1段しかないラダーでの、ちょんちょん打ちは、私にはやりにくいです。

信号自体はエアロソアラの時から変わってないみたいです。





と言うことは基板左上のJP1やJP2でチャンネルが変えられるのでしょうね、

下のほうにJP3と言うのもありますが、何なのでしょう??




充電端子も以前から変わりましたが、これも使いにくい、目が薄い爺いだからか....

こちら側の青と黄色の線がモーターで、裏側の赤と黄色がラダーへの配線です。





バッテリーはフルリバーの10mAでショップにあるものと同じです。

アルミ端子に溶接しています、アルミ半田で苦しんでいる私にとっては、うらやましい限りです。





ラダーコイルには基板が取り付けてあって、この部品だけ販売して欲しいほどです、
抵抗値は95Ω




操作が不満なので、受信機を変えるついでに、機体も改造しました。

尾翼をささえるカーボンをパイプに変更して、ラダーの線をパイプの中を通しました、すっきりして、剛性UP!たくさん貼っていたテープをなくしたので重さは変わりません。



受信機は少し重いのですが、組み立てやすい入門KITです、
ラダー出力が2ポートパラですので、95Ωのコイルでも問題ありません、

電源端子に直接金メッキマグネットを付けて、バッテリーと接続しています。
ただしマグネットへの半田付けは、あまり熱を加えると磁力がなくなってしまうのでC難度の技です。



バッテリーを付けるとこんな感じ、飛行時間も不満だったので、20リポです、

総重量は3.5gになりましたが、それでも飛びます。