ボクにもわかる
IchigoJam用サンプルプログラム I2C接続PWMモータードライバ DRV8830の制御
|
[IchigoJam メニューへ戻る]
|
IchigoJamにモーターとモータドライバを接続した実験の様子 |
|
はじめに
このページではI2C接続PWM制御モータードライバDRV8830やMOS FETを使ってモーターを制御するための簡単なハードウェア製作とIchigoJam用サンプルプログラムについて紹介します。なお実用的に使用するには電源回路の見直しやモータ出力端子(OUT1とOUT2)にコンデンサを入れるなどの調整が必要です。
まずはDRV8830について説明し、後半にMOS FETについて説明します。また別ページですが、ソフトウェアPWMのサンプルプログラムの説明もあります。
|
|
PWM制御モータドライバ DRV8830
DRV8830は、Texas Instruments 社のI2C接続のPWM制御モータドライバICです。電源電圧は2.75V〜6.8Vで動作し、モータの正回転、逆回転、PWMによる速度調整が可能です。ドライブ可能なモーターは1個です。PWM出力機能をICに内蔵しており、出力電圧を設定するだけで速度調節が出来る点が特長です。
このドライバICをモジュールにした基板が秋月電子通商から販売されています。参考価格170円と安価な点も特長の一つです。一般的なMOS FET等でモータドライバを製作した場合、PWMはマイコン側に委ねることになることや、ハンダ付けが容易な高出力FETが高価であること等を考えると、DRV8830の優位性が良くわかると思います。
|
|
DRV8830 ハードウェアの製作
ここではブレッドボード上に製作します。本ICのピン配列を下表に示します。
Pin |
接続 |
|
Pin |
接続 |
1 |
OUT1 |
|
10 |
I2C_SCL |
2 |
ISENSE |
|
9 |
I2C_SDA |
3 |
OUT2 |
|
8 |
A1 |
4 |
VCC |
|
7 |
A0 |
5 |
GND |
|
6 |
FAULTn |
OUT1とOUT2にはモーターを接続します。平行に0.1uF程度の積層セラミックコンデンサを入れるとノイズを低減することが出来ます。
電流制限設定用の入力端子ISENSEにはGNDに対して1Ω以下の抵抗を挿入します。1Ωで200mAです。半分の0.5Ωにすると400mAになります。
4番ピンのVCCには5V電源を接続します。IchigoJamの3.3Vは電流不足のため接続することが出来ません。ここではUSBの5Vを接続します。5番ピンはGNDです。
6番ピンから8番ピンには何も接続する必要はありません。
9番ピンのI2C_SDAをIchigoJamのIN3に接続し、10番ピンのI2C_SCLはIchigoJamのEX1に接続します。これらはI2C通信を行うために必要な端子です。また、10kΩのプルアップ抵抗をVCC(5V)に接続します。
|
モータドライバを搭載したブレッドボード |
|
DRV8830 制御用サンプルプログラム
下記にサンプルプログラムを示します。実行すると、キーボードの上下キーでモータの回転速度を、左右で回転方向を変更することが出来ます。
動作中に表示される「Dir」は回転方向を、「Lev」は回転速度、「Res」はICからの応答値を示します。応答値が0であれば正常です。エラーが発生した場合、「E」キーを押下するとエラーを解除する信号を出力します。
終了は下キーを「Lev=0」になるまで押し続けます。
1 ?"I2C DRV8830"
10 D=1:'ホウコウ
20 L=1:'ソクド
30 E=#8000:'エラー
100 'INIT
110 POKE #700,0,1,#80,#01
120 IFI2CW(#64,#701,1,#702,1)?E
200 'DRV
210 ?"Dir=";D,"Lev=";L,"Res=";
220 IFI2CR(#64,#701,1,#704,1)?E
230 ?HEX$(PEEK(#704))
240 POKE #703,L<<4|D
250 IFI2CW(#64,#700,1,#703,1)?E
300 'KEY
310 K=INKEY():IF K=0 GOTO 310
320 IF K=31 AND L>#0 THEN L=L-1
330 IF K=30 AND L<#F THEN L=L+1
340 IF K=28 AND D<>1 THEN D=1
350 IF K=29 AND D<>2 THEN D=2
360 IF K=ASC("E") GOTO 100
370 IF L>0 GOTO 200
|
|
|
DRV8830を使った場合の課題
「Res」に「4」または「5」の応答を得ることがあります。これは電圧低下による誤作動防止のエラー(UVL0)を示しており、電源供給が不十分だったりモータへの突入電流が大きい場合に発生します。「4」の場合、既に電圧が復帰して正常な状態であることを示します。
モータが止まってしまうような場合は対策が必要です。多くの場合、VCCとGNDに100uF以上の電解コンデンサを挿入することで対策が可能と思います。
さらに、モータ出力OUT1とOUT2との間に0.1uF程度の積層セラミックコンデンサを挿入すると良いでしょう。0.1uFを大きく上回ると電流制限超過などの他の問題が発生する場合があるので、大きければよいというものではありません。また逆回転時に逆電圧がかかるので電解コンデンサのような極性が決まっているコンデンサを使用することは出来ません。
|
|
MOS FETによるモータドライバの製作
次にMOS FETを使った場合の製作例を示します。IchigoJam BASICファームウェアはVersion 1.0.2 beta 7からサポートされたPWM命令(周期設定機能つき)をサポートするバージョンが必要です。ここではVersion 1.0.2 beta 9にて動作を確認しています。
|
IchigoJam BASICを書き込んだマイコンボード上にMOS FETモータドライバを接続した実験の様子 |
|
MOS FET ハードウェアの製作
MOS FET(Pch)には手持ちの都合で、International Rectifier製のIRFU9024NPBFを用いました。このFETの欠点はVGSが4Vと高いためゲートに5Vが必要な点です。ここではゲートをFET用の電源に1kΩでプルアップし、エミッタ接地のトランジスタ2SC1815でドライブします。トランジスタのコレクタをFETに、ベースを10kΩの抵抗を経由してマイコンのOUT2端子に接続します。
以下の写真の左のほうに実装した四角いICがFET、そのすぐ右にあるのがトランジスタ、さらに右にあるのはマイコンの電源用の3.3VのレギュレータICです。
基板の製作例
電源にはDCジャックから5〜9Vくらいを入力することを想定しています。MOS FETのソース端子をDC入力へ、ドレインを出力へ接続します。このドレイン出力とターミナルブロック端子との間にポリスイッチ(リセッタブル・ヒューズ)を挿入し、電流を制限します。写真では入力にもポリスイッチが入っていますが、こちらが先に遮断されるとマイコンも停止してしまいますので、FETの出力のポリスイッチの少なくとも2倍以上の遮断電流のポリスイッチを入れるようにします。写真の例では出力側に200mAのものを、入力側に500mAのものを入れました。
出力端子には逆流防止用のダイオードを2端子間に挿入しています。ツェナーダイオードを用いればコイルによる高電圧を保護することも可能です。
またFETの出力を多回転ボリューム50kΩで分圧し、アナログ入力に対応したIN2端子に入力しました。分圧出力には0.1uFのコンデンサを挿入しPWMを直流に変換しています。
このような可変抵抗を使うことで分圧比を微調整することが出来ます。IchigoJam BASICは整数演算しかサポートしていないので、たとえばFET出力が1VのときのAD変換結果が100になるように調整すれば、FETの出力電圧の換算が容易になります。ここでは1V時に100になるように調整した上で、10回のAD変換結果の総和を計算することで、ちょうど単位がmV(ミリボルト)の電圧が得られるように調整しました。なお5V以上の電源を使用する場合は、必ずボリュームを最小(低い電圧がマイコンに入力されるよう)にします。
その他のビデオ出力や電圧計、シリアル入力端子、OUT2の動作確認用LEDなどは用途や好みに応じて追加します。
|
|
MOS FET 制御用サンプルプログラム
下記にサンプルプログラムを示します。実行すると、キーボードの上下キーでモータの回転速度を、左右で回転方向を変更することが出来ます。
動作中に表示される「Dir」は回転方向を、「Lev」は回転速度、「Res」はICからの応答値を示します。応答値が0であれば正常です。エラーが発生した場合、「E」キーを押下するとエラーを解除する信号を出力します。
終了は下キーを「Lev=0」になるまで押し続けます。
1 ?"PWM Driver with ADC"
20 L=0:'ソクド
100 'INIT
110 OUT 2,0
200 'DRV
210 ?"Lev=";L,"PWM=";
220 PWM 2,L,16:A=0:WAIT 10
230 FOR I=1 TO 10
240 A=A+ANA(2)
250 NEXT
260 ? A;"mV"
300 'KEY
310 K=INKEY():IF K=0 GOTO 310
320 IF K=31 AND L>=0 THEN L=L-1
330 IF K=30 AND LD<#F THEN L=L+1
370 IF L>=0 GOTO 200
|
この例では測定した電圧を表示するだけですが、この電圧を一定に保つフィードバック制御を行うことも可能です。たとえば、電源にバッテリを使用した場合などに電池の残量に関わらず一定の出力を保つような制御も可能です。また想定よりも電圧が降下した時にショートと判断し、PWM出力を停止するなどの保護制御も行えるでしょう。
|
|
モータドライバ用プリント基板
電子工作が苦手な方にプリント基板(要半田付け作業)も準備中です。ここで紹介したドライバとは異なりますが、比較的、簡単な半田付け作業でモータを動かすためのハードウェアを製作することが出来ます。(ソフトウェアによるPWM制御)
モータ制御用の専用基板[Motor Shield]
|
|
掲載情報について
- こどもパソコン IchigoJamを用いた電子工作、応用回路、BASICプログラム等を紹介しています。
- IchigoJam は株式会社 jig.jp の登録商標です。
- 本サイトは jig.jp や B Inc.、PCN の作成物ではありません
- 当ウェブサイトの内容や情報については、ご自身の責任でご利用ください。
製作品などで事故が発生した場合であっても当方は一切の補償をいたしません。
|