I2Cモータドライバ

I2Cモータドライバの概要

関連するファイルはzipでまとめられています→I2CMotorDriver.zip

  • I2Cモータドライバは,I2Cスレーブデバイスとして働くモータドライバ.
  • 1自由度分のモータを駆動可能.
  • PWM制御が可能.
  • 回転制限用にスイッチ2つと可変抵抗1つを接続可能.
    (回転制限はI2Cモータドライバが自律的に行います.)

各部の説明

回路

回路図はBSch3Vで製図しました.ファイルはI2C Motor Driver sch.ce3です.

部品

コネクタ類は共立エレショップで,その他の部品は秋月電子通商で購入できます.

記号 分類 定格・型 パッケージ
R1, R2, R3, R4 抵抗 100Ω 1608
R5, R6, R7, R8 抵抗 4.7kΩ 1608
R9, R10, R11, R12 抵抗 10kΩ 1608
C1, C2 積層セラミックコンデンサ 0.1uF ラジアル
C3, C4, C5, C6 セラミックコンデンサ 10pF 1608
U1 AVRマイコン ATmega88P 28ピンDIP
Q1, Q2 NPNトランジスタ 2PD601AR SC-59
Q3, Q4 PNPトランジスタ 2PB709AR SC-59
Q5, Q6 N-ch Power MOSFET SUP85N15-21 TO-220
Q7, Q8 P-ch Power MOSFET 2SJ334 TO-220
D1, D2, D3, D4 汎用ダイオード 1N4148 アキシャル
CN1, CN2, CN3, CN4 VHベース付ポスト サイド型02P
CN5, CN6 EH-Aベース付ポスト トップ型04P
CN7 EH-Aベース付ポスト トップ型03P
CN8, CN9 EH-Aベース付ポスト トップ型02P
SW1 DIPスイッチ 8P 16ピンSOP

製作方法

ファームウェア

ファームウェアはAVR Studio 4+WinAVRの環境で製作しました.i2cmd.hexをATmega88に
書き込んでください.プログラムは内蔵クロックによる8MHz動作を想定しているので,
ATmega88のヒューズのCLKDIV8ビットをアンプログラムド(1)にしてください.

基板の製作

基板のパターンはMinimal Board Editorで製作しました.ファイルはI2C Motor Driver pcb.mb3です.
感光基板で製作する場合,印刷に必要なレイヤーは,PTHSOLDRLの3つです.

基板の大きさは50mm×75mmで,複数毎並べると,サンハヤトの感光基板にちょうど収まるようになっています.

基板組み立てに関する注意

組み立て方によっては,ハンダ面のジャンパ線の端がMOSFETのパッケージと接触する可能性
があります.パッケージがフルモールドでない場合は注意してください.

組み立て図(ハンダ面)

組み立て図(部品面)

使用方法

可変抵抗の接続方法

可変抵抗は,モータをCW方向に回すと,出力電圧(分圧値)が小さくなるように接続(又は設置)してください.

可変抵抗によって回転制限をするか否か

可変抵抗によって回転制限をするか否かは,
SLA設定用のDIPスイッチの最下位bit(VRE)によって設定することができます.

  • VRE = 0(2) : 使用しない
  • VRE = 1(2) : 使用する

コンフィグモード(可変抵抗の可動範囲設定)

CW制限スイッチとCCW制限スイッチの両方を押した(短絡)状態で電源を入れると,
I2Cモータドライバはコンフィグモードに入ります.コンフィグモードでは,
可変抵抗の可動範囲を設定することができます.設定手順は次のようになります.

  1. 可変抵抗をCWの可動限界の位置まで回す.
  2. CW制限スイッチを押す.ここでEEPROMに書き込まれる.
  3. 可変抵抗をCCWの可動限界の位置まで回す.
  4. CCW制限スイッチを押す.ここでEEPROMに書き込まれる.

I2Cでの操作方法

I2Cでの操作方法は非常にシンプルなものになっていて,1バイトのコマンドで行います.

7bit 6bit 5bit 4bit 3bit 2bit 1bit 0bit
DIR PW
  • DIR … Direction.0(2):CW,1(2):CCW
  • PW … Pulse Width.0~127の間でパルス幅を指定します.

DIR=0かつPW≦0x0Fではストップ,DIR=1かつPW≦0x0Fではブレーキ動作をします.

I2Cリード

I2Cマスターからデータ要求があった場合は,可変抵抗のA/D変換値を返します.

I2Cでの操作例

