KCB-1
ハードウエア
ソフトウエア
- アップデート
シリアル通信
- シリアルサーボ
- RCB-3
- RCB-1
自律ロボット
センサー
イベント
- KHR 4th アニバーサリー
未分類
サイトマップ
HEWのツールメニューにFlashStarterを追加する
作成したプログラムを書き込むときに使用するFlashStarterを、統合開発環境HEWのツールメニューに追加する機能を紹介します。
①HEWのメニューから「基本設定」の「カスタマイズ」を選択します。
②「カスタマイズ」画面にある「メニュー」タブを選択し「アプリケーション内有効」の追加をクリックします。

③「ツールの追加」画面の「コマンド」の参照ボタンをクリックし、CDROMからコピーした「FlashSta.exe」を選択してください。
④同じ「ツールの追加」画面の「名前」に『FlashStarter』などお好みの名前を書き込みます。

⑤OKボタンで「ツールの追加」と「カスタマイズ」画面を閉じてください。作業は終了です。
ツールメニューの一番下を見ると、FlashStarterが追加されているはずです。この設定でFlashStarterのショートカットを探さなくても、HEWの画面から直接起動できるようになりました。

便利な機能なので、是非お試しください!
KCB-1用PIO接続ケーブルセットを使った制作例
端子が立っていなかったPIOポートを有効に活用するための「KCB-1用PIO接続ケーブルセット」が発売されました。このケーブルセットは、2mmピッチのオスコネクターをPIOポートの空いているパターンにハンダ付けするだけで、すぐに使用することができます。
今回はこのケーブルセットの簡単な使用例をご紹介します。
(写真 クリックで拡大)
左の写真は、8個のLEDのアノードを、470Ωの抵抗を通してPIOポートのそれぞれの端子に接続しました。PIOポートからHを出力するとLEDが点灯し、LにするとLEDが消灯します。ケーブルの先には市販の圧着式10ピンコネクタを使用しました。
このLEDボードを使用して、アナログ値を表示するプログラムを組みました。
右の写真はPSDセンサーに白い板を近づけてLEDを点灯させているところです。AD1に接続したPSDセンサーのアナログ値が大きくなる(物体に近づく)ことに比例してLEDの点灯する個数が増えます。
以下はサンプルプログラムのダウンロードと解説です。
<プログラム ダウンロード 2KB>
プログラム解説:
メイン関数ではLEDの点灯パターンのみを処理し、アナログ値は10ms間隔のタイマー割り込みで読みました。
メイン関数ループ内の数式( y = 7.0 / 500.0 * (adv - 100.0) + 1; )は、PIOポートの点灯パターンを求める式です。AD1から読み取ったPSDセンサーの値advが、600以上ではLEDが全点灯、100以下のときはLEDは全消灯となるように式を作りました。100~600間は約70の間隔で点灯するLEDの数が増減します。
式の中で7.0としているのは、値を整数型として扱わないようにするためです。もし7のままで計算した場合、Cコンパイラは整数型として計算を行うため、小数点以下を切り捨てるので、答えは全て1になります。これは#define関数でもよく間違うので注意しましょう。
※ LEDは品種によって接続する抵抗値が変化します。また、LEDには極性がありますので使用時には必ずデータシートでご確認ください。
HEWをWindows Vistaにインストールするときの注意事項
KCB-1は買ってすぐにマイコンプログラムを楽しむことができるように、ルネサスの統合開発環境HEW(High-performance Embedded Workshop)が付属しています。
ただしWindows VistaにHEWをインストールするには、いくつか手順を踏まなければなりません。
- インストーラー(CD-ROMの「開発環境」フォルダにある「nc30wav543r00_ev.exe」)をCD-ROMからいったん「ドキュメント」フォルダなどのローカルディスクへコピーします。
- nc30wav543r00_ev.exeを右クリックして、プロパティを選択します。
- 互換性タブを開き、「互換モード」欄で「互換モードでこのプログラムを起動する」にチェックを入れ、プルダウンメニューから「Windows XP (Service Pack2)」を選びます。
- 「特権レベル」欄の「管理者としてこのプログラムを実行する」にチェックを入れます。
- nc30wav543r00_ev.exeをダブルクリックして、通常のインストールを開始します。

