リアルタイムにKRG-2ジャイロをH8/3052で読み取る |
サーボとマイコンの間に挿入し、勝手に補正してくれる便利なジャイロKRG-2。 ただ、昨今のシリアルサーボには接続するすべがないため、マイコンに値を取り込むプログラムを書きました。
このコードでは、タイマ割り込みを利用しジャイロの値を常に読み続け、リアルタイムに値をいつでも取得することができます。 この記事は、その覚書です。
|
C言語ソースのダウンロード |
|
マイコンとの接続 |
|
ソース全景 |
/************************************************************************** * 製作日 : 2006/08/03 * ファイル名 : gyro_init.c * 製作者 : HM (http://dream-drive.net) * 説明 : H8/3052用のPWMジャイロ制御ソースです * : PortB.B2にジャイロの入力,PortB.B0にジャイロの出力を接続 ***************************************************************************/ //グローバル変数:ジャイロの状態を保存する変数 int g_counter; /************************************************************************** * 関数名 : gyro_init * 説明 : ジャイロの初期化をします * 引数 : なし * 戻り値 : なし ***************************************************************************/ void gyro_init(void){ PB.DDR = 0x04; //Bit2を出力,Bit0を入力に //出力側の設定 ITU.TSTR.BIT.STR4=0; //ITU ch4カウントストップ ITU.TMDR.BIT.PWM4=1; //ITU ch4はPWMモード ITU4.TCR.BIT.TPSC=3; //φ/8を使用(1クロック0.32μsec) ITU4.TCR.BIT.CCLR=1; //GRAとのコンペアマッチでTCNTクリア ITU4.TCNT=0; //カウンタクリア ITU4.GRA = 62496; //20msec周期でTCNTはクリア ITU4.GRB=4500; //ITU4のGRBをパルス4500に初期化 ITU.TSTR.BIT.STR4=1; //ITU4 出力カウントスタート //入力側の設定 ITU3.TCR.BYTE = 0x23; //GRAインプットキャプチャでTCNT=0,0->1でTCNT++,1/8クロック ITU3.TIOR.BYTE = 0xCF; //GRB立ち上がり(未使用)orGRA両エッジインプットキャプチャ ITU3.TIER.BIT.IMIEA = 1; //割り込み許可 ITU.TSTR.BIT.STR3 = 1; //カウント開始 } /************************************************************************** * 関数名 : int_imia3 * 説明 : ITU3.GRAコンペアマッチで割り込み時に呼び出しされる * : パルスの決定とj_counterへの保存 * 引数 : なし * 戻り値 : なし ***************************************************************************/ void int_imia3(void){ ITU3.TIER.BIT.IMIEA = 0; //割り込み禁止 ITU3.TSR.BIT.IMFA = 0; //フラグクリア if(PB.DR.BIT.B0 == 0) g_counter = ITU3.GRA; //入力パルス立下りでカウンタ更新 ITU3.TIER.BIT.IMIEA = 1; //割り込み許可 } /************************************************************************** * 関数名 : get_gyro * 説明 : ジャイロの値を返す * 引数 : なし * 戻り値 : (int)ジャイロの値を返す(符号が方向を表す) ***************************************************************************/ int get_gyro(void){ return g_counter-4501; } |
ユーザー関数一覧 |
void gyro_init(void);
int get_gyro(void);
|
Copyright ©2004-2010 HM(みっちー) All Rights Reserved.