アクノリッジの表示は省略します.

  • 黒字:I2Cマスター → I2Cモータドライバ
  • 赤字:I2Cモータドライバ→ I2Cマスター
  • X:なんでもいい.または,場合による.

モータをCCW・PWM=45%で制御する

127×0.45=57.15 ⇒ PW=57

  1. スタートコンディション
  2. SLA+W
  3. 10111001(2)
  4. ストップコンディション

可変抵抗のA/D変換値を読み取る(I2Cリード)

  1. スタートコンディション
  2. SLA+R
  3. XXXXXXXX(2) (可変抵抗のA/D変換値)
  4. ストップコンディション

動かないとき

全く動かない

ATmega88のヒューズのCLKDIV8ビットをセットしていますか.
CLKDIV8ビットはセットされていないといけません.

一方向にだけ動作しない

DIPスイッチのVREビットがセットされていませんか.
可変抵抗による回転制限をしない場合,
VREビットはクリアされていないといけません.

設計資料

参考文献・使用ソフトウェア

  1. Wikipedia日本語版 I2C
    http://ja.wikipedia.org/wiki/I2C
  2. Philips I2C specifications
    http://www.nxp.com/acrobat_download/literature/9398/39340011.pdf
  3. I2Cバス仕様書(日本語版)
    http://www.nxp.com/acrobat_download/literature/9398/39340011_jp.pdf
  4. AVRのI2C制御
    http://www.eleki-jack.com/mycom2/avr/avri2c/
  5. ATmega48P/88P/168P/328P Preliminary
    http://www.atmel.com/dyn/resources/prod_documents/doc8025.pdf
  6. ATmega88P翻訳日本語版データシート
    http://reef.path.ne.jp/~hero/pdf/mega88P.pdf
  7. AVR Studio 4
    http://www.atmel.com/dyn/Products/tools_card.asp?tool_id=2725
  8. WinAVR
    http://winavr.sourceforge.net/
  9. OpenOffice.org 3
    http://ja.openoffice.org/
  10. BSch3V
    http://www.suigyodo.com/online/schsoft.htm
  11. Minimal Board Editor
    http://www.suigyodo.com/online/mbe/mbe.htm
  12. Irfanview
    http://www8.plala.or.jp/kusutaku/iview/

謝辞

利用させていただいた文献とソフトウェアの作者の方々にお礼申し上げます.ありがとうございました.

進捗状況

(2009.5.20)
解説文書を微修正しました.

(2009.4.26)
以下の内容を更新
[ファームウェア]PWMの周波数を落とす
[仕様]コンフィグモードに入る方法を変更(CW制限スイッチを押したまま電源投入→CW制限スイッチとCCW制限スイッチを押したまま電源投入)

(2009.4.25)
解説文書を完成させて,関連ファイルをフルセットにしたアーカイブをアップしました.

(2009.4.22)
解説文書を更新しました.(各部の説明・組み立て図を追加)(城)

(2009.4.14)
既知の問題が解決したので,プログラムをアップしました.(城)

(2009.4.2)
一応すべての機能を実装しました.
プログラムは既知の問題が解決してからアップします.(城)

既知の問題

  • 極端に短いパルス幅を指定すると爆熱(ロック状態になると思われる)→下限値を設定する.PWMの周期を落とす.
  • 回転スイッチか回転制限可変抵抗が働いている状態で,
    制限を越えている方向へ回す命令を高速に行うと,
    [回転→停止→回転]が細かく繰り返されて,爆熱するかもしれない.
  • PWMのパルス幅を0にすることでモータを停止しているつもりだけど,
    オシロスコープで確認すると短いパルスが出力されている.→微妙に貫通電流が流れている.

(2009.3.28)
次の動作を確認しました.(城)

  • DIPスイッチによるSLAの設定
  • モータの正転・逆転・PWM制御
  • I2Cによる制御

次の動作は未確認です.

  • マイクロスイッチによる回転制限
  • 可変抵抗の回転制限に使う抵抗値の設定
  • 可変抵抗による回転制限

プログラムはもう少しまとまってからアップします.

プリント基板に誤りが見つかりました.訂正可能なので大丈夫です.

(2009.3.17)
PCBを改良(コネクタとスペーサが干渉しているのを訂正)(城)

(2009.3.16)
試作基板完成(城)

(2009.3.8)
解説文書を製作(未完)(城)

(2009.3.7)
現在プリント基板が2枚分できて,組み立て中.
プログラムは,ブレッドボードで一部機能の動作を確認.
基板ができたら,プログラムの調整開始.(城)

ċ
I2CMotorDriver.zip
(55k)
Robo Kirarin,
2009/08/15 0:09
Comments