インストール終了後にHEWをインストールしたフォルダ(通常は「C:\Program Files\Renesas\Hew」)を開き、「HEW2.exe」について、インストーラーファイルと同様に互換性モードと管理者権限を設定します。
- インストールしたフォルダにある「HEW2.exe」)を右クリックして、プロパティを選択します。
- 互換性タブを開き、「互換モード」欄で「互換モードでこのプログラムを起動する」にチェックを入れ、プルダウンメニューから「Windows XP (Service Pack2)」を選びます。
- 「特権レベル」欄の「管理者としてこのプログラムを実行する」にチェックを入れます。
- HEW2.exeをダブルクリックして、通常のインストールを開始します。

以上でHEWは画面にちょっと不具合があるものの、普通に使用できます。ただし、AutoUpdate.exe(標準では「Renesas\Hew\AutoUpdate\AutoUpdate.exe」)などはそのままでは使用できませんので、もしアップデートしたい場合はこちらにも「互換レベル」と「管理者権限」の設定を行います。
HEWをアップデートした場合は、「Hew2.exe」の「互換レベル」と「管理者権限」の設定を再確認して下さい。
Windows Vistaでは「C:\Program Files」フォルダにインストールしたつもりでも、実際は別の場所に保存されてしまうことと、管理者権限を持っていてもシステム関連のフォルダにあるファイルは自由に読み書きできないという仕様となりましたので、HEWが設定ファイルなどの保存が今まで通りできなくなってしまいました。ご面倒ですがVistaをご使用の方は、上記内容をよくお読みいただき、ご利用なさいますようお願いします。
さらに詳しい内容はルネサスサポートページ「ルネサステクノロジ, Windows Vista(TM)対応, ツールニュース, 20070516」をご覧になって下さい。
裏技として、「C:\Program Files」ではなくて、全くちがうフォルダへインストールするという方法もあります。この方法ではHEWの設定は不必要になりますが、AutoUpdateやDocumentUpdaterなどは設定が必要です。
アップデートに関しては、Renesasの対応をもう少し待った方がよいかもしれません。
インサイド・KRS40XX
KCB-1でシリアルサーボモーターの制御をしているときに、時々動かなくなってしまうことがありませんか?これはサーボモーターに命令を立て続けに送ったときなどに起きる現象です。
KRS-40XXシリーズなどの弊社製サーボモーターは、単に位置制御を行っているだけではなく、デイジーチェーンで接続する場合は信号線を全てのモーターと共有しますので、自分への信号なのかどうかを調べたりしています。もちろんKCB-1からだけではなく、他のサーボモーターが出した返事についても調べなくてはなりません。
このような内部処理を正しく行うために、KRS-40XXシリーズではデータの受け渡しを行った後に若干の時間を必要としています。その時間は約300~400[us]。KRS-40XXは115kbpsでデータの送受信を行いますので、位置制御(set_pos)に必要な6バイトの送受信時間を合わせると、一台のモーターあたり1[ms]程度の余裕が必要です。
--- 例 ---
while (1) {
...
sio1_set_pos (1, 目標位置); // 送受信に約600[us]を使用している
wait (200); // 若干の待ち時間(300~400[us])待つ
sio1_set_pos (1, 目標位置); // 再度目標位置を送信
wait (200);
sio1_set_pos (2, 目標位置); // IDが変わっても、同じSIO端子を使う場合はちょっと待つ
…
}
KCB-1では、このデータ送受信時間以外に必要な300~400[us]をさらに詰めるために、SIO端子を2つもうけています。SIO1,2に交互にデータを送信することで、たくさんのサーボモーターを短い(約半分の)時間で動かすことができるようになります。または処理が完全に終わるだけの間隔を持ったタイマーを使う方法もありますよ。
KCB-1サポートページ サイトマップ
▼KCB-1

