DXHATはRaspberry Pi用のHATで、装備した主な機能は以下の通りです。
※本製品は半田付け作業を要求します。
※Raspberry Pi 3/4/5や電源装置が別途必要です。
※慣性測定ユニット付の場合は12セット単位での見積及び受注とします。
品名 | 数量 | 型番・その他 |
DXHAT | 1個 | E179 |
スペーサ・ネジ類 | 1式 | スペーサー六角両メネジ M2.6 L8 x4 スペーサー 丸型中空 M2.6 L9 x4 スペーサー 丸型中空 M2.6 L8 x4 なべ小ねじ M2.6 L15 x4 低頭小ねじ M2.6 L5 x4 |
ターミナルブロック | 1個 | TB111-2-2-U-1-1 |
電源ボタンモジュール | 1個 | E191 (300mmハーネス付) |
商品番号 | BTE100 | |
PCBリビジョン | E179 | |
動作温度範囲 | 0~70℃ 結露なき事 | |
寸法 | 60x56.5x15mm 取り付け穴:58x49mm 4-φ3.0mm | |
重量 | 25g | |
外部電源 | DC6.5~24V (絶対最大定格 DC-0.3V/+30V) | |
内部電源 | DC5V | 外部電源からDCDCコンバータを介して生成 最大6A供給可 |
DC3.3V | Raspberry Piより供給 | |
RTC | DS3231M 電気二重層コンデンサによる簡易電源バックアップ | |
冷却ファン | 電源電圧 | DC5V |
最大送風量 | 2.2CFM | |
各I/F仕様 | RS-485 | 複信 半二重 最大通信速度 20Mbps 最大端末数 256台 ESD保護 ±15kV 絶対最大定格 -60~60V |
TTL | 複信 半二重 最大通信速度 12Mbps 最大端末数 32台 ESD保護 ±2kV 絶対最大定格 -0.5~6V | |
コネクタ等 | 2x20ピン パススルーソケット x1 2ピン5.08mmピッチランド x1 JST S4B-EH x4 JST S3B-EH x4 JST B3B-ZR x1 JST B2B-ZR-SM4 x1 4ピン2.5mmピッチランド x4 | |
環境配慮 | RoHS準拠, 鉛フリー半田 |
Pats Name | JST Parts Number |
基板用ヘッダー | B3B-ZR |
ハウジング | ZHR-3 |
ターミナル | SZH-002x-P0.5 |
圧接コネクタ | 03ZR-8M-P |
端子番号 | 信号名 |
1 | GND |
2 | PB |
3 | - |
No. | 端子名称 | I/O | No. | 端子名称 | I/O |
1 | 3V3 | I | 2 | 5V | O |
3 | GPIO2(SDA1) | I/O | 4 | 5V | O |
5 | GPIO3(SCL1) | I/O | 6 | GND | O |
7 | GPIO4(KILL) | O | 8 | GPIO14(TXD0/1) | I |
9 | GND | O | 10 | GPIO15(RXD0/1) | O |
11 | GPIO17(INT) | I | 12 | - | |
13 | - | 14 | GND | O | |
15 | - | 16 | - | ||
17 | 3V3 | I | 18 | - | |
19 | - | 20 | GND | O | |
21 | GPIO9(RXD4) | O | 22 | - | |
23 | - | 24 | GPIO8(TXD4) | I | |
25 | GND | O | 26 | - | |
27 | GPIO0(TXD2) | I | 28 | GPIO1(RXD2) | O |
29 | I/O | 30 | GND | O | |
31 | - | 32 | GPIO12 | I/O | |
33 | GPIO13 | I/O | 34 | GND | O |
35 | GPIO19(FAN) | I/O | 36 | GPIO16 | I/O |
37 | GPIO26 | I/O | 38 | GPIO20 | I/O |
39 | GND | O | 40 | - |
Pats Name | JST Parts Number |
基板用ヘッダー | B2B-ZR-SM4 |
ハウジング | ZHR-2 |
ターミナル | SZH-002x-P0.5 |
圧接コネクタ | 02ZR-8M-P |
端子番号 | 信号名 |
1 | 5V |
2 | オープンドレイン出力 |
端子番号 | 信号名 |
1 | GND |
2 | VDD |
3 | TTL Signal |
端子番号 | 信号名 |
1 | GND |
2 | VDD |
3 | RS-485 D+ |
4 | RS-485 D- |
端子番号 | 信号名 |
1 | 5V |
2 | COM |
3 | 3V3 |
4 | GND |
端子番号 | 信号名 |
1 | COM |
2 | GND |
3 | R_SDA |
4 | R_SCL |
端子番号 | 信号名 |
1 | 3V3 |
2 | GND |
3 | GPIO12(PWM0/SD4/DPI_D8/SPI5_CE0_N/TXD5/SDA5) |
4 | GPIO13(PWM1/SD5/DPI_D9/SPI5_MISO/RXD5/SCL5) |
端子番号 | 信号名 |
1 | GPIO19(PCM_FS/SD11/DPI_D15/SPI6_MISO/SPI1_MISO/PWM1) |
2 | GPIO16(FL0/SD8/DPI_D12/CTS0/SPI1_CE2_N/CTS1) |
3 | GPIO26(SD0_DAT2/TE0/DPI_D22/SD1_DAT2/ARM_TDI/SPIO5_CE1_N) |
4 | GPIO20(PCM_DIN/SD12/DPI_D16/SPI6_MOSI/SPI1_MOSI/GPCLK0) |
Raspberry Piに適用するOSや環境の構築状況によって設定方法や挙動が変わります。ここではそれらの詳説を省略しますので、公式サイト等などから情報を補完して下さい。
HATの各機能は主にconfig.txtに必要な情報を追記する事で活性化されます。なおconfig.txtから別のファイルをincludeしている場合もありますので、それらも含めて全ての設定ファイルを精査する必要があります。
CN3と四隅の取り付け穴の位置をRaspberry Piのピンヘッダと取り付け穴に一致させ装着します。
HATとRaspberry Piの電子部品と基板が接触しないよう四隅の取り付け穴に同じ高さのスペーサを設置し、相互の基板を平行に保持します。
なお実測でRapspberry Pi 4の場合は8mm、Raspberry Pi 3の場合は9mm以上のスペーサが必要ですが、10mm以下でないとピンヘッダが嵌合しません。
CN1にコネクタやケーブルを装備し外部電源を供給しますが、CN1から外部電源を供給してもRaspberry Piへの給電は開始されず、CN2に装着するプッシュモーメンタリなスイッチで電源供給の操作を行う必要があります。
Raspberry Pi上でOSが動作している間に電源の供給が突然断たれる事は大抵の場合において想定されておらず、一般的にはpoweroffコマンドを実行し、シャットダウン処理が完全に完了した頃合いを見計らって電源の供給を断つといった操作が強いられます。もしOSが動作している時に突如電源の供給が断たれてしまうと、タイミングによってはファイルシステムが破損し、次回以降OSが正常に起動しなくなります。
HATには電源の操作の煩雑さを簡素化する機能が備わっており、CN2に装備したプッシュスイッチの操作によって、電源ON・OSへのシャットダウン励起/OSの終了と同時に電源OFF・強制電源OFFといった処理が安全に行えます。
config.txtに追記する情報
[all] dtoverlay=gpio-shutdown,gpio_pin=17 dtoverlay=gpio-poweroff,gpiopin=4,active_low=1
なおubuntuをGUIで起動している場合は、プッシュスイッチを押下するとログアウトのプロンプトが表示され、タイムアウトするかダイアログのpower offを選択するまでシャットダウンが行われません。プッシュスイッチ操作によってシンプルにシャットダウン処理を行わせるには、GNOMEの設定を変更する必要があります。なおログインしていない状態ではこの設定は効果がありません。
gsettings set org.gnome.SessionManager logout-prompt false
ちなみに付属の電源ボタンモジュールは3線で構成されていますが、電源のON/OFFだけであればPBとGND信号の2本あれば事足ります。残りの1本は1kΩの抵抗を介してプッシュスイッチに内蔵されているLEDのアノードに接続されていますので、CN2-3に5Vや3.3V程度の電圧やGPIOの信号を接続するとLEDを点灯させる事ができます。
外部電源の逆極性への耐性はないため、絶対に極性を間違えてはならない。 HATを装着した後は、Raspberry Pi本体に備わっているMicro USBないしUSB Type Cコネクタから電源を供給してはならない。 |
HATに装備された冷却ファンはRaspberry Piへ外気を送り込む事で冷却を促し、発熱によってSoCのクロックが下がりパフォーマンスが低下する事を低減させるのが目的です。
合わせてRaspberry Pi上の主要チップにヒートシンクを装着すれば、冷却効果を更に高める事が期待できます。
エアフローはHAT上面からファンで吸気し、HATとRaspberry Piの間隙から排気を想定しています。もしケースなどに封入する際は、吸気口と排気口を適宜設けたり、HAT上の冷却ファンを取り外してケース側でエアフローを設計して下さい。
冷却ファンのON/OFFはRaspberry PiのGPIO19を用いて行われ、内部温度と設定温度に応じてON/OFFを自動的に制御する事ができます。
config.txtに追記する情報
[all] dtoverlay=gpio-fan,gpiopin=19,temp=50000temp=50000は50℃で冷却ファンをONする意味で、摂氏度の1000倍の値を指定
設定温度を10℃下回るとファンはOFFする
なおRaspberry Piの発熱はOSや実行しているアプリケーションの負荷等に依存します。またRaspberry Piの性能限界までオーバークロックすると冷却しきれない場合があります。
冷却ファンへの接触防止措置を行っていないため、巻き込まれ等に注意。 |
Raspberry Piの時刻はNTPサーバなどを利用してOSの起動時に更新するのが一般的なようです。しかし時刻を取得できなければ、OSは不正確な時刻を元に動作する事になります。
HATはI2C接続のRTC(I2Cスレーブアドレス0x68)を装備しており、外部電源が断たれた場合でも1日程度は電気二重層コンデンサがRTCの電源を供給します。電気二重層コンデンサを満充電させるには、少なくとも半日程度は電源ON状態を維持して下さい。
config.txtに追記する情報
[all] dtparam=i2c_arm=on dtoverlay=i2c-rtc,ds3231
hwclockコマンドを使う事でRTCが機能しているかの確認ができます。
#print hardware clock hwclock -r #set the hardware clock from the current system time hwclock -w #set the system time from the hardware clock hwclock -s
なおubuntuであればNTCとRTCそしてシステムクロックがうまく連動しますが、他のOSの場合は初期状態においてRTCの扱いが異なる場合があります。思ったような挙動をしない場合は、こちらの情報を参考にして下さい。
更にRaspberry Pi 5の場合ですが、Raspberry Piに搭載されたRTCが優先するようです。DXHATのRTCを使用する場合は以下を追記して下さい。
RasPi5のconfig.txtに追記する情報
[cm5] dtparam=rtc=off
Raspberry PiのUSBポートにDXHUB等を接続してDynamixel用のI/Fを増設する事も可能ですが、HATにはDynamixelと通信するためのRS-485とTTLの2種類のI/F(CN5~8/CN9~12)が装備されており、CN1に供給される電源はDynamiel用の電源として供給されます。
Raspberry Piが持っているUARTを使用する事で、USB接続したシリアルI/Fの一般的な1msのレイテンシを超越した運用ができます。基本的にはTTL2DXIFと同等の回路が装備されていますので、注意事項はそれと同様となります。
使用するUARTはJP1, JP2を半田ジャンパする事で選択しますが、Raspberry PiのGPIOは複数の機能を兼用しているため、使用環境に応じて適宜設定します。またUARTのベースクロックを64MHzに設定する事で、最大4Mbpsの通信速度に対応できます。
config.txtに追記する情報
[pi3] init_uart_clock=64000000 dtoverlay=uart0=on dtoverlay=pi3-miniuart-bt [pi4] init_uart_clock=64000000 #UART1を活性化 dtoverlay=uart1,txd1_pin=14,rxd1_pin=15 #UART2を活性化 dtoverlay=uart2,txd2_pin=0,rxd2_pin=1 #UART4を活性化 dtoverlay=uart4,txd4_pin=8,rxd4_pin=9使用するポートのみを活性化する事を推奨。Linux上でのデバイス名は概ねttyAMAのプレフィクスで始まる。
またRaspberry Pi 3/Zeroの場合はcmdline.txtに記述されている「console=serial0,115200」を削除する事。
対応するデバイスは以下の通りです。
Device Name |
RS-485ないしTTL I/Fを装備したDynamixel DX・AX・RX・EX・MX・X・PRO・P・USS3・DXMIO |
なおMolex社のコネクタが装備されたデバイスを接続する場合は、Robot Cable-X3P 180mm (Convertible)ないしRobot Cable-X4P 180mm (Convertible)を使用して下さい。
外部電源の電流容量が小さいとDynamixelに過度な負荷が生じた際にRaspberry Piに供給される電源に影響が及ぶ。 Dynamixelから発生した逆起電力によって電源電圧が上昇た場合、HAT上の電子部品の絶対最大定格電圧を超えて破損する可能性がある。 接続するDynamixelの総容量は、外部電源のラインに挿入されたFETとFR-4のガラスエポキシ基板の許容電流容量を超えない事。 様々な事象の想定範囲を広げ、不慮の故障に至らないようシステムを設計する事。 |
Linux上で動作するDynamixelを制御するプログラムを作る際は、別途用意したライブラリを用いる事でシリアル通信やプロトコルを意識せずにコーディングができます。
APIに対して対象デバイスのID・番地・値といった引数を与えるだけでコントロールテーブルの読み書きが実現でき、マルチスレッド等で複数のデバイスに対して個別にアクセスする様なアプリケーションも容易に構成できます。
Dynaimxelには2種類のプロトコルが存在しますが相互非互換であるため、プロトコルに応じて2種類のライブラリを用意しています。
Dynamixel Protocol V2用ライブラリを使用する際の手順を少しだけ紹介しておきます。全てターミナル上での操作となります。
sudo apt install build-essential unzip
cd ~ wget https://www.besttechnology.co.jp/download/DX2LIB_V2.9.zip unzip DX2LIB_V2.9.zip
cd ~/DX2LIB_v2.9/DX2LIB/ bash ./build_dx2lib.sh
以上でライブラリファイルが自身の環境用に再構築され、同時に各サンプルソースディレクトに実行に必要なファイルがコピーされます。
Pythonで記述されたサンプルソースであれば多少の改変で動かせますので試してみます。
cd ~/DX2LIB_v2.9/SampleCode/Python/ nano smpl1.py
通信ポートとボーレートは自身の環境に依存するため、適宜修正して保存します。例としてuartが「/dev/ttyAMA1」、ボーレートが「2Mbps」、IDが「1」とした場合は、ソースコード中の以下の変数に代入している部分を修正して保存します。
COMPort = b'/dev/ttyAMA1' Baudrate = 2000000 TargetID = 1
最後にsmpl1.pyをPythonで読み込ませて実行させます。
python3 smpl1.py
もしpermission deniedと言われた場合は、adduserを使ってdialoutグループに自身のユーザーを登録してから実行し直しましょう。
sudo adduser $USER dialout
Dynamixelとの通信に成功すると、DynamixelのLEDが1秒間点灯します。他のサンプルソースもほぼ同様の変更を加えることで利用できます。
なお「~/DX2LIB_v?.?/SampleCode/C/config.c」はID・ボーレート・動作モードの変更、テスト運転用のサンプルソースになりますので、Dynamixelの諸設定変更の際は利用してみてはいかがでしょうか。
またRaspberry Piの動作条件によってはAPIがタイムアウトエラーを返す場合があります。その際はDX2_SetTimeOutOffset APIを使ってタイムアウトエラーが発生しない程度の時間を設定すると良いでしょう。
I2CバスにはRTCが既に接続されていますが、I2C接続のデバイスをさらに追加できるようにバスリピータを介してJ2にI2Cバスが接続されています。
I2Cバスに接続する外部機器の電圧に応じて、J1のCOMに供給する電源を5Vか3.3Vから選択します。同時にI2Cバスの信号ラインは4.7kΩの抵抗を介して選択したCOMの電圧にプルアップされます。
なおJ2を使用しない場合は、COMを3V3に接続しておく事を推奨します。
J3/J4に接続された一部のGPIO端子だけがHATに配線されています。スペーサの長さ調整が必要ですが、エレベーテッド ソケットストリップ等を挿入する事でHATの表面からRaspberry PiのGPIOを全て引き出す事が可能です。
記載された事項以外にも、経験を踏まえた危険回避方策を講じる事。 安全に配慮しない場合は人命や財産を失う恐れがある。 また従わない場合は保証対象外となる。 |