PICおよびdsPICを用いた軽量版RTコンポーネント(RTC-Lite)

はじめに

このページでは,PICやdsPICで開発されたロボット要素部品をRTミドルウェアのネットワークに参加し, 他のRTコンポーネントと協調することを目的に,低機能なMPU向けのRTコンポーネントフレームワークについて 紹介します.

現在は,OpenRTM-aist-1.0に対応しておりますので,多くの方に利用していただけるかと思います. 電子工作に興味があり,なおかつPICやdsPICを使った開発を得意としていて, なおかつRTミドルウェアに興味がある方,ぜひご利用ください.

ダウンロードファイル

RTC-Liteの特徴

RTC-Liteは,通常のRTコンポーネントを作成するのと同じ感覚で,組み込みMPU向けのRTコンポーネントを作成,動作させる環境を提供する.

作成するハードウェアにより,通信網,コンパイラが異なってくるが,実装形態を工夫することで,コンパイラ依存部と,非依存の共通要素を可能な限り分離し,

さらには,通信網に依存する部分も可能な限り分離を行っているため,ユーザサイドで新規デバイスにRTC-Liteを拡張していく場合のことも考慮されている.

RTC-Liteは,通常のRTコンポーネントと同じように利用できるようにするために,以下のような2つの要素から構成される.

  • Proxyコンポーネント
  • RTC-Liteコンポーネント

Proxyコンポーネントは通常のPC上で利用することを想定しており,

RTC-Liteコンポーネントは,組み込みMPU(ここではPIC, dsPIC上)で動作する.

このように,他のコンポーネントとの橋渡しとして,Proxyコンポーネントが機能し,コンポーネントの実体はMPU上に存在するという構造をRTC-Liteでは採用している.

rtc-lite.jpg

制限事項

本バージョンのRTC-Liteでは,PICの入出力,AD変換に関わるポートは事前に取り決めており,

そのポート以外の利用はできないので注意していただきたい.

(ユーザは,ソース中で,機能を利用するかしないかを選択するのみ.)

  • RTC-Lite使用説明書(RTC.pdf)
  • Proxyコンポーネントソースファイル(Proxy.zip)
  • dsPIC版RTC-Liteソースファイル(dsPIC.zip)
  • PIC版RTC-Liteソースファイル(PIC.zip)

動作環境

RTC-Liteを使用するためには,以下のものが必要となる.

  • PC                  
  • PIC, dsPICとXportを搭載した回路基板   なお,PCには,OpenRTM-aist-0.4.2の動作環境が整っていることを前提としており, 本マニュアル作成に当たる検証は以下の環境で行われている.
OS Windows XP
Python Version 2.4.2
OpenRTM Version 0.4.2
Language Python

RT-Unitの製作

RTC-Liteが動作するRTデバイス制御ボードとして,PIC16F877A,dsPIC30F3014を制御MPUに採用したRT-Unitを利用する. 以降,このRT-Unitについて説明を行う.

PICを用いたRT-Unit

外観

rt-unit.jpg

回路図

rt-unit-circuit.jpg

部品表

部品名 デバイス 型番、値 個数
C1,C3,C4 積層セラミックコンデンサ 0.1uF 3
C2 電解コンデンサ(φ5) 1uF 1
R1 抵抗 1KΩ 1
Q1 セラロック 20MHz 1
SW1 スイッチ 1
IC1 PIC 16F877A 1
IC2 3端子レギュレータ TA4805 1
IC3 3端子レギュレータ nju722333 1
PA,PB,PD ピンヘッダ 2 x 5 3
LED1 LED 1
XP Xport Xport 1

dsPICを用いたRT-Unit

外観

rt-unit-dspic.jpg

回路図

rt-unit-dspic-circuit.jpg

部品表

部品名 デバイス 型番,値 個数
C1,C2,C3 電界コンデンサ(φ5) 33uF 3
C4,C5,C6 積層セラミックコンデンサ 0.1uF 3
R1 抵抗 330Ω 1
R2,R3 抵抗 10kΩ 2
D1 ダイオード 1N400 1
JP1 ピンヘッダ 1 x 6 1
CH1,CH2 ピンヘッダ 2 x 10 2
CLOCK セラロック 10MHz 1
IC1 dsPIC dsPIC30F3014 1
DC-Jack DCジャック MJ-179P 1
SW1 スイッチ AK-P300 1
LED LED 1
REG5 3端子レギュレータ LM2940CT5 1
REG3 3端子レギュレータ TA48033S 1
XPort XPort XPort 1

RT-Unitのプログラム開発

使用するPICにかかわらず,本開発では統合開発環境として,Microchip社から提供されているMPLABを利用することとする.

MPLAB Download Cite

16F877Aの場合

 PICをC言語で開発するためには,Cコンパイラが不可欠である.RTC-Liteでは,16系のPICの開発環境として,CCS社によって販売されているCCS Cコンパイラを利用している.そのため,16系のデバイスを利用するためには,CCS Cコンパイラを購入する必要がある.

