Changes between Initial Version and Version 1 of DCMotorDriver


Ignore:
Timestamp:
May 20, 2015 12:37:22 PM (5 years ago)
Author:
soumura
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • DCMotorDriver

    v1 v1  
     1
     2== DCモータードライバの使い方 ==
     3
     4DCモーターをArduino等のマイコンでコントロールする場合、モーターはたくさんの電流を消費するので直接DCモーターをマイコンに接続することはできません。[[BR]]
     5そのためDCモータードライバという回路が必要になります。[[BR]]
     6スイッチサイエンスで取り扱い中(2015/05/19現在)のDCモータードライバの[http://trac.switch-science.com/wiki/DCMotorDriverList 全てのリストはこちら]です。
     7
     8||メーカー||商品名||PLU||モーター数||ロジック電源電圧||モーター電源電圧||最大電流(連続)||最大電流(ピーク)||最大PWM周波数||制御ピン||
     9||Pololu||[https://www.switch-science.com/catalog/236/ デュアルモータードライバTB6612FNG]||236||2||2.7V~5.5V||4.5V~13.5V||1A||3A||100kHz||回転方向切替:2本 回転速度:1本||
     10||Pololu||[https://www.switch-science.com/catalog/1637/ デュアルモータードライバDRV8835]||1637||2||2V~7V||2V~11V||1.2A||1.5A||250kHz||回転方向切替:1本 回転速度:1本||
     11
     12
     13使えるモーターの数、流せる電流の量、モーターの駆動電圧、内蔵されている保護回路の種類等の違いはありますが使い方はほとんど同じです。[[BR]]
     14[http://trac.switch-science.com/wiki/DCMotorDriverList リスト]の制御ピンの欄を見てみると、大きく分けて次の3つに分類できます。中には複数の制御方法を切り替えられるものもありますが、代表的なものを表記しています。[[BR]]
     15
     16 * 回転方向切替:2本 回転速度:1本
     17 * 回転方向切替:1本 回転速度:1本
     18 * 回転方向と速度:2本
     19
     20この3種類の制御方法ごとに使い方を説明します。[[BR]]
     21
     22=== ・回転方向切替:2本 回転速度:1本 ===
     23このタイプは回転方向(正回転・逆回転)の切替に2本の入力ピン、回転速度(PWM)の指定に1本の入力ピンを持っています。[[BR]]
     24(OUT1 OUT2の状態はモータードライバの種類によって少し異なります。)
     25||PWM||IN1||IN2||OUT1||OUT2||状態||
     26||0||0||0||Z||Z||ストップ||
     27||1||0||0||Z||Z||ストップ||
     28||0||0||1||L||L||ショートブレーキ||
     29||1||0||1||L||H||逆転||
     30||0||1||0||L||L||ショートブレーキ||
     31||1||1||0||H||L||正転||
     32||0||1||1||L||L||ショートブレーキ||
     33||1||1||1||H||H||ショートブレーキ||
     34
     35例として[https://www.switch-science.com/catalog/236/ デュアルモータードライバTB6612FNG(連続最大1A)]を使ってみます。[[BR]]
     36このモータードライバはモーター駆動電源の推奨値が4.5V~13.5Vですが、下の図では3Vにしています。(非推奨ですが2.5Vから動作します。)
     37このように基本的にモータードライバーを使うときはマイコン用の電源とモーター用の電源の2種類を用意する必要があります。[[BR]]
     38理由は次の通りです。
     39
     40 * モーターに使う電源の電圧と制御系の電源電圧が違う
     41 * モーターの電流消費が大きく、大きなノイズも発生するので制御系への影響を少なくするため
     42
     43今回の例で言うとVCCがロジック電源(制御系)、これはArduino Unoからもらっています。[[BR]]
     44VMOTがモーター用の電源です。モータードライバの種類によってはロジックとモーター用の電源端子が共通になっているものもあります。[[BR]]
     45
     46AIN1とAIN2をArduino Unoのデジタル12、13番に接続し、PWMAをデジタル11番につなげました。
     47
     48[[Image(0J4621.1200.jpg,240px)]]
     49[[Image(TB6612_3.png,360px)]]
     50
     51サンプルスケッチです。正転と逆転を繰り返すようになっています。
     52
     53{{{
     54#define AIN1 13
     55#define AIN2 12
     56#define PWMA 11
     57
     58void setup() {
     59  pinMode(AIN1,OUTPUT);
     60  pinMode(AIN2,OUTPUT);
     61  pinMode(PWMA,OUTPUT);
     62 
     63}
     64
     65void loop() {
     66  int i=0;
     67  //モーター停止
     68  digitalWrite(AIN1,LOW);
     69  digitalWrite(AIN2,LOW);
     70  delay(500);
     71
     72  //モーター正回転・スピード変化
     73  digitalWrite(AIN1,HIGH);
     74  digitalWrite(AIN2,LOW);
     75  for(i=0;i<256;i++){
     76    analogWrite(PWMA,i);
     77    delay(100);
     78  }
     79  for(i=255;i>=0;i--){
     80    analogWrite(PWMA,i);
     81    delay(100); 
     82  }
     83
     84  //モーター停止
     85  digitalWrite(AIN1,LOW);
     86  digitalWrite(AIN2,LOW);
     87  delay(500);
     88
     89  //モーター逆回転・スピード変化
     90  digitalWrite(AIN1,LOW);
     91  digitalWrite(AIN2,HIGH);
     92  for(i=0;i<256;i++){
     93    analogWrite(PWMA,i);
     94    delay(100);
     95  }
     96  for(i=255;i>=0;i--){
     97    analogWrite(PWMA,i);
     98    delay(100); 
     99  }
     100
     101}
     102}}}
     103
     104=== ・回転方向切替:1本 回転速度:1本 ===
     105
     106このタイプは回転方向の制御に信号線を1本、回転速度を指定するために信号線(PWM)を1本使います。[[BR]]
     107(OUT1 OUT2の状態はモータードライバの種類によって少し異なります。)
     108
     109||IN||EN||OUT1||OUT2||状態||
     110||0||PWM||PWM||L||正転||
     111||1||PWM||L||PWM||逆転||
     112||x||0||L||L||ブレーキ||
     113
     114今回は例として[https://www.switch-science.com/catalog/1637/ デュアルモータードライバDRV8835]を使ってみます。[[BR]]
     115APAHSEピンをArduino Unoのデジタル12番にAENABLEピンをデジタル11番に接続しました。[[BR]]
     116VCCがロジック電源で、今回はArduino Unoから5Vをもらっています。VINはモーター駆動用電源で今回は3Vにしました。[[BR]]
     117
     118[[Image(0J4056.1200.jpg,300px)]]
     119[[Image(DRV8835_3.png,360px)]]
     120
     121サンプルスケッチです。正転と逆転を繰り返すようになっています。
     122
     123
     124{{{
     125#define APHASE 12
     126#define AENABLE 11
     127
     128void setup() {
     129  pinMode(APHASE,OUTPUT);
     130  pinMode(AENABLE,OUTPUT);
     131}
     132
     133void loop() {
     134  int i=0;
     135  //モーター停止
     136  analogWrite(AENABLE,0);
     137  digitalWrite(APHASE,LOW);
     138  delay(500);
     139
     140  //モーター正回転・スピード変化
     141  digitalWrite(APHASE,LOW);
     142  for(i=0;i<256;i++){
     143    analogWrite(AENABLE,i);
     144    delay(100);
     145  }
     146  for(i=255;i>=0;i--){
     147    analogWrite(AENABLE,i);
     148    delay(100); 
     149  }
     150
     151  //モーター停止
     152  analogWrite(AENABLE,0);
     153  digitalWrite(APHASE,LOW);
     154  delay(500);
     155
     156  //モーター逆回転・スピード変化
     157  digitalWrite(APHASE,HIGH);
     158  digitalWrite(APHASE,LOW);
     159  for(i=0;i<256;i++){
     160    analogWrite(AENABLE,i); 
     161    delay(100);
     162  }
     163  for(i=255;i>=0;i--){
     164    analogWrite(AENABLE,i);
     165    delay(100); 
     166  }
     167}
     168}}}
     169
     170=== ・回転方向と速度:2本 ===
     171最後のタイプは回転方向と速度の両方を2本の入力で行うタイプです。一見、前のタイプ(回転方向切替:1本 回転速度:1本)と同じように感じますが、少し違います。[[BR]]
     172前のタイプは速度制御用のPWM出力ピンが1本必要ですが、こちらの場合はPWM出力のピンが2本必要になります。[[BR]]
     173
     174(OUT1 OUT2の状態はモータードライバの種類によって少し異なります。)
     175
     176||IN1||IN2||OUT1||OUT2||状態||
     177||0||0||Z||Z||ストップ||
     178||0||PWM||L||PWM||逆転(ストップ)||
     179||PWM||0||PWM||L||正転(ストップ)||
     180||1||PWM||H||PWM||逆転(ブレーキ)||
     181||PWM||1||PWM||H||正転(ブレーキ)||
     182||1||1||H||H||ブレーキ||
     183
     184今回は例として[https://www.switch-science.com/catalog/1637/ デュアルモータードライバDRV8835]を使ってみます。[[BR]]
     185前のタイプ(回転方向切替:1本 回転速度:1本)の例で使用したのと同じモータードライバです。このモータードライバはモードを切り替えることで制御方法を変えることができます。[[BR]]
     186前回はMODEピンをHIGHにしていましたが、今回はLOWにします。
     187
     188AIN1ピンをArudino Unoのデジタル11番に、AIN2ピンを10番ピンに接続します。[[BR]]
     189
     190[[Image(0J4056.1200.jpg,300px)]]
     191[[Image(DRV8835_5.png,360px)]]
     192
     193サンプルスケッチです。正転と逆転を繰り返すようになっています。
     194
     195{{{
     196#define AIN1 11
     197#define AIN2 10
     198
     199void setup() {
     200  pinMode(AIN1,OUTPUT);
     201  pinMode(AIN2,OUTPUT);
     202}
     203
     204void loop() {
     205  int i=0;
     206  //モーター停止
     207  analogWrite(AIN1,0);
     208  analogWrite(AIN2,0);
     209  delay(500);
     210 
     211  //モーター正回転・スピード変化
     212  analogWrite(AIN2,0);
     213  for(i=0;i<256;i++){
     214    analogWrite(AIN1,i);
     215    delay(100);
     216  }
     217  for(i=255;i>=0;i--){
     218    analogWrite(AIN1,i);
     219    delay(100); 
     220  }
     221 
     222  //モーター停止
     223  analogWrite(AIN1,0);
     224  analogWrite(AIN2,0);
     225  delay(500);
     226 
     227  //モーター逆回転・スピード変化
     228  analogWrite(AIN1,0);
     229  for(i=0;i<256;i++){
     230    analogWrite(AIN2,i);
     231    delay(100); 
     232  }
     233  for(i=255;i>=0;i++){
     234    analogWrite(AIN2,i);
     235    delay(100); 
     236  }
     237}
     238}}}
     239
     240
     241この他にアナログ入力で速度を変化させるようなタイプなど、上の3タイプではない制御方法を持つモータードライバも存在します。[[BR]]
     242モータードライバの種類によって制御に必要なピンがいくつか追加されますが、大体のDCモータードライバの基本的な使い方は上記の3タイプです。[[BR]]