ClayBot(クレイボット)とは,さまざまなロボットを実現するための素材群です.もともは Infanoid や Keepon に共通した電子回路やソフトウェアとして開発されました.この素材群を,さまざまな研究者(とくに心理・教育・福祉などを専門とする人)や理科教育の実践者,そして趣味でロボットを作りたい人に,〈夢をカタチにする素材〉として使っていただきたいと考えています.
- もっと詳しく: ClayBot 開発史
ロボットを設計するとき,いちばん時間のかかる部分が,モータを動かすための電子回路です.さまざまなボードコンピュータが市販されていますが,そのサイズ,ソフトウェア,エンコーダやモータとの接続など,設計者が自力で解決しなければならない問題がたくさん残されています.そこで ClayBot では,モータの動きを数値制御する〈制御コンピュータ〉,モータを電気駆動する〈モータドライバ〉,そして PC と接続するための〈通信コンバータ〉を用意しました.これら素材を利用することで,設計者はロボットの全体的なデザインに集中することができるでしょう.
いままでに以下の回路素材を開発し,Infanoid・Keepon に活用してきました.すべて 60mm×40mm を共通基板サイズとしています.
Pico-2・Poco-14・Poco-42・Peco-2 (上=表/下=裏)
- 制御コンピュータ Pico-2
最大 4 台の DC モータ(エンコーダつき)を制御するための小型コンピュータです.デジタル信号の入出力・アナログ信号の入力(A/D 変換)などの機能ももっています.最大 31 個の Pico-2 を 1 本の通信線(RS-485)に接続し,個別に与えたアドレスを使ってホスト PC から動作指令を与えることができます.
- モータドライバ Poco-14/42
最大 4 台の小型 DC モータ(〜20W)を駆動できるドライバ Poco-14 と,最大 2 台の小型・中型 DC モータ(〜120W)を駆動できるドライバ Poco-42 があります.いずれもトルク制御のための電流センサを備えています.
- 通信コンバータ Peco-2
PC のシリアルポート(RS-232C)と Pico-2 の通信ポート(RS-485)をつなげるための Peco-2 があります.現在,無線 LAN によってつなげるための Peco-3,Bluetooth によってつなげるための Peco-4 を開発中です.
Pico-2 は,さまざまな目的に利用できる小型コンピュータです.とくにエンコーダつきのDCモータの制御を得意としています.大きさは 60mm×40mm で,厚みは10mm 程度.その心臓となる SH2(32ビットRISCプロセッサ;50MHz 動作で約60Mips)は放熱のために裏面に配置し,表側には ZEN2044F(エンコーダ読み取り IC)・LED・スイッチ・コネクタなどを配置してあります.電源のコネクタ形式は JST/XH(1番ピンが+),その他のコネクタ形式は JST/SH(ピン配列は回路図を参照)となっています.電源は DC 6〜16V です.
Pico-2 の外観(表/裏)と回路構成(ブロック図)
後述のモータドライバ Poco を接続(POCOX/Y)することで,4つのモータ(MOT0−3)を独立制御することができます.また,モータを流れる電流をモニタする機能(SEN)があり,トルク制御などに利用できます.
- ダウンロード: Pico-2 回路図
各モータ(MOT0−3)に印加される電圧は,PWM 信号と回転方向を表わす DIR 信号として出力されます.PWM 信号の周期は 24KHz です.DIR=0 のとき CW (clockwise) 方向,すわなちモータ単体を出力軸側から見たとき時計回りの方向となります.また,DIR=1 のときは,その反対の CCW (counter-clockwise) 方向となります.これら信号で直接モータを駆動することはできません.モータドライバ Poco のようなHブリッジを利用してモータを駆動することになります.また,モータ電流をモニタする場合は,モータと直列にシャント抵抗(0.1〜1Ω程度)を挿入し,その両端の電圧をオペアンプなどで 0〜5V に増幅して SEN に入力することになります.(モータドライバ Poco には,シャント抵抗や増幅回路が内蔵されています.)
モータおよびエンコーダとの接続
(POCOY 端子についても同様)
エンコーダからの信号は,A相・B相のみを受け取ります.Pico-2 内部では,この A/B 信号を解析することで,エンコーダ1回転あたりのパルス数を4倍にして読み取ります.たとえば,100 パルス/回転のエンコーダの場合,Pico-2 から見ると 400 カウント/回転となります.エンコーダからの信号は,TTL 出力でもオープンコレクタ出力でも構いません.エンコーダに 5V 電源を供給する能力があるため,モータ駆動電源を OFF にした状態でもエンコーダを生かしておくことができます.
Pico-2 はホスト PC からの指令にもとづいてモータを制御します.ホスト PC との通信には,RS-485 規格のシリアル通信を利用し,スタートビット1・データビット8・ストップビット1・パリティなし・通信速度 38400bps を標準としています.実際に PC と接続するときは,RS-232C の信号を(後述の Peco-2 などを利用して)RS-485 に変換し,Pico-2 の PORTX または PORTY に接続することになります.また,R+ と R− の線をツイストペアに,T+ と T− の線をツイストペアにすることで,外来ノイズへの耐性を高めることができます.
シリアル通信線の接続方法
1台の PC に,複数の Pico-2 を数珠のように接続することができます.それぞれの Pico-2 に固有のアドレス(5bit = 0〜31)を与え,ホスト PC から区別できるようにします.最大32台の Pico-2 を1つの通信線に接続することができます.PC から一番遠い(つまり通信線の終端に位置する)Pico-2 だけ,設定スイッチの SW8・9 を ON にして「ターミネータ」と呼ばれる終端抵抗を有効にしてください.それ以外の Pico-2 については,SW8・9 を OFF にしてください.また,PC に直接接続された RS-232C〜485 変換装置(Peco-2 など)の RS-485 側にも終端抵抗(100〜150Ω)を入れてください.
汎用入出力: Pico-2 は,デジタル入出力ポート4端子(LIO0−3;10KΩ でプルアップ),デジタル/アナログ入力ポート8端子(ALINX0−3・ALINY0−3;プルアップなし)を持っています.これらポートは,モータ制御とは独立していますので,ユーザがプログラムから利用することができます.
ラジコン用サーボの制御: Pico-2 は,4台までのラジコン用サーボの制御信号を出力することができます.パルス周期 10.667ms,標準パルス幅 1.5ms の PWM 信号を4系統,RCS0−3 端子から出力します.パルス幅は,ユーザがプログラムから自由に変更することができます.
LED: Pico-2 の表面には,5つの赤色 LED1−5 があります.これらは,ユーザがプログラムから自由に点灯・消灯させることができ,内部状態の表示などに利用できます.
SW1−9: Pico-2 の表面には,10極のディップスイッチがあります.SW1−5 の状態はユーザがプログラムから利用することができますが,通常はアドレス設定に利用します.SW6 はフラッシュ=メモリの書き込み許可,SW7 はブートスイッチ,SW8・9 は通信線の終端抵抗を有効にするスイッチです.なお,SW10 は使用していません.
Pico-2 で最も発熱するのは SH2 と電源レギュレータ(29M05)です.これらを裏面に配置しているので,ロボットなどの構造部材(たとえばアルミの骨格)への放熱経路を確保することができます.具体的には,熱伝導グリス(シリコン系の白いハミガキ状のもの)を SH2 と電源レギュレータのラベル面に塗り,構造部材と密着させます.3.5mm のスペーサを入れてネジ(M2.5〜3)で留めるとよいでしょう.(SH2 の高さは約 3.0mm,電源レギュレータは約 2.3mm です.)
放熱を考慮したPico-2の取り付け方法
Pico-2 を利用するには,後述の BIOS を利用したプログラムを用意し,それを PC 上のクロスコンパイラ(gcc など)でコンパイルします.出来上がった実行可能プログラムを Pico-2 のフラッシュ=メモリ(不揮発性メモリ)に書き込み,そして Pico-2 にそのプログラムを実行させます.
- もっと詳しく: BIOS インタフェース関数
- もっと詳しく: ソフトウェア開発環境
BIOS (basic input/output system) は,ユーザ=プログラムが Pico-2 のハードウェア資源にアクセスするのを手助けする基本ソフトウェアです.ユーザから見ると BIOS はインタフェース関数の集まりです.現在のところ,以下のようなインタフェース関数が用意されています.(uchar は unsigned char に,ushort は unsigned short に,uint は unsigned int に読み替えてください.)
-
PWM: DCモータ(PWM・DIR)
- void PWM_init (void)
- void PWM_set (uchar numB2, short valW)
-
ENC: エンコーダ(A・B)
- void ENC_init (void)
- int ENC_get (uchar numB2)
- void ENC_set (uchar numB2, int count)
-
SEN: モータ電流センサ(SEN)
- void SEN_init (void)
- ushort SEN_get (uchar numB2)
- void SEN_gets (ushort *sen0W, *sen1W, *sen2W, *sen3W)
-
SWT: 設定スイッチ(SW5−1)
- void SWT_init (void)
- ushort SWT_get (void)
-
SCI: シリアル通信(PORTX・PORTY)
- void SCI_init (uchar addr, uchar pack_len, void *callback())
- void SCI_transmit (uchar *packet)
-
CMT: 汎用タイマ
- void CMT0_init (uchar cselB2, ushort periodW, void *callback());
- void CMT1_init (uchar cselB2, ushort periodW, void *callback());
-
RCS: ラジコン用サーボ(RCS)
- void RCS_init (void)
- void RCS_set (uchar numB2, ushort valW)
-
LED: 状態表示用 LED(LED)
- void LED_init (void)
- void LED_set (ushort dataW5)
- ushort LED_get (void)
- ushort LED_op (ushort locW5, ushort dataW5)
-
LIO: デジタル入出力ポート(LIO)
- void LIO_init (uchar dirB4)
- void LIO_set (uchar valB4)
- ushort LIO_get (void)
-
LIN: デジタル入力ポート(ALINX・ALINY)
- void LIN_init (void)
- ushort LIN_get (void)
-
AIX・AIY: アナログ入力ポート(ALINX・ALINY)
- void AIX_init (void)
- void AIX_gets (ushort *val0W, *val1W, *val2W, *val3W)
- void AIY_init (void)
- void AIY_gets (ushort *val0W, *val1W, *val2W, *val3W)
-
WDT: 番犬タイマ
- void WDT_init (uchar cselB3)
- void WDT_reset (void)
- int WDT_check (void)
Poco-14・Poco-42 はそれぞれ小型モータ・中型モータのドライバです.Pico-2 から入力された PWM・DIR 信号に応じた印加電圧で各モータを駆動します.モータ駆動電源は DC12〜36V です.Poco-14 は4つのモータ(1モータあたり瞬間 3A,連続 0.5A まで),Poco-42 は2つのモータ(1モータあたり瞬間 5A,平均 4A まで)を駆動できます.また,エンコーダへの電源供給機能(Pico-2 から)と,エンコーダ信号の中継機能(A相・B相を Pico-2 へ)も持っています.
Poco-14 の外観(表/裏)と回路構成(ブロック図)
Poco-42 の外観(表/裏)と回路構成(ブロック図)
- ダウンロード: Poco-14 回路図
- ダウンロード: Poco-42 回路図
どちらの Poco も,60mm×40mm の大きさ(Pico-2 と同じ)で,厚みは約18mm(モータコネクタ装着時)となっています.HブリッジICを裏側に配置し,効率的に放熱できるようにデザインしてあります.コネクタの形式は,Pico-2 と同様で,電源には JST/XH,Pico-2 との接続には JST/SH を採用しています.また,モータとの接続には 2×3=6極(2.54mmピッチ;MIL系)のコネクタを採用しています.モータコネクタのピン配列を下図に示します.(逆向きに接続しないよう気をつけてください.エンコーダに逆電圧がかかって故障する恐れがあります.)
モータコネクタのピン配列
(左:基板上面から;右:コネクタ端面から)
Poco-14 には8極のジャンパピン(SW3,4 / SW5,6 / SW9,10 / SW11,12)があり,それぞれモータ0 / 1 / 2 / 3の電流をモニタするためのシャント抵抗の値を設定します.また,Poco-42 には4極のジャンパピン(SW2,3 / SW5,6)があり,それぞれモータ0 / 1の電流をモニタするためのシャント抵抗の値を設定します.モータ電流に比例した 0〜5V の電圧を SEN 端子から出力します.モータの大きさ(予想される最大電流)に合わせて,下表を参考に適切なシャント抵抗値を設定してください.
Poco-14 の場合 | |||
---|---|---|---|
SW 3, 5, 9, 11 |
SW 4, 6, 10, 12 |
最大電流 (A) |
モニタ感度 (V/A) |
開放 | 開放 | 0.3125 | 16.00 |
ショート | 開放 | 0.6250 | 8.000 |
開放 | ショート | 0.9775 | 5.115 |
ショート | ショート | 1.290 | 3.877 |
Poco-42 の場合 | |||
---|---|---|---|
SW2, 5 | SW3, 6 | 最大電流 (A) |
モニタ感度 (V/A) |
開放 | 開放 | 1.364 | 3.666 |
ショート | 開放 | 2.728 | 1.833 |
開放 | ショート | 4.278 | 1.169 |
ショート | ショート | 5.642 | 0.8863 |
Pico-2 と Poco の接続は,12極のコネクタつきケーブル(JST/SH)を使います.1本のケーブルでモータ2台分の信号線(PWM/DIR・A/B・V/G・SEN)を接続できます.Pico-2 には POCOX・POCOY のコネクタがあり,それぞれモータ0・1とモータ2・3に対応しています.Poco-14 には同様のコネクタが2つ(PICOX・PICOY)あり,Poco-42 には1つ(PICO)あります.これらをどのような組み合わせで接続しても構いません.
Pico-2・Poco・モータの接続例(Poco-14 の場合・Poco-42 の場合)
Poco で発熱するのは裏面に取り付けたHブリッジICです.これをロボットなどの構造部材(たとえばアルミの骨格)に熱伝導グリスで熱接地します.Poco-14 の場合は 3mm のスペーサを入れてネジ留めし,Poco-42 の場合は 4mm のスペーサを入れてネジ留めすればよいでしょう.(Poco-14 のHブリッジICは高さ 2.65mm,Poco-42 のHブリッジICは高さ 3.6mm です.)
放熱を考慮したPico-2の取り付け方法
Peco-2 は,ホスト PC の通信ポート(RS-232C)と Pico-2 の通信ポート(RS-485)をつなげるためのコンバータです.独立した2系統の RS-232C / RS-485 相互変換ができます.なお,フロー制御(RTS/CTS など)は一切行なっていません.
Peco-2 の外観(表/裏)と回路構成(ブロック図)
- ダウンロード: Peco-2 回路図
ホスト PC との接続には,D-Sub 9ピンのコネクタつきケーブルを利用します.ストレートケーブルとクロスケーブルで接続のしかたが異なります.下図を参考にしてください.PC 側の通信プログラムによっては,たとえば D-Sub 9ピンコネクタの CTS/RTS(7番と8番)を短絡させる必要があるかもしれません.
ホスト PC からのシリアルケーブルの接続(D-Sub 9ピン)
Pico-2 への接続には,4極のコネクタつきケーブル(JST/SH)を利用します.ポート 485-A1・485-A2 は電気的に全く同じで,232-A と相互変換されます.また,ポート 485-B1・485-B2 も電気的に全く同じで,232-B と相互変換されます.A 系統と B 系統は独立して動作します.たとえば A 系統であれば,Peco-2 を中心として,2方向に(たとえば 485-A1 から左へ,485-A2 から右へ)通信線を延ばすことも可能です.その場合,終端抵抗を無効にしてください.それ以外(通信線の端に Peco-2 が配置される場合)は,終端抵抗を2つとも有効にしてください.