自作mbed互換機MATSU-bed(mbed_pro_mini)の使い方

MATSU-bed

概要

このページでは自作mbed互換機 MATSU-bed(mbed_pro_mini)の使い方について解説します。 正式名称はmbed_pro_miniのつもりでしたし、シルクにもそう書いてありますが、mbedが登録商標で使えないかも知れないのということ、みんなが松bedと呼ぶのでとりあえずはMATSU-bedということにします。

MATSU-bedは本家の青Mbed(LPC1768)の代わりにロボットなどに組み込むことを前提に、安価で小型なマイコンボードを目指して開発しました。
単体でUSB,RS485,CANなどの通信に対応しており、コンピューターとデバイスの通信変換器としても使用できます。

特徴

  • Microcontroller features
    • NXP LPC1549 MCU
    • ARM® Cortex™-M3 Core
    • 72MHz, 36KB RAM, 256KB FLASH
    • 4 x SCT(State Configurable Timer)
    • USB Device, 2xSPI, I2C , UART, 14xADC, GPIO, CAN, RS485
    • UART, CAN and USB ISP suport
  • Board Features
    • Board size is 18mm x 36mm
    • Contain transceiver-ic of RS485 and CAN
    • Built-in USB drag 'n' drop FLASH programmer
    • 4 LEDs

ピンアサイン

シルク間違いあり!

現在、Rev.Aです。まだ幾つか未発見のシルクミスが有るかもしれません。
CANのHIGHとLOWのシルクが逆です。

/media/uploads/hardtail/------_NZX4vYB.png

  • シルクでPxの様に描かれていたらプログラム上のGPIOではP0_xと宣言してください。
    • (例:P1 →P0_1)
  • ピンアサインには書かれていませんが、UART、ISP、PWMは基本的にどのIOピンにも割り当てることができます。
    • LPC1549のスイッチマトリクスによるものです
  • RS485やCANを使うときはマイコンボード裏面のジャンパをショートして下さい
  • シルクで数字の後に*(アスタリスク)が付いているピンはRS485又はCANと機能を共有しており、裏面に実装されているトランシーバICに接続されています。これらの通信を使う際はマイコンボード側面のピンはIOとして使えません。
    • ただし、通信の内容もそれらのピンに現れるのでデバッグに役立てて下さい。
  • ISPボタンはデジタル入力として使うことができます。
    • ただし、ISP1はUSBの5Vにプルアップされており、このピンの状態でUSB接続を認識しています。USBでの通信とISP1のデジタル入力の併用は推奨できません。

サンプルコード

Import programMATSU-bed_blinky

MATSU-bedのLチカ用サンプルプログラム

main.cpp

#include "mbed.h"
#include "USBSerial.h"

#define LED1 P0_29
#define LED2 P0_28
#define LED3 P0_27
#define LED4 P0_26

#define ISP0 P0_4
#define ISP1 P0_16

//USBSerial pc;

BusOut myled(LED1, LED2, LED3, LED4);

//DigitalIn sw1(ISP0);
//DigitalIn sw2(ISP1);

int main() {
    //sw1.mode(PullUp);
    
    myled = 0b0001;
    
    while(1){
        if(myled < 0b1000){
            wait(0.5);
            myled = myled << 1;
        }else{
            while(myled != 0b0001) {
                wait(0.5);
                myled = myled >> 1;
            }
        }
    }
}

プログラムの書き込み

MATSU-bedに使われているLPC1549ではUSB、UART、CANの3つのISP(In-Application Program)に対応しています。このうちここではUSB-ISPについて解説します。
USB-ISPは通常のmbedと同じようにUSBストレージとしてPCにに読み込まれ、BINファイルのドラッグ&ドロップすることでプログラムを書き込むことができます。

  1. マイコンボードをPCとUSBで接続する
  2. ISP0のボタンを押す(押し続ける)
  3. ISP0を押し続けた状態で、RESETボタンを押す。
  4. ISP0を押し続けた状態で、RESETボタンを離す
  5. RESETボタンを離した後、ISP0ボタンを離す
  6. RESETボタンを離すとPCにUSBストレージとして認識される
  7. USBストレージの中に入っているfirmware.binを削除する
  8. 空になったUSBストレージに書き込みたいBINファイルをコピーする
  9. 書き込みが完了したらRESETボタンを押すとプログラムが走りだす /media/uploads/hardtail/------.png

シリアルデバッグ

通常のmbedプラットフォームではターゲットマイコンの他にインターフェースチップが搭載されており、USBコネクタはこのインターフェースチップに接続さています。
インターフェースチップはPCとターゲットマイコンとを中継し、ドラック&ドロップによる書き込みやUSB仮想シリアル通信を可能にしています。 しかし、MATSU-bedではコスト削減のためにインターフェースチップが搭載されておらず、USBは直接マイコンにつながっています。このためUSB仮想シリアル通信をソフトウェア的に実装する必要がありました。
幸いその機能はUSBSerialとして既に公開されています。 先のLチカ用サンプルコードでは既にインポートされています。"USBSerial.h"をincludeして"USBSerial pc;"の用にオブジェクトを生成すれば、あとは通常のシリアル通信と同様にprintf関数などが使えます。以下がサンプルコード

main.cpp

#include "mbed.h"
#include "USBSerial.h"

USBSerial pc;
 
int main() {
    while(1){
        pc.printf("hello MATSU-bed Serial over USB!!!\n");
        wait(1);
    }
}


windows上で必要なドライバ

windowsでUSBSerialの機能を使うためにはここからドライバをダウンロードして、デバイスマネージャからドライバを読み込んで下さい。

対応ライブラリ

CAN通信

CANのトランシーバICはマイコンボードの裏面に実装されています。使用するときは裏面のジャンパをショートさせて下さい。

CAN通信用の初期化

CAN can1(P0_13, P0_18)    //CAN通信用のオブジェクトの初期化

CAN通信のAPIについては参考サイトを参照して下さい。

4チャンネル以上のPWM

MATSU-bedに使用しているマイコン、LPC1549は4つのSCT(State Configurable Timer)を積んでいます。そのため公式のPwmOutを使うと4つまでしかオブジェクトを初期化できず、それ以上初期化しようとするとマイコンがエラーでストップします。
そこで大量のサーボを動作させるような、1つの周波数で複数のPWMを出力する方法として、SCTのアウトプットに使うライブラリを自作しました。ご活用下さい。

Import librarypwm_all_out

MATSU-bed(LPC1549)でPWMを4つ以上出すプログラム

オフラインコンパイル

現在編集中

技術資料


Please log in to post comments.