モータードライバMC33926/MC33932をつかってみる

NXPで販売されているMC33932/MC33926というモータドライバを使って、適当なモータを動かしていきたいと思います。

今回は、いつものFRDM-K64Fではなくて、TWR-KE18Fという5V系のNXPマイコンMKE18F512VLL16が搭載された開発ボードを使います。これ、タワーシステムという名称のとおり、下の写真のように開発ボード(写真赤色のボード)の両端をコネクタにさして、タワー構造になります。

そして、空いているスロットに、モータドライバだとかADの拡張ボードだとか、通信用ボードだとかを差し込み、機能拡張が簡単にできるよってものです。

要は、Arduinoのシールド的なものですね。

ただ、こっちの方が、見た目がかっこいい☆彡

拡張ボードは、いろいろとラインナップされているので、用途に合わせて、買い足していけば、やれる機能が増えてきます。

さて、冒頭のモータドライバのICは、この拡張ボードのひとつTWR-MC-MVHB1EVBに搭載されているものです。

写真上の長方形型のICがMC33932で正方形型のがMC33926です。MC33932はDCモータを二個駆動でき、MC33926はDCモータを一個駆動できて、合計3個のモータをこのボードで制御できます。

ドライバ的にはほぼ同じスペックっぽいですね。違いとしては、MC33926の方は、スルーレートの変更、回転方向の切り替え機能がついているぐらいです。

 入力電圧(連続): 5.0V~28.0V

 入力電圧(瞬間): 5.0V~40.0V

 出力電流(最大): 5.0A

 電流制限 : 6.0A (±1.5A)

 PWM周波数(最大):11kHz

説明書では、用途的に、電子制御スロットルや排気バルブとかになっていますが、DCサーボで上の電流値を満足するものなら、基本なんでも動きます。

下がUser’s Guide から抜粋した絵。MC33926とMC33932は電源は別々にとる必要がありそうですね(Power Connector)。モータは、OUT1/OUT2かOUT3/OUT4につながります。電源・モータは、ボード上緑のコネクタ(なんていうんでしたっけこれ)が出ているので、これにそれぞれ繋げます。

今回は、ドライバ作成のためのテストですが、実際に動かすものがないとつまらないので、近くに転がってたラジエター用の冷却ファンでもまわしてみることにします。下の画像は配線の参考です。

最初、SDKでボードのサンプルコードとかないかなと探してみたんですが、見つかりませんでした。

NXPにも問い合わせしてみましたが、このボード自体の開発は、結構古くて、最新の開発環境であるMCUXpresso上で動作するサンプルコードは今のところないそうです。

(図面みると確かに2006年に出図してますね。)

CodeWorrierとかKenetis Design Studioとか前の開発環境では、サンプルコードはあるみたいですが、いまさら古い環境をいれ直してもな~ってことで、今回は、ドライバをいちから作ることにしました

ピン配をしらべる

今回はMC33932とMC33926でひとつずつモータを動かすことにします。

TWR横からみると、下のような感じで、ボード同士が、つながりますので、何と何がつながっているのか、訳わかりません。

ボードは、両面のエッジコネクタがPCI EXPRESSでつながる仕様になっています。PCI EXPRESSは下絵にあるような感じで、裏表、上下でサイドA,B,C,Dとなって、ピン番号が割り振られています。

ボードに出てる主な信号がどの端子にでてるか書き出してみます。左がドライバの入出力で、真ん中がエッジコネクタの端子番号、右がKE18F(マイコン)の端子名になってます。

PCIエクスプレスのピン番号を中心に、モータドライバとマイコンのデータシートを行ったり来たりすれば、上のような整合表をつくることができます。

データシートのリンクを貼っておきます。モータドライバ。

TWR-MC-MVHB1EVB user’s guide

こっちは、マイコンの回路図。ダウンロードには、登録が必要です。

TWR-KE18F回路図

上のリンクで、ページの下部にPrinted Circuit Boards and schematicsがあるので、それをみます

信号のなかみを理解する

ボードから色々な信号が出てますが、内容を整理しときます。

IN1, IN2

それぞれMOSFETを介して、OUT1とOUT2につながります。ロジックがHighでモーター電源とつながり、Lowで出力用のGNDとつながります。実際これは、KE18FのFlexタイマーモジュールにつながっていて、マイコンからPWM信号を出して、DUTY制御することになります。

D1

Highで、OUT1とOUT2がハイインピーダンス状態になり、モータの制御が とまります。

EN

Highで、モータの制御が有効になります。Lowだと、OUT1とOUT2がハイインピーダンスになります。D1との違いは、Lowだとスリープモードにはいり、電力消費を抑えます。

FB

HBの消費電流をアナログ信号で出力します。実際、マイコンのADで使えるように、電流の0.24%を出力します。

SFbar

HBのステータスフラグです。モータが駆動されていると、Highになります。

モータの動作モードに合わせた、各信号の状態をデータシートから抜粋しました。ここで、Zはハイインピーダンス、XはHigh か Lowかどっちかです。

ENをHigh、D1をLowにした状態で、IN1とIN2にPWM信号を入力すれば、とりあえず、モータは回せることが分かります。

ドライバの作成

こんなマニアックなボードのドライバを必要としてる人は、ほとんどいないとおもいますが、一応公開しときます。あくまでも参考用なので、MC33932はモータAしか使えません。モータBを使いたい場合は、これをベースに拡張してください。

ざっくりと使い方を説明

事前にドライバmvhb.hとmvhb.cを既存のプロジェクトに追加しときます。

メインプログラムで、ヘッダファイルをインクルードします。

#include "mvhb.h"

HBの設定用のコンフィグを定義します。これは、MVHB33926とMVHB33932でそれぞれ用意したので、個別に定義します。

// MVHB configuration
MVHB33926_config_t HBConfig;
MVHB33932_config_t HBConfig_dual_A;

コンフィグの中身は、

初期設定をGetDefaultConfig関数でコンフィグに格納します。

MVHB33926_GetDefaultConfig(&HBConfig);
MVHB33932_GetDefaultConfig(&HBConfig_dual_A);

次に初期化関数を下のように呼びます。

    MVHB33926_Init(&HBConfig);
    MVHB33932_Init(&HBConfig_dual_A);

ここら辺で、TWR-MC-MVHB1EVBに必要な信号をマイコン側で定義しています。

その後で、StartPWM関数で、FTMをスタートさせて、PWM信号を出力します。初期の目標Dutyは0%になります。

 MVHB_StartPWM(&HBConfig,&HBConfig_dual_A);

実際のPWM信号のDuty設定は、PWMUpdate関数を使います。第一引数が目標Duty(プラスが正転、マイナスが逆転です。第二引数で、PWMを変更したいモータを指定します。

PWMUpdate( 20.0f ,MVHB33926)
PWMUpdate( -10.0f ,MVHB33932_motorA);

実際に動作させてみた

こんな感じでちゃんと動いてます。KE18Fのボードには、ポテンショメータが実装されているので、下は、ボテンショメータの位置によって、DUTY比を変更して、ファンスピードを変えた時の様子です。ちょっと分かりにくいですね;

Happy DCモータ!

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です