2013年05月13日

PICでモータドライバI/F


PIC16F630でモータドライバI/F

PIC16F630でモータドライバ用のインターフェースを作ってみました。

マイコンを使用することにより、PWM制御、ブレーキ制御に必要なハードウエアを削除することができます。

また、モータの動作確認用に手動スイッチもつけてみました。(CW-SWとCCW-SW)

プログラム用の端子も含めて、ちょうど14ピンで収まりました。


【回路図】

PIC16F630でモータドライバI/F


マイコンのプログラムはメインループでポートの入力をチェックして、それに応じて出力を制御するのみです。

入出力論理は下記のようになります。

PIC16F630でモータドライバI/F


【ソースコード】

#include <htc.h>

//----------------------------------------------------------------------------
#define OUT_CW_P RC0
#define OUT_CW_M RC1
#define OUT_CCW_P RA2
#define OUT_CCW_M RC2

#define IN_IN1 RC5
#define IN_IN2 RC4
#define IN_PWM RC3

#define IN_CW RA5
#define IN_CCW RA4


#define SET_FREE {OUT_CW_P = 0;OUT_CW_M = 0;OUT_CCW_P = 0;OUT_CCW_M = 0;}
#define SET_CW {OUT_CCW_P = 0;OUT_CCW_M = 0;OUT_CW_P = 1;OUT_CW_M = 1;}
#define SET_CCW {OUT_CW_P = 0;OUT_CW_M = 0;OUT_CCW_P = 1;OUT_CCW_M = 1;}
#define SET_BREAK {OUT_CW_M = 0;OUT_CCW_M = 0;OUT_CW_P = 1;OUT_CCW_P = 1;}


//----------------------------------------------------------------------------
// Main関数
//----------------------------------------------------------------------------
main()
{
// システムレジスタ初期化
WPUA =  0b00110000; // Pullup設定
TRISA = 0b00110000; // 1:入力、0:出力設定
PORTA = 0b00000000;

TRISC = 0b00111000; // 1:入力、0:出力設定
PORTC = 0b00000000;
nRAPU = 0; // Pullup許可

while( 1 )
{
if( IN_CW == 0 )
{
SET_CW;
}
else if( IN_CCW == 0 )
{
SET_CCW;
}
else
{
if( (IN_IN1 == 1) && (IN_IN2 == 1) ) // Break?
{
SET_BREAK;
}
else
{
if( IN_PWM == 1 ) // PWM?
{
if( IN_IN1 == 1 ) // CW?
{
SET_CW;
}
else if( IN_IN2 == 1 ) // CCW?
{
SET_CCW;
}
else
{
SET_FREE;
}
}
else
{
SET_FREE;
}
}
}
}
}







上記のモータドライバから少し性能をアップさせるため
パワーMOSFET用ハーフブリッジゲートドライバ(IR2104)を使用してた回路を作ってみました。

パワーMOSFET用ハーフブリッジゲートドライバ(IR2104)

回路図は下記のような感じです。

ハーフブリッジゲートドライバ(IR2104)

マイコンもグレードアップして、PIC16F1823を使用。
プログラムは同等なので省略します。




同じカテゴリー(マイコン開発)の記事

上の画像に書かれている文字を入力して下さい
 
<ご注意>
書き込まれた内容は公開され、ブログの持ち主だけが削除できます。

削除
PICでモータドライバI/F
    コメント(0)