▼サンプル / SDK更新情報
□KCB-1 SDK Ver.1.0a Rev.20080510
▼開発環境
□HEWをWindows Vistaにインストールするときの注意事項
□HEWのツールメニューにFlashStarterを追加する
▼ハードウエア
▼シリアル通信 / サーボ

▼自律ロボット
【KHR本体】
【RCB-3】
【モーション再生】
【目標を探す】
【RCB-1】
▼センサー

▼イベント
【KHR 4th アニバーサリー】
▼雑誌掲載情報
KHR-1自律ロボット作例
今回はKHR-1での自律ロボットを紹介します。
画像のKHR-1には前後左右に計4つのPSDセンサーを実装しています。これらのセンサーの値を読み取り、最も近い物体へKHR-1が向かうようにプログラムを組みました。
<画像 クリックして拡大>
写真は「KCB-1でKHR-1を動かす①、②」でKCB-1を実装したKHR-1にPSDを取り付けた画像です。頭部のフレームの前後と、両肩にPSDセンサーをひとつずつ取り付けました。
画像のKHR-1を実際に動かした動画です。それぞれのPSDセンサーに手をかざすと、KHR-1が近づいてきます。
サンプルプログラムは動画のKCB-1に書き込まれているものと同じです。以下はこのプログラムを説明します。
・サンプルプログラムの流れ:
①. ボードの初期化、RCB-1と通信開始。通信の準備ができたら赤LEDが点灯する
②. スイッチが押されるまで(AD2がHになるまで)待機している間、ニュートラル信号を流し続ける
③.スイッチが押されると、お辞儀モーションを一回再生
④ 無限ループ開始。ループ内では1回ループする度に必ずニュートラル信号を送信すること
⑤. 前後左右に取り付けたセンサーの値を読み取り、グローバルで宣言した配列に代入
⑥. センサーの値をバブルソートして、最も高い値を求める
⑦. バブルソートで求められた値を元に、モーション再生分岐
⑧. ④~⑦の処理を繰り返す
・解説:
②、④のように、モーションを再生していないときはなるべくニュートラル信号を送信するようにしてください。ニュートラル信号なしにモーションを再生すると、うまく動作しません。
⑥のバブルソートは複数の値の中で最も大きい値、または小さい値を求める処理です。詳しくは「センサーで目標を探す(KRS788使用)③」の解説をご覧ください。
シリアルサーボの簡易位置制御
シリアルサーボモーターを回す場合は、sio_set_pos関数などで指定した目標角度に到達するまでには時間がかかります。かといって次のようなプログラムでは、むだ時間が発生します。
while (1) {
pos == sio1_set_pos(id, 目標)
if ((pos <= 目標 + 5) && (pos >= 目標 - 5) {
//目標位置に到達した(誤差付き)と見なして、何か処理をする
}
else {
wait (100000); // モーターが目標に到達するまでちょっと待つ
}
}
シリアルサーボモーターは目標位置へ到達すると停止しますので、現在位置を数回調べても移動していない場合は、目標へきちんと到達したと判断します。
while (1){
wait (300); // タイミング調整
現在位置 = sio1_set_pos(ID, 目標); //シリアルサーボに目標位置を送って現在位置を取得
if (前回位置 == 現在位置) { // もし、現在位置が前回位置と同じだったら
cnt = cnt + 1; // cntが一つ増える
}
if (cnt == 適当な数){ // cntが適当な数になったら、目標位置で停止したと判断して
break; // ループを抜ける
}
前回位置 = 現在位置; //現在の値を保持
}
sio_set_posは、処理の後に現在の位置を返します。その現在の位置と前回の位置を比べて変化が無かった場合は、サーボが目標の位置に到着していると判断してcntを増やします。数回命令を送って同じ位置にいた場合は、サーボが完全に目標の位置にいると判断し、ループを抜けて次の処理に移ることができます。
同一サーボに連続して命令を送るときには、ある程度間隔をあける必要があるので、ここでは約500us(wait(300))待ちます。
ビーチフラッグロボットでは8回一致したら目標に到達したと判断しています。
KCB-1でKHR-1を動かす方法②
前回の続きです。
このプログラムでは2バイトコントロールコード再生のプログラムを、RCB-1対応に変更をしています。2バイトコントロールコード再生は、KCB-1からKRCと同じ再生コマンドをRCB-1へ送信し、モーションを再生する方法です。モーションを再生するには、モーションを各ボタンに割り付ける必要があります。
なお、コントロールコード再生を行う際は、更新プログラム「KCB1Update20080510.exe」をダウンロードする必要があります。詳しくは「KCB-1 SDK更新(Rev.20080510)」をご覧ください。
・ プログラム
#include <rcb3.h>
#include <led.h>
// プログラム中で実行するモーションをHTHで割付してください
#define FORWARD BTN2B_LU // 前進
#define LEFTSTEP BTN2B_LL // 左サイドステップ
#define RIGHTSTEP BTN2B_LR // 右サイドステップ
#define LEFTTURN BTN2B_LL | BTN2B_LD // 左ターン
#define RIGHTTURN BTN2B_LR | BTN2B_LD // 右ターン
#define BOW BTN2B_RU // あいさつ
#define NP_WA 1200000 //停止後の待機時間(前に再生したモーションとかぶらないために余裕を持って設定する)
void khr_2Bmotion(int cc) //2BYTEcodeモーション再生関数
{
rcb3_put_2Bcode (cc); //2BYTEcodeでモーション再生
while (ad_read(1) > 500) {} //モーションが終了するまで待つ
rcb3_put_2Bcode (BTN2B_NP); //モーション終了後ニュートラルを送信
}
void main(void)
{
}
・解説
▼変更点①
通常の2バイトコントロールコード再生のプログラムと違うところは、モーションを再生していないときに、常にニュートラル信号を送信していることです。これは、通常、KRCの電源を入れて何も操作していない場合に、KRCからはニュートラル信号が送信されているためです。
▼変更点②
1)コントロールコード再生
2)再生終了待ち
3)ニュートラル送信
4)ニュートラル状態に戻るまで待つ
以上の④項目を今回はkhr_2Bmotionという関数にまとめました。
KCB-1でKHR-1を動かす方法①
今回は、KCB-1のコントロールコード再生でKHR-1(RCB-1)を動かす方法を紹介します。
(※RCB-1とKCB-1では、コマンド再生、7バイトコントロールコード再生はできません。また、RCB-1に接続された6VバッテリーでKCB-1を動かすため、シリアルサーボはお使いになれません)
①ではKCB-1の実装やケーブルの配線などの準備、②ではプログラムの紹介をします。
・ 通信の準備
RCB-1をKRCで操作できるように設定し、再生するモーションをKRCの各ボタンに割り付けてください。RCB-1のKRRに接続するポートとKCB-1のCOMポートを接続ケーブルでつなぎます。
電源は空いているRCB-1のサーボ接続端子とKCB-1の空いているシリアルポートを接続します。その際、白線は外してください。
・ モーション終了を知るための準備
モーション終了後、RCB-1を1度ニュートラルに戻す必要があります。モーション終了をwaitでタイミングを取ることもできますが、モーションごとに調整が必要になり、不便です。そこで、RCB-1の空いているサーボ端子をモーション中は「H」、モーション終了後は「L」に設定し、その信号をKCB-1のADポートで受け取ります。②で紹介するプログラムでは、RCB-1のCH4とKCB-1のAD1を接続し、モーションの終了を受け取っています。これは以前紹介した「コントロールコード再生 モーション終了を知る方法」と同じ方法です。
なお、モーション再生を手動でスタートさせるため、AD2の信号ラインと電源ラインにスイッチを接続してください。
KCB-1との接続は、全てRCB-1のID0に行います。
(画像 クリックで拡大)
・ KHR-1へのKCB-1実装
KHR-1では腹部にネジ止めをします。このとき、ボード裏とボディーが接触するとショートする恐れがあるので、6mm程度のスペーサーをはさみます。また、ボードがむき出しのままだと転倒したときに破損する可能性があるため、KHR-HVシリーズのフロントカウルをかぶせることをお勧めします。例はテープで固定しました。
(画像 クリックで拡大)









