メニュー
▼ アクセス(地図)
▼ Windowsアプリ開発 ▼ マイコン開発 ▼ CGI・PHP制作 |
▼ サイトマップ(全投稿記事)
▼ タイトル(画像一覧) ▼ 事業内容 |

お問い合わせメールフォームが開きます。
2013年05月13日
PICでモータドライバI/F
マイコンを使用することにより、PWM制御、ブレーキ制御に必要なハードウエアを削除することができます。
また、モータの動作確認用に手動スイッチもつけてみました。(CW-SWとCCW-SW)
プログラム用の端子も含めて、ちょうど14ピンで収まりました。
【回路図】


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

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

【ソースコード】
#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)を使用してた回路を作ってみました。
回路図は下記のような感じです。

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