モータードライバICを使う
DCモーターの回転方向など制御する方法と原理は、
TekRobo工作室 図解でわかりやすい
DCモーター駆動回路 にありますので、そちらを最初に参考にしてください
このようにトランジスタ4個を使えば、DCモーターの回転方向の制御ができます。
トランジスタ2個ずつで流れの向きを変える方法です。Hブリッジとも呼ばれます。
もちろん、このままトランジスタやFET4個使用しても可能ですが、 保護回路も内臓されこの回路が1つになったモータードライバICというのを使うのが簡単です。
手軽に下記のようなものが入手しやすく、よく使われます
|
一番なじみ深いのがマブチモーターなど、プラモなどでよく使うDCモーターで工作程度の小さなモーターの制御には、TA5791Pが値段も安く多用されます。
ここでは、TA7291Sを使用しました。
Sは扱える電流が小さいので、これから用意するなら、大は小を兼ねるTA7291Pの方にしましょう。
モータードライバICを使うと、
DCモーターの 正転、逆転、ブレーキ、ストップ、電圧の制御 などができます。
TA7257 大電流用
1.5Aの運転電流が流せるので大きなモーター用です。
大きなモーターを使用する場合、高電圧になるので逆起電力が大きいときは内部の保護ダイオードだけではもたないこともあるので、自分で外部に保護ダイオードが必要となる場合もあります。
PWM制御には向いてない。
TA7291P、S
小さなモーター用です。
回転方向制御のほか、電圧制御、PWM制御も可能です。
姉妹品が S でもっと小電流用です。
姉妹品ですがPとSは接続端子が異なるので注意が必要。
トランジスタを4個使う、トランジスタブリッジなどと呼ばれるモータードライブ回路にくらべ、モーターICを使うと発熱が多かったり、PWM制御は感度がわるかったりと不便はあります。だから高周波のPWM制御にはむかないようです。
ピン TA7291 接続 P S VCC 7 2 ドライバICの電源 VS 8 6 モーター用電源 VREF 4 8 モーターの電源コントロール用 GND 1 5 IN1 5 9 マイコンにつなぐ信号1 IN2 6 1 マイコンにつなぐ信号2 OUT1 2 7 モーターにつなぐ OUT2 10 3 モーターにつなぐ
ピン番号は型番文字の書いてある側と向き合って、
左から 1、2、3・・・・ となります。
〔VCC VS〕
ドライバICも動作するのに電源が必要なので、VCCに5Vをつなぎます。
VSにモーター用の電源をつなぎます。
〔IN1 IN2 、 OUT1 OUT2〕
マイコンから2本のピンをIN1,IN2につなぎます。
この2本のIOで方向回転などをコントロールします。
|
OUT1、OUT2の端子にモーターをつなぎます。
マイコンからの信号が
マイコン ドライバIC
1 → IN1 で 時計回り(CW:クロックワイズ)
0 → IN2
とすると
0 → IN1 で 反時計回り(CCW:カウンタークロックワイズ)
1 → IN2
にコントロールできます。 これ以外に、ストップとブレーキがあります。
〔VREF〕
VREFはモーターへの電圧を調整するときに使います。
このピンへの入力電圧を変えると、モーターに加わる電圧が調節できます。
データーシートによると、 モーターへの電圧Vout は
Vout=VREF+0.7V
これを可変抵抗にするなどして調節するとモーターへの電圧を抵抗の加減で調節することができます
電圧を内部で落とし、モーターには落とした出力を加えるとこができます。
常に Vout>VREF で使用する必要あり
落としたぶんが熱になるためICがそのぶん発熱します。
この機能を使用しないときは、このピンはモーター電源につなげておきます。
モーターを回す場合は、スイッチOFFのときは、モーター側からOFFしその後マイコンをOFFするほうがよいでしょう。
このように回転方向の制御、電圧の制御などができるのでやはりドライバICは便利です。
そして、下記回路でもモーター電源を3Vにして回してみてください。
少し違いに気づくかと思います。
同じ3VなのにドライバICを使ったほうがすこし回転が弱い
これはドライバICを通すことで電圧を喰われ、内部で電圧がモーターに行くまでに下がるからです。
一応、こんなことも体験しておきましょう。便利なモノなので短所もあります。
回路図
ここで使用したのはマブチモーターRE140を使用します。電圧3Vまでのプラモ用です。
データを見ると
限界電圧 3V
消費電流 560mA
となっています。
回すモーターによってドライバICを選びましょう。
モーター電源は3Vにしました。
ドライバICの電源はH8の電源からとってもかまわないのですが、モーター電源は必ず別電源(乾電池など)を使用します。
モータ-の正転、逆転に IOのPB7 のディップスイッチを入力スイッチとして、PB4、PB5 を使用し、ブレーキとスットップの入力にします。
回路図ではチャタリング防止回路になっています。スイッチ押下げで → 1 のスイッチです。
ドライバICはTA7291PとSでは、ピンが違うので接続が異なります。データシートを見てください。
プログラム
H8_13mterDrv1
#include <3664.h>
#define CW 1
#define CCW 0
int in12(void){
if(IO.PDRB.BIT.B4) {return(0);}
else if(IO.PDRB.BIT.B5) { return(1); }
else { return(3); }
}
void tn_moter(tn)
unsigned char *tn;
{
if(IO.PDRB.BIT.B7 != *tn){
//逆転になる場合 一度モーターストップ(保護用)
IO.PDR1.BIT.B1=0; // IN1=0 → OUT1=∞
IO.PDR1.BIT.B2=0; // IN2=1 OUT1=∞
}
if(IO.PDRB.BIT.B7 == CW ){
//モーター正回転
*tn=CW;
IO.PDR1.BIT.B1=0; // IN1=0 → OUT1=H
IO.PDR1.BIT.B2=1; // IN2=1 OUT1=L
//LED出力
IO.PDR1.BIT.B4=0;
IO.PDR1.BIT.B5=1;
}
else {
//モーター逆回転
*tn=CCW;
IO.PDR1.BIT.B1=1; // IN1=0 → OUT1=H
IO.PDR1.BIT.B2=0; // IN2=1 OUT1=L
//LED出力
IO.PDR1.BIT.B4=1;
IO.PDR1.BIT.B5=0;
}
}
int main()
{
IO.PCR1=0xFF; /* 全て1にセットし、出力に設定 1111 1111 */
unsigned char tn=CW; //CW or CCW
while (1) {
switch( in12() ){
case 0: //SW1_ON-ストップ
IO.PDR1.BIT.B1=0; // IN1=0 → OUT1=∞
IO.PDR1.BIT.B2=0; // IN2=0 OUT1=∞
//LED出力
IO.PDR1.BIT.B4=0;
IO.PDR1.BIT.B5=0;
break;
case 1: //SW2_ON-ブレーキ
IO.PDR1.BIT.B1=1; // IN1=1 → OUT1=1
IO.PDR1.BIT.B2=1; // IN2=1 OUT1=1
//LED出力
IO.PDR1.BIT.B4=1;
IO.PDR1.BIT.B5=1;
break;
default:
tn_moter(&tn);
}
}
}
3つの入力スイッチを使います。モータ-の正転、逆転に IOの PB4 のディップスイッチを 入力スイッチとして、
PB4 : ストップ
PB5 : ブレーキ
PB7 : モータ-の正転、逆転
関数 int in12(void){ で
入力されたスイッチの検出をして、各スイッチに応じた値を返します。
PB4 : ストップ 0
PB5 : ブレーキ 1
その他 3
その数値を
関数 switch( in12() ){ で読み取り、入力されたスイッチに応じて分岐し、各処理をします。
0 : ストップ
1 : ブレーキ
その他 default : モーター回転
モーター回転では、関数 tn_moter(tn) に。
回転方向として 変数 *tn に回転方向を記憶します。その記憶値をアドレスを渡しにしています。
保護のため、モーター回転が逆転となる場合は、すぐに逆転の信号を出さずに 一度ストップ の信号を出した後、モーター逆転の信号を出します。
同時にLEDに出力し、押したボタンで点灯するLEDが変わります。
実行結果
プログラムを実行するとモーターが回転し、
PB7 のスイッチで モータ-の正転、逆転が切り替わります。
正転 LED1
逆転 LED2
回転方向はどちらの時でも、PB4 で ストップ 同時に LED1,2 両方消灯
PB5 で ブレーキ 同時に LED1,2 両方点灯
になり、モーターが止まります。
- twtter
- google+
- hatena