PICでモータードライバーTA7291Pを動かしてみます。
(使用したPICはPIC16F628A)
組み立てたツインモーターギヤボックス
(左右のタイヤを逆に動かしています)
使用するモータードライバーはTA7291P
ピンアサインは以下のようになっています。
http://kousaku-kousaku.blogspot.jp/2008/06/arduino-dcta7291p.html
モータードライバを使って、正転→ブレーキ→逆転→ブレーキを
1秒おきに繰り返すプログラムを書いた。
#include<htc.h> #include<pic.h> //#include<delay.c> //#define _XTAL_FREQ 4000000 __CONFIG( MCLRE_OFF //内部リセット回路を使用 & PWRTE_ON //パワーアップタイマを使用 & BOREN_OFF //ブラウンアウトリセットを使用しない & CP_OFF //プログラムをプロテクトしない & WDTE_OFF //ウォッチドッグタイマを使わない & FOSC_INTOSCCLK //内部クロック生成器を使用 ); __IDLOC(628A); //関数プロトタイプの宣言 static void pic_init(); static void Delay_ms(unsigned char ms); static void Delay_1ms(); // ================ メイン処理 ====================== main() { pic_init(); // PICの初期化 while(1) { //正転 RB2=1; RB3=0; //DelayMs(1000); Delay_ms(1000); Delay_ms(1000); Delay_ms(1000); Delay_ms(1000); Delay_ms(1000); //ブレーキ RB2 = 1; RB3 = 1; //DelayMs(1000); Delay_ms(1000); Delay_ms(1000); Delay_ms(1000); Delay_ms(1000); Delay_ms(1000); //ブレーキ RB2 = 0; RB3 = 1; //DelayMs(1000); Delay_ms(1000); Delay_ms(1000); Delay_ms(1000); Delay_ms(1000); Delay_ms(1000); //ブレーキ RB2 = 1; RB3 = 1; //DelayMs(1000); Delay_ms(1000); Delay_ms(1000); Delay_ms(1000); Delay_ms(1000); Delay_ms(1000); } } // =============== PICの初期化 ====================== static void pic_init() { //GP = 0; //CMCON = 0x07; // コンパレータ未使用 //ANSEL = 0x00; // AN未使用 //TRISB = 0x0F; // GP4,5:out TRISB = 0x00; } // =============== 1mS×ms ウェイトルーチン ======= static void Delay_ms(unsigned char ms) { unsigned char c; for (c=ms ; c>0 ; c--) { Delay_1ms(); } } // =============== 1mSウェイトルーチン ============ static void Delay_1ms() { unsigned int cnt; unsigned int i; cnt = 76; for (i=0 ; i<cnt ; i++) { NOP(); } } // ========================== ここまで ==============================
10番ピンからの出力が出なくて苦しんだ。
原因は、モーター電源側のGNDをPIC側のGNDとつないでなかったこと。
すべてのGNDは接続されていなければならない。