= BD62xxFモータードライバ = [http://www.switch-science.com/products/detail.php?product_id=159 こちらで販売しています。] [[Image(1.jpg, 500px)]] [http://www.rohm.co.jp/products/databook/motor/pdf/bd621x_series-j.pdf ロームのBD6211F]を使用した、Hブリッジモジュールです。 * ブラシ付きモーター用 * 正転、逆転、ブレーキ、空走 * 無段階変速。入力はPWMまたはアナログ電圧。 * 電源電圧3~5.5V。 * ドライブ電流最大1A(定格)。 計画からずいぶん時間が経ってしまいました。 実は、基板屋にEagleの.brdファイルで依頼したら、Gerberへの変換ミスでシルクがぐちゃぐちゃになり、作り直してもらったのです。 そんなことがあるとは思いもしませんでした。 製造前にPDFで確認したときは大丈夫だったんですけど。 今回のロットは、なんと'''手付け'''です。 そのうち、「なんちゃってリフロー」で製造しますよ!。 良い点: * 小型 * (たぶん)安い * ブレーキ、空走機能付き * 無段階変速(PWMおよびVREFの二通り) * この大きさで1Aまでドライブできる(定格) * VREFは内部でPWMに変換して動作しているので、損失=熱が少ない。 * 保護回路いろいろ(過電流、温度、過電圧、低電圧) 悪い点: * 信号系と負荷系の電源が分離されていない * 放熱が悪いので、実際には1A連続は厳しいかもしれない。 モーターの定格電圧が信号系(マイコン)の電源電圧よりも低い場合は困ってしまいます。 モーターによっては、PWMで一定のデューティよりも上げないように注意すれば大丈夫な場合があります。 == 使って下さった方のページ == * 神崎さん [http://www.eleki-jack.com/KitsandKids2/cat137/cat141/bd6211/ エレキジャック「連載 キットで作る(64)」] * arduino@wiki管理人さん [http://www15.atwiki.jp/arduino/pages/33.html Arduino戦車] * arduino@wiki管理人さん [http://www15.atwiki.jp/arduino/pages/34.html Arduino自動カーテンオープン目覚まし時計] == 使い方 == * VCC -- 電源3~5.5Vを接続 * GND -- グラウンド * OUT1 -- モーター接続端子(出力) * OUT2 -- モーター接続端子(出力) ここまでは自明でしょう。 * FIN -- 制御端子(入力) * RIN -- 制御端子(入力) * VREF -- 制御端子(入力)出荷時は基板裏側でVCCに接続してあります。 使い方が2種類あります。 PWM制御方式:: * FINとRINにPWM信号を与え、回転方向および回転速度を制御する。 * VREFにはVCCを与えておく。出荷時状態なら、VCCに接続してあります。 VREFアナログ制御方式:: * FINとRINには論理1または0のデジタル信号を与えて回転方向を制御する。 * VREFに与えたアナログ電圧で、回転速度を制御する。基板裏のJ1のパターンをカッターで切り離して下さい。 PWM制御方式の場合、 || FIN || RIN || 動作 || || 論理0 || 論理0 || 空転 || || PWM信号 || 論理0 || 正転 || || 論理0 || PWM信号 || 逆転 || || 論理1 || 論理1 || ブレーキ || PWMの周波数は20kHz~100kHzです。~~ArduinoのPWM出力にそのまま接続できます。~~ ArduinoのPWM出力周波数は約500Hzですので規格外となり推奨できません。(それなりには動いてしまいますが、精度は出ないでしょう。) 逆に、アナログ出力をやりたい場合によくやるようにコンデンサをつけて平滑すると、動きません。 VREFアナログ制御方式の場合、 || FIN || RIN || 動作 || || 論理0 || 論理0 || 空転 || || 論理1 || 論理0 || 正転 || || 論理0 || 論理1 || 逆転 || || 論理1 || 論理1 || ブレーキ || FIN、RINは、電源電圧にかかわらず2V以上で「論理1」です。 このモジュールを5Vで動かしながら、3.3Vのマイコンにつなげることもできます。 Arduinoの場合は、FIN、RINをデジタル出力に割り当て、Vrefにローパスフィルタ回路を付けてPWM出力を平滑化して入力すれば良いと思います。([http://sim.okawa-denshi.jp/CRlowkeisan.htm 参考]:カットオフ周波数を約340Hzとすると、抵抗=470Ω、コンデンサ=1μFになります。) == 仕様 == 詳細は、[http://www.rohm.co.jp/products/databook/motor/pdf/bd621x_series-j.pdf チップの仕様書]を見て下さい。 * 動作電圧:3V~5.5V * 負荷電流:最大1A * オン抵抗:最大1.5Ω(上下合計) * 熱抵抗:182℃/W * チップ温度:最大定格150℃ * 入力電圧:-0.3V~電源電圧(電源電圧以上の電圧を入力しないでください) * 論理1:2V以上 * 論理0:0.8V以下 1Aを流すと、1A×1.5Ω=1.5Vの電圧降下がチップ内で起こります。 この電圧降下による損失は1.5V×1A=1.5W。 チップと外気の温度差は1.5W×182℃/W=273℃。 外気が25℃とすれば、チップ温度は273℃+25℃=298℃。 チップ温度の最大定格は150℃なので、1Aを連続して流すことはできない計算です。 PWMまたはオンオフを繰り返すことによって、150℃を越えないようにする必要があります。 最大負荷1Aというのは、連続して流していい値ではないことに注意して下さい。 逆方向に計算すると、外気が25℃の場合に連続して流せる電流は0.68Aということがわかります。 == スケッチの例 == マブチのFA-130を回してみました。(ただし上記のように規格外のPWM制御モードでの動作確認です。) {{{ #!c int FIN = 5; int RIN = 6; int OFFSET = 1.0 * 256 / 5; int MAX = 1.5 * 256 / 5 - OFFSET; int degree = 0; void setup() { Serial.begin(9600); pinMode(FIN, OUTPUT); pinMode(RIN, OUTPUT); } void loop() { delay(100); degree += 1; degree %= 360; long v = int(sin(degree * 2 * PI / 360) * MAX); Serial.println(v); if (v > 0) { analogWrite(FIN, v + OFFSET); analogWrite(RIN, 0); } else if (v < 0) { analogWrite(FIN, 0); analogWrite(RIN, OFFSET - v); } else { analogWrite(FIN, 255); analogWrite(RIN, 255); } } }}} '' (2010/08/20 - yamada) Vref回路推奨に加筆修正 '' ''(2009/4/10 - sgk)''