CCS-C Compiler

手順

  • 前準備として,添付されているPICフォルダにあるすべてのファイルを任意のフォルダ(例:C\RTC-Lite_PIC)にコピーする.
  • MPLABを立ち上げる.
    1st.jpg
  • [Project] → [Project Wizard]をクリックする.
    2nd.jpg
  • [次へ]をクリック
    3rd.jpg
  • 16F877Aを選択し,次へ
    4th.jpg
  • CCS C Compilerを選択し,次へ
    5th.jpg
  • 作成したフォルダを指定しプロジェクト名を代入後,次へ.
    6th.jpg
  • 作成したフォルダの下記のファイルを選択して,Addを押し,次へ.
    • Sample.c ・・・(メインファイル)
    • Sample.h ・・・(メインファイルのヘッダ)
    • rtc_base.h ・・・(rtcliteの各要素を管理するファイルのヘッダ)
    • rtc_msg.h ・・・(rtcliteの通信関係のヘッダ)
(注意) 同フォルダに入っているrtc_base.c,rtc_inport.c,rtc_outport.cはMPLABのプロジェクト内に入れるとコンパイルエラーを起こします. しかし,各ファイルで書き込んだ内容はコンパイル時に反映されます.
7th.jpg
  • [完了]を押すとプロジェクト作成終了

ファイル説明

  • sample.c
  • sample.h
  • rtc_base.c
  • rtc_base.h
  • rtc_msg.h
  • inport.c
  • outport.c

sample.cはコンポーネントのメインの部分であり,ユーザが書き換える必要のあるファイルの一つである.

RTコンポーネントのアクティビティはここに書かれている. sample.hはコンポーネントのプロファイルとCCSヘッダを読む部分であり,ユーザが書き換える必要のあるファイルである.

書き換える必要がある部分として,プロファイルとプロファイルの文字数の変更とシリアルの設定はここで変更する.

  • rtc_base.cはRTコンポーネントのアクティビティの管理など,RTコンポーネント共通となる要素の記述が行われている.ユーザはこのファイルを書き換える必要はない.
  • rtc_base.hはrtc_base.cのヘッダファイルである.ユーザはこのファイルを書き換える必要はない.
  • rtc_msg.hはProxyコンポーネントとの間のメッセージのやり取りを管理する機能を提供する.ユーザはこのファイルを書き換える必要はない.
  • inport.cはinport関連の動作について記述が行われている.現状では,利用するinportに応じて,適宜修正する必要あり.
  • Outport.cはoutport関連の動作について記述が行われている.現状では,利用するoutportに応じて,適宜修正する必要がある.

dsPIC30F3014の場合

開発環境のインストール

dsPICのC言語開発環境として,Microchip社からC-30コンパイラが販売されており,こちらを利用している.

C-30コンパイラはStudent Editionとして,期間限定版が公開されており,本開発においてもこちらを利用している.

Student Editionの特徴として,60日間の使用期限があるものの,60日以後もコンパイラの最適化が上がった状態で使用を続けることができる.

C-30 Compiler

MPLABがインストールされた状態であれば,C-30コンパイラインストール後,すぐに利用できる状態となっている.

PICへの書き込みを行うためのライタとして,Microchip社から販売されている,PicKit2を利用する.

ただし,MPLABでは,PicKit2を利用しての書き込みが正常に行えないことから,PicKit2用の書き込みソフトウェアであるPicKit2 Programmerを利用する.

Pic Kit2 Programmer

各ソフトウェアの使用方法については本マニュアルでは割愛する.

開発用プロジェクトの作成

RTC-Liteのプログラム開発を行うために,はじめに開発用のプロジェクトを作成する. 以下に手順を示す.
dspic_1.jpg
  • [Project] → [Project Wizard]
    dspic_2.jpg
  • [次へ]をクリック
    dspic_3.jpg
  • dsPIC30F3014を指定して次へ
    dspic_4.jpg
  • Active Toolsuiteを[Microchip C30 Toolsuite]にする
    dspic_5.jpg
  • 任意の場所にプロジェクトを作る.(日本語をパスに含まないところにする.)
    dspic_6.jpg
  • [次へ]をクリック
    dspic_7.jpg
  • [完了]を押すとプロジェクト作成終了

必要なファイルのプロジェクトへの追加

C-30では,開発の手間を削減するために,様々なライブラリが組み込まれている.

RTC-Liteを利用する上でもこれらのファイルは必要であるため,以下のファイルを読み込んでおく必要がある.

  • Header Files
uart.h <C-30ディレクトリ>\support\peripheral_30F_24H_33F
adc12.h <C-30ディレクトリ>\support\peripheral_30F_24H_33F
  • Library Files
Libp30F3014-coff.a <C-30ディレクトリ>\lib\dsPIC30F
  • Linker Script
P30f3014.gld <C-30ディレクトリ>\support\dsPIC30F\gld

RTC-Liteのソースの追加

RTC-Lite用のソースをプロジェクトに読み込む.

現在はコンポーネント作成用のスクリプトが存在しないため,既存のソースの中身を書き換えることで,実装を行う.

なお,現在のバージョンでは,入出力用のポート,A/D変換用のポートなどは固定であり,ユーザは利用したいポートにRTデバイスの信号線を接続する必要がある.

プロジェクトに追加するソースファイルは,以下のとおりである.

  • sample.c
  • rtc_base.h
  • rtc_message.h
  • rtc_inport.h
  • rtc_outport.h
  • rtc_global.h
  • C30_dsPIC30F3014Def.h

  sample.cはコンポーネントのメインの部分であり,ユーザが書き換える必要のあるファイルの一つである.
  RTコンポーネントのアクティビティはここに書かれている.
  rtc_base.hはRTコンポーネントのアクティビティの管理など,RTコンポーネント共通となる要素の記述が行われている.ユーザはこのファイルを書き換える必要はない. 
  rtc_message.hはProxyコンポーネントとの間のメッセージのやり取りを管理する機能を提供する.ユーザはこのファイルを書き換える必要はない. 
  rtc_inport.hはinport関連の動作について記述が行われている.現状では,利用するinportに応じて,適宜修正する必要あり.
  rtc_outport.hはoutport関連の動作について記述が行われている.現状では,利用するoutportに応じて,適宜修正する必要がある.
  rtc_global.hはRTC-Lite全般で利用するグローバル変数等の定義が書かれている.ユーザはこのファイルを書き換える必要はない.
  C30_dsPIC30F3014Def.hは使用するMPU,コンパイラに依存する宣言をまとめて記述するファイルである.
  RT-Unitに従って作成した回路の場合は修正の必要がないが,それ以外の場合は,使用クロックの設定など,適宜修正する必要がある.
  なお,初期状態では,AD0(RB0)からのA/Dデータの取得と,RD0-3の出力を制御することができるようになっている.

以上のソースファイルをプロジェクトに組み込み,コンパイルすることで,dsPIC側の動作準備が整う.

XPortの設定

RT-Unitで利用しているXPortの設定を行う必要がある.

後述するProxyコンポーネントは,サーバとして動作することからXPortをクライアントとして設定する必要がある.

設定方法の詳細は,XPortの資料を参照していただきたい.

ここでの設定では,PCのIPアドレスを接続先アドレスとして設定し,ポートを10001に設定する.

dsPIC版では,シリアル通信の速度が115200になっているので,Xportのシリアル通信の速度を変更するようにする.

Proxyコンポーネントの設定

Proxyコンポーネントのポート設定はProxy.pyである.

このファイルの先頭にサーバとして待ち受けるポートの番号が書かれているので,ポート番号が10001となっているか確認する.

PC側での準備

  • ネーミングサービスとRTC-Linkなどを起動する.起動方法などは,OpenRTM-aistのサイトを参照. OpenRTM-official Web Page
  • Proxy側のプログラムを立ち上げる
  • メインファイル(サンプルはProxy.py)をダブルクリック.
  • RT-Unitの電源を入れる.
  • RT-UnitがProxyコンポーネントに接続できると,コンポーネントが起動する.

コンポーネントの動作確認

動作の一例として,ポートから出力し,ライトを点灯させるRTC-Liteコンポーネント(Output0)を載せる.

ライトを点灯させるハード要素の概要図は下記になる.

Output0コンポーネントは,onExecute時に他のコンポーネント(この場合,Input0)からの入力データが敷居値を超えると,PICのピンがhighになり,ライトが点灯する.

example.jpg

今後の課題

  • コンポーネント作成スクリプトのリリース
  • 16F877A版のソース構造変更(dsPIC版に合わせる)
  • 新規MPU追加のための方法についての説明書作成
  • 対応MPUを増やす

更新履歴

Ver. 1.1 記載漏れを追記 2009/01/05
Ver. 1.0 全体的な内容について記述 2008/11/30
AttachmentSize
Image icon rtc-lite.jpg8.86 KB
Image icon rt-unit-circuit.jpg25.86 KB
Image icon rt-unit.jpg24.1 KB
Image icon Example.jpg20.42 KB

Download

latest Releases : 2.0.0-RELESE

2.1.0-RELESE Download page
2.0.1-RELESE Download page

Number of Projects

Choreonoid

Motion editor/Dynamics simulator

OpenHRP3

Dynamics simulator

OpenRTP

Integrated Development Platform

AIST RTC collection

RT-Components collection by AIST

TORK

Tokyo Opensource Robotics Association

DAQ-Middleware

Middleware for DAQ (Data Aquisition) by KEK