4: 2010-11-24 (水) 22:27:05 takaboo ソース 現: 2013-07-14 (日) 12:09:52 takaboo ソース
Line 2: Line 2:
#norelated #norelated
#contents #contents
-[[ショップページへ>http://www.besttechnology.co.jp/modules​/onlineshop/index.php?fct=photo&p=110]]+[[ショップページ(BTA022)へ>http://www.besttechnology.co.jp/modules​/onlineshop/index.php?fct=photo&p=110]]~ 
 +[[ショップページ(BTA023)へ>http://www.besttechnology.co.jp/modules​/onlineshop/index.php?fct=photo&p=111]]
**概要 [#x0a22961] **概要 [#x0a22961]
Line 13: Line 14:
**仕様 [#r881cac5] **仕様 [#r881cac5]
***同梱内容 [#m79dd66b] ***同梱内容 [#m79dd66b]
-|型式 |数量 |備考 | +| 型式 | 数量 | 備考 | 
-|ユニバーサルドライバ3本体 |1 |E093B +|ユニバーサルドライバ3本体 | 1|E093C
-|USBケーブル |1 |150cm | +|USBケーブル | 1|150cm | 
-|コネクタキット |1 |Dynamixel I/F(MPU・センサ電源)用 ([[50-37-5043>http://www.molex.com/molex​/products/datasheet.jsp?part=active/0050​375043_CRIMP_HOUSINGS.xml&channel=Produc​ts&Lang=ja-jp]]x1, [[08-70-1040>http://www.molex.com/molex/​products/datasheet.jsp?part=active/00087​01040_CRIMP_TERMINALS.xml&channel=Produc​ts&Lang=ja-jp]]x5)&br;モータ電源用 ([[No.05023>http://kopropo.co.jp/wp/?cat=40&paged=5]]x1)&br;モータ用 ([[No.05001>http://kopropo.co.jp/wp/?cat=40&paged=5]]x2)  |+|コネクタキット | 1|Dynamixel I/F(MPU・センサ電源)用 ([[50-37-5043>http://www.molex.com/molex​/products/datasheet.jsp?part=active/0050​375043_CRIMP_HOUSINGS.xml&channel=Produc​ts&Lang=ja-jp]]x1, [[08-70-1040>http://www.molex.com/molex/​products/datasheet.jsp?part=active/00087​01040_CRIMP_TERMINALS.xml&channel=Produc​ts&Lang=ja-jp]]x5)&br;モータ電源用 ([[No.05023>http://www.kopropo.co.jp/sys/archives/182]]x1)&br;モータ用 ([[No.05001>http://www.kopropo.co.jp/sys/archives/183]]x2)  |
***基本仕様 [#pb0bf34c] ***基本仕様 [#pb0bf34c]
|品番 |BTA022/BTA023 | |品番 |BTA022/BTA023 |
-|リビジョン |E093B |+|リビジョン |E093B or E093C |
|動作温度範囲 |0~+50℃ 結露無きこと | |動作温度範囲 |0~+50℃ 結露無きこと |
-|寸法 |外形:53x78mm (±1mm)&br;取り付け穴:45.7x66.7mm 4-φ2.2 |+|寸法 |外形:53x73mm (±1mm)&br;取り付け穴:45.7x66.7mm 4-φ2.2 |
|厚み |突起物を含み約25mm | |厚み |突起物を含み約25mm |
|重量 |70g以下 | |重量 |70g以下 |
-|MPU |AT91SAM7S256もしくはAT91SAM7S512 (48MHz ARM7TDMI) |+|MPU |E093B:AT91SAM7S256もしくはAT91SAM7S512&br;E093C:AT91SAM7S256 |
|MPU内蔵メモリ |フラッシュROM:256kもしくは512kbyte(ブートローダ領域を含む)&br;RAM:64kbyte | |MPU内蔵メモリ |フラッシュROM:256kもしくは512kbyte(ブートローダ領域を含む)&br;RAM:64kbyte |
|モータ電源  |入力: DC5~DC24V (絶対最大定格電圧:75V)&br;出力: UD3定格20A (FET 定格電流:240A パルス電流:960A)&br;許容損失電力(25℃): 300W | |モータ電源  |入力: DC5~DC24V (絶対最大定格電圧:75V)&br;出力: UD3定格20A (FET 定格電流:240A パルス電流:960A)&br;許容損失電力(25℃): 300W |
Line 54: Line 55:
****CN1 [#c95ac81b] ****CN1 [#c95ac81b]
|CENTER:BGCOLOR(red):||c |CENTER:BGCOLOR(red):||c
-|  :idea:|電源の逆接続は電源回路の即時破壊・全損扱いとなる。&br;本端子に電源が印加され、CN3(モータ用電源)の電源供給が断たれている状態では、モータのイネーブル信号を発行してはならない。イネーブルするとゲートドライバに過大な負荷がかかり破損する。|+|  :idea:|電源の逆接続は電源回路の即時破壊・全損扱いとなる。&br;リビジョン''E093B''に限り本端子に電源が印加され、CN3(モータ用電源)の電源供給が断たれている状態では、モータのイネーブル信号を発行してはならない。イネーブルするとゲートドライバに過大な負荷がかかり破損する。|
|基板側ヘッダー |[[22-03-5045>http://www.molex.com/molex​/products/datasheet.jsp?part=active/0022​035045_PCB_HEADERS.xml&channel=Products&​Lang=ja-jp]] | |基板側ヘッダー |[[22-03-5045>http://www.molex.com/molex​/products/datasheet.jsp?part=active/0022​035045_PCB_HEADERS.xml&channel=Products&​Lang=ja-jp]] |
Line 78: Line 79:
****CN3 [#c0d4bab9] ****CN3 [#c0d4bab9]
|CENTER:BGCOLOR(red):||c |CENTER:BGCOLOR(red):||c
-|  :idea:|電源の逆接続はブリッジ回路の即時破壊・全損扱いとなる。&br;CN1に電源が印加され、本端子の電源供給が断たれている状態では、モータのイネーブルを発行してはならない。イネーブルするとゲートドライバに過大な負荷がかかり破損する。|+|  :idea:|電源の逆接続はブリッジ回路の即時破壊・全損扱いとなる。&br;リビジョン''E093B''に限りCN1に電源が印加され、本端子の電源供給が断たれている状態では、モータのイネーブルを発行してはならない。イネーブルするとゲートドライバに過大な負荷がかかり破損する。|
-|ストロングゴールドコネクター  オス |[[No.05022>http://kopropo.co.jp/wp/?cat=40&paged=5]] | +|ストロングゴールドコネクター  オス |[[No.05022>http://www.kopropo.co.jp/sys/archives/182]] | 
-|ストロングゴールドコネクター  メス |[[No.05023>http://kopropo.co.jp/wp/?cat=40&paged=5]] |+|ストロングゴールドコネクター  メス |[[No.05023>http://www.kopropo.co.jp/sys/archives/182]] |
-Hブリッジ(モータ)電源供給用 -Hブリッジ(モータ)電源供給用
Line 92: Line 93:
****M1 [#p68e0f67] ****M1 [#p68e0f67]
-|レーシングコネクター メス |[[No.05002>http://kopropo.co.jp/wp/?cat=40&paged=5]] | +|レーシングコネクター メス |[[No.05002>http://www.kopropo.co.jp/sys/archives/183]] | 
-|レーシングコネクター オス |[[No.05001>http://kopropo.co.jp/wp/?cat=40&paged=5]] |+|レーシングコネクター オス |[[No.05001>http://www.kopropo.co.jp/sys/archives/183]] |
-負荷接続用端子 -負荷接続用端子
-[[図>#lc74b433]]左より順に ①:M1+, ②:M1+, ③:M1-, ④:M1- -[[図>#lc74b433]]左より順に ①:M1+, ②:M1+, ③:M1-, ④:M1-
Line 100: Line 101:
****M2 [#s05e2d77] ****M2 [#s05e2d77]
-|レーシングコネクター メス |[[No.05002>http://kopropo.co.jp/wp/?cat=40&paged=5]] | +|レーシングコネクター メス |[[No.05002>http://www.kopropo.co.jp/sys/archives/183]] | 
-|レーシングコネクター オス |[[No.05001>http://kopropo.co.jp/wp/?cat=40&paged=5]] |+|レーシングコネクター オス |[[No.05001>http://www.kopropo.co.jp/sys/archives/183]] |
-負荷接続用端子 -負荷接続用端子
-[[図>#lc74b433]]左より順に ①:M2+, ②:M2+, ③:M2-, ④:M2- -[[図>#lc74b433]]左より順に ①:M2+, ②:M2+, ③:M2-, ④:M2-
Line 137: Line 138:
****LED4 [#f3885109] ****LED4 [#f3885109]
-赤色 -赤色
--CN3から電源を供給すると点灯+-CN3から電源を供給すると点灯
 +リビジョンE093CからはCN1の電源供給が無いと点灯しない
-CN1(MPU&センサ電源)の接続でもリーク電流で点灯する場合がある -CN1(MPU&センサ電源)の接続でもリーク電流で点灯する場合がある
-電源供給を断っているにもかかわらずLEDが点灯している場合は、コンデンサに蓄積した電荷が残っている状態である。完全に消灯していない状態でCN3のリードを導電性の物で短絡するとアークが飛び危険である。 -電源供給を断っているにもかかわらずLEDが点灯している場合は、コンデンサに蓄積した電荷が残っている状態である。完全に消灯していない状態でCN3のリードを導電性の物で短絡するとアークが飛び危険である。
****J1~J8 [#y6c5f6b8] ****J1~J8 [#y6c5f6b8]
 +2.5mmピッチ3ピンヘッダ
-[[図>#lc74b433]]左より順に ①:SIG, ②:5V出力, ③:GND の端子割り当て -[[図>#lc74b433]]左より順に ①:SIG, ②:5V出力, ③:GND の端子割り当て
-J1~J8の各①ピン(SIG端子)がGPIO0~GPIO7に相当する -J1~J8の各①ピン(SIG端子)がGPIO0~GPIO7に相当する
Line 153: Line 156:
****J9~J11 [#mcb1b14c] ****J9~J11 [#mcb1b14c]
 +2.5mmピッチ3ピンヘッダ
-[[図>#lc74b433]]左より順に ①:SIG, ②:5V出力, ③:GND の端子割り当て -[[図>#lc74b433]]左より順に ①:SIG, ②:5V出力, ③:GND の端子割り当て
-J9~J11の各①ピン(SIG端子)がGPIO8~GPIO10に相当する -J9~J11の各①ピン(SIG端子)がGPIO8~GPIO10に相当する
Line 176: Line 180:
**各機能の詳細 [#db9530a6] **各機能の詳細 [#db9530a6]
***電源の印加順序 [#l7a7e35f] ***電源の印加順序 [#l7a7e35f]
-CN1とCN2の電源の接続時には誤動作や破損を防ぐため、出来る限り以下の順序に従ってください。なお、CN2から供給されるPCからのUSBバスパワーは本手順に影響しません。+リビジョン''E093B''において、CN1とCN2の電源の接続時には誤動作や破損を防ぐため、出来る限り以下の順序に従ってください。本制限はリビジョン''E093C''には適用されません。なお、CN2から供給されるPCからのUSBバスパワーは本手順に影響しません。
~&color(red){電源ON}; ~&color(red){電源ON};
+CN1にMPU及びセンサ用電源を接続しLED2の点灯を確認(この時点でモータのイネーブルが発行されてはいけない) +CN1にMPU及びセンサ用電源を接続しLED2の点灯を確認(この時点でモータのイネーブルが発行されてはいけない)
Line 206: Line 210:
***ブートローダ [#ueb4c356] ***ブートローダ [#ueb4c356]
 +****UD3ブートローダのアップデート [#w41e0c1f]
 +本ドキュメントではブートローダのバージョンが2.4以前であることを前提に記述しています。次の手順に従ってブートローダを最新のバージョンに更新してください。
 ++アップデートファイルの入手~
 +以下のURLよりZIP形式で圧縮されたアップデートファイルをダウンロードします。なお、このファイルはV2.0よりも前のバージョンからV2.5にアップデートする場合は利用できません。~
 +[[UDIII_Bootloader_update_v2.5.zip:http:​//www.besttechnology.co.jp/download/UDII​I_Bootloader_update_v2.5.zip]]~
 +ダウンロードしたZIPファイルを解凍し、同梱される UDIII_UpdateToV2.5.bin を任意のフォルダにコピーします。
 ++アップデートファイルの転送~
 +UD3をPCに装着しブートローダを起動します。SIMPLE TERMでUD3の仮想COMポートを開き、ブートローダのコマンドモードになっていることを確認します。~
 +'w'コマンドを入力した後'y'を入力し、ブートローダをアプリケーションプログラムの受信待機状態にします。
 + --< UDIII Ver.2.4 by BestTechnology >--
 + >w
 +  START UPLOAD...
 +  ARE YOU SURE? (Y/N) y
 +次にSIMPLE TERMの転送メニュー→ファイル送信をクリックし、先に解凍した UDIII_UpdateToV2.5.bin を指定して転送を開始します。
 +  <SUCCESS>
 + >
 +SUCCESSの文字が表示されたらアップデートプログラムのダウンロードは完了です。
 ++アップデートプログラムの実行~
 +アップデートプログラムはユーザプログラムとして提供され、ブートローダから実行されない限り更新は行われません。アップデートプログラムの転送が完了したら'g'コマンドを入力し、アップデートプログラムを実行させます。~
 +しばらくしてUD3からアラーム音が発せられLEDが点滅すれば、アップデートプログラムが実行されている状態となります。SIMPLE TERMのターミナルウィンドウには以下の表示がなされます。
 +  Push space key to update UDIII bootloader v2.5
 +ここでスペースキーを押すとアップデート処理が開始され、それ以外のキーを押すとアップデートがキャンセルされます。~
 +スペースキーを押すと以下の様なメッセージが順に表示され、成功すれば新しくなったブートローダの起動メッセージが表示されます。
 +  Push space key to update UDIII bootloader v2.5
 +  Start to burn ....success
 +  Verifying ........................................​...succcess
 +  Please unplug USB cable ...
 +再度UD3をPCに装着しブートローダを起動し、SIMPLE TERMのターミナルウィンドウに以下のメッセージが表示されたらアップデートは成功しています。
 + --< UDIII Ver.2.5 by BestTechnology >--
 + >
 ++Bluetoothの設定~
 +ブートローダを更新するとBluetoothの諸設定が初期化されます。Bluetoothを使用する場合は再度必要な設定を行ってください。
 +
 +更新内容:~
 +V2.5 (2011/07/22)
 +-Bluetoothモジュール検出の条件が厳し過ぎて未検出するのを回避
 +-Bluetoothの設定時に表示上の文字が崩れるのを修正
 +
 +V2.4 (2011/07/1)
 +-Bluetoothの設定をユーザアプリに引き継ぐ様に修正
 +-E093Cで追加されたモータ用電源供給検出に対応
 +
 +V2.3 (2011/3/5)
 +-DIPスイッチの取り込みフローを修正
 +
 +V2.0 (2010/9/20)
 +-初期リリース
 +
 +****使用方法 [#d6e783d6]
本装置を操作するための専用プログラムが予め搭載されており、USB(ボーレート:任意)・Bluetooth(ボーレート:任意)・Dynamixel I/F(ボーレート:1Mbps)のいずれかを経由してユーザプログラムの転送や諸設定を行う事が出来ます。~ 本装置を操作するための専用プログラムが予め搭載されており、USB(ボーレート:任意)・Bluetooth(ボーレート:任意)・Dynamixel I/F(ボーレート:1Mbps)のいずれかを経由してユーザプログラムの転送や諸設定を行う事が出来ます。~
SIMPLE TERMで該当のポートを開き、ブートローダのコマンドモードに入ると以下のメッセージ及びプロンプトが表示されます。 SIMPLE TERMで該当のポートを開き、ブートローダのコマンドモードに入ると以下のメッセージ及びプロンプトが表示されます。
- --< UDIII Ver.2.1 by BestTechnology >--+ --< UDIII Ver.2.5 by BestTechnology >--
 >  >
この状態で使用出来るコマンドは'?'を入力すると表示されます。 この状態で使用出来るコマンドは'?'を入力すると表示されます。
 >?  >?
- --< UDIII Ver.2.1 by BestTechnology >--+ --< UDIII Ver.2.5 by BestTechnology >--
  [w]:UPLOAD [g]:BOOT [i]:FLASH INFO [e]:ERASE [b]:BLUETOOTH   [w]:UPLOAD [g]:BOOT [i]:FLASH INFO [e]:ERASE [b]:BLUETOOTH
 >  >
Line 234: Line 287:
***Bluetooth [#vb8c51d8] ***Bluetooth [#vb8c51d8]
-BTA023のみBluetoothによるコンソールやコントローラの無線化に対応しています。搭載されるBluetoothモジュールであるZEAL-C01の出荷時の設定は以下の通りです。~+BTA023のみBluetoothによるシリアルコンソールやリモートコントローラの無線化に対応します。搭載されるBluetoothモジュールであるZEAL-C01の出荷時の設定は以下の通りです。~
-サポートプロファイル:SPPのみ -サポートプロファイル:SPPのみ
-DTE速度:460.8kbps (UD3搭載のMPUとZEAL間のUSARTの速度) -DTE速度:460.8kbps (UD3搭載のMPUとZEAL間のUSARTの速度)
Line 248: Line 301:
このうち、ユーザ自ら変更出来るのは接続モードとPINコードで、ブートローダから選択及び変更が出来ます。ブートローダからBluetoothの設定を行う場合は、コマンドモードのプロンプトが'>'の状態で'b'を入力します。Bluetoothの設定モードに入ると、プロンプトは'BT'に変わります。この状態で使用出来るコマンドは'?'を入力すると表示されます。なお、Bluetooth経由でブートローダのコンソールを操作している場合はBluetoothの設定が行えませんので、その場合は他のI/Fを使用してください。 このうち、ユーザ自ら変更出来るのは接続モードとPINコードで、ブートローダから選択及び変更が出来ます。ブートローダからBluetoothの設定を行う場合は、コマンドモードのプロンプトが'>'の状態で'b'を入力します。Bluetoothの設定モードに入ると、プロンプトは'BT'に変わります。この状態で使用出来るコマンドは'?'を入力すると表示されます。なお、Bluetooth経由でブートローダのコンソールを操作している場合はBluetoothの設定が行えませんので、その場合は他のI/Fを使用してください。
- --< UDIII Ver.2.1 by BestTechnology >--+ --< UDIII Ver.2.5 by BestTechnology >-- 
 +  [w]:UPLOAD [g]:BOOT [i]:FLASH INFO [e]:ERASE [b]:BLUETOOTH
 >b  >b
-  CONNECTING TO BLUETOOTH MODULE .......+  CONNECTING TO BLUETOOTH MODULE ......
 BT>?  BT>?
 -- BLUETOOTH CONFIGURATION --  -- BLUETOOTH CONFIGURATION --
-  [o]:SLEEP [w]:MASTER [c]:SLAVE [s]:SIXAXIS [p] PIN [i]:info [ESC]:exit+  [o]:SLEEP [w]:MASTER [c]:SLAVE [s]:SIXAXIS [a]:AUTHENTICATION [p]:PIN CODE 
 +  [h]:INQUIRY [i]:info [ESC]:exit
 BT>  BT>
Line 291: Line 346:
~ソースプログラムを編集するためのテキストエディタとその他のツールを起動するためのランチャ機能を有する。 ~ソースプログラムを編集するためのテキストエディタとその他のツールを起動するためのランチャ機能を有する。
-''[[SIMPLE TERM>GCC Developer Lite#STERM]]'' -''[[SIMPLE TERM>GCC Developer Lite#STERM]]''
-~汎用シリアルターミナル。簡易的なTLENETクライアントとしても機能する。~+~汎用シリアルターミナル。簡易的なTELNETクライアントとしても機能する。~
USB等で提供されるCOMポートの動的な検出と、COMポートを使用する弊社ツールとの排他制御機能を持つ。 USB等で提供されるCOMポートの動的な検出と、COMポートを使用する弊社ツールとの排他制御機能を持つ。
-''ARMGCC'' -''ARMGCC''
Line 352: Line 407:
-''UD3ライブラリ''~ -''UD3ライブラリ''~
UD3ライブラリはToppersを採用することで、2チャンネルあるモータドライバを全く違う目的で各々個別のタスクで動かしたり、ホストPCとDynamixelプロトコルで通信を行うタスクを走らせながらシステムを運用といった機能を提供。~ UD3ライブラリはToppersを採用することで、2チャンネルあるモータドライバを全く違う目的で各々個別のタスクで動かしたり、ホストPCとDynamixelプロトコルで通信を行うタスクを走らせながらシステムを運用といった機能を提供。~
-実際にはToppersのそれを意識する必要はほとんどない。+実際にはToppersのそれを意識する必要はほとんどない。
 +使用できるAPIは膨大なため、別途[[こちら>UD3LIB]]のページにて詳細を公開。
-**UD3 API [#c8cb0041+**サンプルプログラム [#kf8170aa
-ユーザ自らMPUのペリフェラルへ直接アクセスするコーディングをする訳ではなく、GCC Developer Liteが提供するUD3専用ライブラリを介してUD3の機能へアクセスする事になります。~ +APIを使用したいくつかのサンプルプログラムを用意しました。以下よりダウンロードして解凍した上でご利用ください。詳細はコメントおよび[[UD3 Library]]のドキュメントを参考に読み解いてください。
-APIを使用する前に、ソースプログラムの先頭に ud3.h をインクルードしてください。 +
- #include <ud3.h>+
-本APIを使用したアプリケーションはシステムとして1つのタスクが静的に常時占有されます。このタスクは主にDynamixelプロトコルによる通信処理等に使用されますが、通信が発生しない限り軽微な負荷で動作しています。+-UD3用サンプルプログラム Ver1.6 (2011/8/9)~ 
 +#ref(http://www.besttechnology.co.jp/dow​nload/UD3_SMPL1.6.zip) 
 +--更新履歴~ 
 +GCC Developer Lite 2.4.0.13r4以降のAPI変更に伴う修正(sample15(DX_HOST).cのみ)
-APIの詳細は以下に列挙しますが、GCC Developer Lite Version2.3.2.6r4以降に収録されたUD3ライブラリを前提として記述されていますので、それより古いバージョンでは対応しないAPIが存在します。ご注意ください。+-UD3用サンプルプログラム Ver1.5 (2011/8/3)~ 
 +#ref(http://www.besttechnology.co.jp/download/UD3_SMPL1.​5.zip) 
 +--更新履歴~ 
 +GCC Developer Lite 2.4.0.13r3以降のAPI追加・変更に伴う修正
-***システム及びタスク関連 [#aacb0ce6] +-UD3用サンプルプログラム Ver1.4 (2011/7/22)
-OSで管理されるタスクや時間に関するサブルーチンです。+#ref(http://www.besttechnology.co.jp/download​/UD3_SMPL1.4.zip) 
-ユーザは任意のタスクを最大4つまで作成可能で、自動的にマルチタスクで動作する設定になっています。システムで予約されたタスク(TASK5)は自動的に登録されますが、意図的に停止させてしまうと全APIが正常に動作しなくなりますので絶対に停止させないでください。+--更新履歴~ 
 +GCC Developer Lite 2.4.0.13以降のAPI追加・変更に伴う追加・修正
-****UD3_INITIALIZE [#bd0f80b9] +-UD3用サンプルプログラム Ver1.3 (2011/4/6)~ 
-一般的なC言語のプログラムで言えばmain関数に相当し、一番最初に実行される初期化関数。タスクの起動やGPIOの初期化等はこの関数内で記述する。 +#ref(http://www.besttechnology.co.jp/download​/UD3_SMPL1.3.zip
- void UD3_INITIALIZE(void); +--更新履歴
--パラメータ +GCC Developer Lite 2.4.0.0r3以降のAPI追加・変更に伴う追加・修正
-~なし +
--戻り値 +
-~なし +
--使用例 +
- #include <ud3.h>+
- UD3_INITIALIZE () +-UD3用サンプルプログラム Ver1.2 (2010/9/25)~ 
- { +#ref(http://www.besttechnology.co.jp/download/UD3_SMPL1.2.zip) 
-   // 動作環境設定 +--更新履歴~
-   // GPIO8/9/10をPWMキャプチャモードに設定 +
-   UD3_CFG_GPIO8 (GPIO_PWM_CAP); +
-   UD3_CFG_GPIO9 (GPIO_PWM_CAP); +
-   UD3_CFG_GPIO10 (GPIO_PWM_CAP); +
-   // モータの設定 +
-   UD3_SET_M1DRIVEMODE (_UD_MOTOR_DRIVE); +
-   UD3_SET_M2DRIVEMODE (_UD_MOTOR_DRIVE); +
-   UD3_SET_DUTY(500, -500); +
-   // 使用タスクを起動 +
-   UD3_ACTIVE_TASK (1); +
-   UD3_ACTIVE_TASK (2); +
- } +
- +
-****UD3_TASK1 [#n10e53c9] +
-UD3は最大4つのユーザ定義タスクを同時に実行出来るが、UD3_TASK1の名称で作られた関数は自動的にタスク1としてOSに登録される。~ +
-タスクの活性化は[[UD3_ACTIVE_TASK>#f9cdcf0a]]で行う。~ +
-複数のタスクを定義し活性化すると各々のタスクはOSによって並列実行されるが、タスク数に乗じてタスク自体の実行速度は遅くなる。 +
- +
- UD3_TASK1() +
--パラメータ +
-~なし +
--戻り値 +
-~なし +
--使用例 +
- #include <ud3.h> +
- +
- UD3_TASK1 () { +
-   for (;;) { +
-     UD3_SET_LED (true);  // LED点灯 +
-     UD3_WAIT(500);      // 0.5秒待ち +
-     UD3_SET_LED (false); // LED消灯 +
-     UD3_WAIT(500);      // 0.5秒待ち +
-   } +
- } +
- +
- UD3_INITIALIZE () { +
-   UD3_ACTIVE_TASK (1);  // タスク1をアクティブ化 +
- } +
- +
-****UD3_TASK2 [#xb6d65de] +
-UD3は最大4つのユーザ定義タスクを同時に実行出来るが、UD3_TASK2の名称で作られた関数は自動的にタスク2としてOSに登録される。~ +
-タスクの活性化はタスクの活性化は[[UD3_ACTIVE_TASK>#f9cdcf0a]]で行う。~ +
-で行う。~ +
-複数のタスクを定義し活性化すると各々のタスクはOSによって並列実行されるが、タスク数に乗じてタスク自体の実行速度は遅くなる。 +
- +
- UD3_TASK2(); +
--パラメータ +
-~なし +
--戻り値 +
-~なし +
--使用例 +
- #include <ud3.h> +
- +
- UD3_TASK2 () { +
-   for (;;) { +
-     UD3_SET_LED (true);  // LED点灯 +
-     UD3_WAIT(500);      // 0.5秒待ち +
-     UD3_SET_LED (false); // LED消灯 +
-     UD3_WAIT(500);      // 0.5秒待ち +
-   } +
- } +
- +
- UD3_INITIALIZE () { +
-   UD3_ACTIVE_TASK (2);  // タスク2をアクティブ化 +
- } +
- +
-****UD3_TASK3 [#e13da6de] +
-UD3は最大4つのユーザ定義タスクを同時に実行出来るが、UD3_TASK3の名称で作られた関数は自動的にタスク3としてOSに登録される。~ +
-タスクの活性化は[[UD3_ACTIVE_TASK>#f9cdcf0a]]で行う。~ +
-複数のタスクを定義し活性化すると各々のタスクはOSによって並列実行されるが、タスク数に乗じてタスク自体の実行速度は遅くなる。 +
- +
- UD3_TASK3(); +
--パラメータ +
-~なし +
--戻り値 +
-~なし +
--使用例 +
- #include <ud3.h> +
- +
- UD3_TASK3 () { +
-   for (;;) { +
-     UD3_SET_LED (true);  // LED点灯 +
-     UD3_WAIT(500);      // 0.5秒待ち +
-     UD3_SET_LED (false); // LED消灯 +
-     UD3_WAIT(500);      // 0.5秒待ち +
-   } +
- } +
- +
- UD3_INITIALIZE () { +
-   UD3_ACTIVE_TASK (3);  // タスク3をアクティブ化 +
- } +
- +
-****UD3_TASK4 [#w06ef286] +
-UD3は最大4つのユーザ定義タスクを同時に実行出来るが、UD3_TASK4の名称で作られた関数は自動的にタスク4としてOSに登録される。~ +
-タスクの活性化は[[UD3_ACTIVE_TASK>#f9cdcf0a]]で行う。~ +
-複数のタスクを定義し活性化すると各々のタスクはOSによって並列実行されるが、タスク数に乗じてタスク自体の実行速度は遅くなる。 +
- +
- UD3_TASK4(); +
--パラメータ +
-~なし +
--戻り値 +
-~なし +
--使用例 +
- #include <ud3.h> +
- +
- UD3_TASK4 () { +
-   for (;;) { +
-     UD3_SET_LED (true);  // LED点灯 +
-     UD3_WAIT(500);      // 0.5秒待ち +
-     UD3_SET_LED (false); // LED消灯 +
-     UD3_WAIT(500);      // 0.5秒待ち +
-   } +
- } +
- +
- UD3_INITIALIZE () { +
-   UD3_ACTIVE_TASK (4);  // タスク4をアクティブ化 +
- } +
- +
-****UD3_ACTIVE_TASK [#f9cdcf0a] +
-指定したタスクをアクティブにする。タスクをアクティブにしていない場合には、タスクを定義してあってもそのタスクは実行されない。 +
- +
- void UD3_ACTIVE_TASK (task); +
--パラメータ +
---int_t '''task''' +
-~タスク番号。指定出来るタスク番号は1~4。 +
--戻り値 +
-~なし +
--使用例 +
- #include <ud3.h> +
- +
- UD3_TASK1 () { +
-   for (;;) { +
-     UD3_SET_LED (true);  // LED点灯 +
-     UD3_WAIT(500);      // 0.5秒待ち +
-     UD3_SET_LED (false); // LED消灯 +
-     UD3_WAIT(500);      // 0.5秒待ち +
-   } +
- } +
- +
- UD3_INITIALIZE () { +
-   UD3_ACTIVE_TASK (1);  // タスク1をアクティブ化 +
- } +
- +
-****UD3_SUSPEND_TASK [#j900e682] +
-指定したアクティブなタスクをサスペンドする。レジュームするには[[UD3_RESUME_TASK>#l31e0f36]]を使用する。 +
- +
- int UD3_SUSPEND_TASK (char task); +
--パラメータ +
---char  '''task''' +
-~タスク番号。指定出来るタスク番号は1~4。 +
--戻り値 +
-~成功すると0 、パラメータエラーがあった場合は-1が返される。 +
--使用例 +
- #include <ud3.h> +
- +
- UD3_TASK1 () { +
-   for (;;) { +
-     UD3_SET_LED (true);  // LED点灯 +
-     UD3_WAIT(500);      // 0.5秒待ち +
-     UD3_SET_LED (false); // LED消灯 +
-     UD3_WAIT(500);      // 0.5秒待ち +
-   } +
- } +
- +
- UD3_INITIALIZE () { +
-   UD3_ACTIVE_TASK (1);  // タスク1をアクティブ化 +
- } +
- +
-****UD3_RESUME_TASK [#l31e0f36] +
-指定したサスペンドしているタスクをレジュームする。サスペンドするには[[UD3_SUSPEND_TASK>#j900e682]]を使用する。 +
- +
- int UD3_RESUME_TASK (char task); +
--パラメータ +
---char  '''task''' +
-~タスク番号。指定出来るタスク番号は1~4。 +
--戻り値 +
-~成功すると0 、パラメータエラーがあった場合は-1が返される。 +
--使用例 +
- #include <ud3.h> +
- +
- UD3_TASK1 () { +
-   for (;;) { +
-     UD3_SET_LED (true);  // LED点灯 +
-     UD3_WAIT(500);      // 0.5秒待ち +
-     UD3_SET_LED (false); // LED消灯 +
-     UD3_WAIT(500);      // 0.5秒待ち +
-   } +
- } +
- +
- UD3_INITIALIZE () { +
-   UD3_ACTIVE_TASK (1);  // タスク1をアクティブ化 +
- } +
- +
-****UD3_WAIT [#ja9bd39f] +
-ミリ秒単位でプログラムの実行を待つ。 +
- void UD3_WAIT (int_t tm); +
--パラメータ +
---int_t '''tm''' +
-~待ち時間(msec)を指定。 +
--戻り値 +
-~なし +
--使用例 +
- #include <ud3.h> +
- +
- UD3_TASK1 () { +
-   for (;;) { +
-     UD3_SET_LED (true);  // LED点灯 +
-     UD3_WAIT(500);      // 0.5秒待ち +
-     UD3_SET_LED (false); // LED消灯 +
-     UD3_WAIT(500);      // 0.5秒待ち +
-   } +
- } +
- +
- UD3_INITIALIZE () { +
-   UD3_ACTIVE_TASK (1); +
- } +
- +
-****UD3_GET_ELAPSEDTIME [#lf9e26fd] +
-アプリケーション起動時からの経過時間をミリ秒単位で取得。 +
- uint32_t UD3_GET_ELAPSEDTIME (void); +
--パラメータ +
-~なし +
--戻り値 +
-~uint32_t 経過時間 +
--使用例 +
- // 経過時間を取得します。 +
- uint32_t tm = UD3_GET_ELAPSEDTIME (); +
- +
-****UD3_SET_DXPACKETENABLE [#pd1e307a] +
-Dynamixelパケット通信機能を開始・停止する。デフォルトで開始されるが、Bluetooth・USB・RS485経由の通信をDynamixelパケットで占有されずにユーザ自らのコンソールとして使用する場合は停止させておく必要がある。 +
- void UD3_SET_DXPACKETENABLE (bool mode); +
--パラメータ +
---bool '''mode''' +
-~false: Dyanmixelパケット処理を停止する~ +
-true: Dyanmixelパケット処理を開始する +
-~デフォルトはtrue +
--戻り値 +
-~なし +
- +
-****UD3_GET_BTCONNECT [#odf822c9] +
-Bluetoothの接続状態を取得する。なお、接続相手の強制的な電源断等が発生した場合は、状態の繊維に数秒の時間を要する場合がある。 +
- bool UD3_GET_BTCONNECT (void); +
--パラメータ +
-~なし +
--戻り値 +
-~bool  Bluetoothの接続状態 +
-~true :接続中~ +
-false :切断中 +
--使用例 +
- bool stat = UD3_GET_BTCONNECT(); +
- +
-***GPIO関連 [#u6745dd8] +
-GPIO0~11の初期設定や状態の取得サブルーチン関連です。 +
- +
-****UD3_CFG_GPIO0 [#c10e9d62] +
-GPIO0の端子機能を設定する。 +
- int UD3_CFG_GPIO0 (TGPIOMode conf); +
--パラメータ +
---TGPIOMode '''conf''' +
-~以下のリストから一つだけ選択出来る。 +
-~GPIO_IN_PULLUP_OFF (0:入力かつ内蔵プルアップOFF)~ +
-GPIO_IN_PULLUP_ON (1:入力かつ内蔵プルアップON)~ +
-GPIO_ADC (2:アナログ入力)~ +
-GPIO_OUT_OPENDRAIN (3:オープンドレイン出力)~ +
-GPIO_OUT_PUSHPULL (4:プッシュプル出力) +
-~デフォルトはGPIO_IN_PULLUP_OFF。 +
--戻り値 +
-~成功すると0 、パラメータエラーがあった場合は-1が返される。 +
--使用例 +
- #include <ud3.h> +
- +
- UD3_INITIALIZE () +
- { +
-   // ADC +
-   UD3_CFG_GPIO0 (GPIO_ADC); +
- } +
- +
-****UD3_CFG_GPIO1 [#y4f5f690] +
-GPIO1の端子機能を設定する。 +
- int UD3_CFG_GPIO1 (TGPIOMode conf); +
--パラメータ +
---TGPIOMode '''conf''' +
-~以下のリストから一つだけ選択出来る。 +
-~GPIO_IN_PULLUP_OFF (0:入力かつ内蔵プルアップOFF)~ +
-GPIO_IN_PULLUP_ON (1:入力かつ内蔵プルアップON)~ +
-GPIO_ADC (2:アナログ入力)~ +
-GPIO_OUT_OPENDRAIN (3:オープンドレイン出力)~ +
-GPIO_OUT_PUSHPULL (4:プッシュプル出力) +
-~デフォルトはGPIO_IN_PULLUP_OFF。 +
--戻り値 +
-~成功すると0 、パラメータエラーがあった場合は-1が返される。 +
--使用例 +
- #include <ud3.h> +
- +
- UD3_INITIALIZE () +
- { +
-   // ADC +
-   UD3_CFG_GPIO1 (GPIO_ADC); +
- } +
- +
-****UD3_CFG_GPIO2 [#l7586e65] +
-GPIO2の端子機能を設定する。 +
- int UD3_CFG_GPIO2 (TGPIOMode conf); +
--パラメータ +
---TGPIOMode '''conf''' +
-~以下のリストから一つだけ選択出来る。 +
-~GPIO_IN_PULLUP_OFF (0:入力かつ内蔵プルアップOFF)~ +
-GPIO_IN_PULLUP_ON (1:入力かつ内蔵プルアップON)~ +
-GPIO_ADC (2:アナログ入力)~ +
-GPIO_OUT_OPENDRAIN (3:オープンドレイン出力)~ +
-GPIO_OUT_PUSHPULL (4:プッシュプル出力) +
-~デフォルトはGPIO_IN_PULLUP_OFF。 +
--戻り値 +
-~成功すると0 、パラメータエラーがあった場合は-1が返される。 +
--使用例 +
- #include <ud3.h> +
- +
- UD3_INITIALIZE () +
- { +
-   // ADC +
-   UD3_CFG_GPIO2 (GPIO_ADC); +
- } +
- +
-****UD3_CFG_GPIO3 [#a02184b5] +
-GPIO3の端子機能を設定する。 +
- int UD3_CFG_GPIO3 (TGPIOMode conf); +
--パラメータ +
---TGPIOMode '''conf''' +
-~以下のリストから一つだけ選択出来る。 +
-~GPIO_IN_PULLUP_OFF (0:入力かつ内蔵プルアップOFF)~ +
-GPIO_IN_PULLUP_ON (1:入力かつ内蔵プルアップON)~ +
-GPIO_ADC (2:アナログ入力)~ +
-GPIO_OUT_OPENDRAIN (3:オープンドレイン出力)~ +
-GPIO_OUT_PUSHPULL (4:プッシュプル出力) +
-~デフォルトはGPIO_IN_PULLUP_OFF。 +
--戻り値 +
-~成功すると0 、パラメータエラーがあった場合は-1が返される。 +
--使用例 +
- #include <ud3.h> +
- +
- UD3_INITIALIZE () +
- { +
-   // ADC +
-   UD3_CFG_GPIO3 (GPIO_ADC); +
- } +
- +
-****UD3_CFG_GPIO4 [#l791e053] +
-GPIO4の端子機能を設定する。 +
- int UD3_CFG_GPIO4 (TGPIOMode conf); +
--パラメータ +
---TGPIOMode '''conf''' +
-~以下のリストから一つだけ選択出来る。 +
-~GPIO_IN_PULLUP_OFF (0:入力かつ内蔵プルアップOFF)~ +
-GPIO_IN_PULLUP_ON (1:入力かつ内蔵プルアップON)~ +
-GPIO_ADC (2:アナログ入力)~ +
-GPIO_OUT_OPENDRAIN (3:オープンドレイン出力)~ +
-GPIO_OUT_PUSHPULL (4:プッシュプル出力) +
-~デフォルトはGPIO_IN_PULLUP_OFF。 +
--戻り値 +
-~成功すると0 、パラメータエラーがあった場合は-1が返される。 +
--使用例 +
- #include <ud3.h> +
- +
- UD3_INITIALIZE () +
- { +
-   // ADC +
-   UD3_CFG_GPIO4 (GPIO_ADC); +
- } +
- +
-****UD3_CFG_GPIO5 [#ad4fd1e3] +
-GPIO5の端子機能を設定する。 +
- int UD3_CFG_GPIO5 (TGPIOMode conf); +
--パラメータ +
---TGPIOMode '''conf''' +
-~以下のリストから一つだけ選択出来る。 +
-~GPIO_IN_PULLUP_OFF (0:入力かつ内蔵プルアップOFF)~ +
-GPIO_IN_PULLUP_ON (1:入力かつ内蔵プルアップON)~ +
-GPIO_ADC (2:アナログ入力)~ +
-GPIO_OUT_OPENDRAIN (3:オープンドレイン出力)~ +
-GPIO_OUT_PUSHPULL (4:プッシュプル出力) +
-~デフォルトはGPIO_IN_PULLUP_OFF。 +
--戻り値 +
-~成功すると0 、パラメータエラーがあった場合は-1が返される。 +
--使用例 +
- #include <ud3.h> +
- +
- UD3_INITIALIZE () +
- { +
-   // ADC +
-   UD3_CFG_GPIO5 (GPIO_ADC); +
- } +
- +
-****UD3_CFG_GPIO6 [#x95d33cb] +
-GPIO6の端子機能を設定する。 +
- int UD3_CFG_GPIO6 (TGPIOMode conf); +
--パラメータ +
---TGPIOMode '''conf''' +
-~以下のリストから一つだけ選択出来る。 +
-~GPIO_IN_PULLUP_OFF (0:入力かつ内蔵プルアップOFF)~ +
-GPIO_IN_PULLUP_ON (1:入力かつ内蔵プルアップON)~ +
-GPIO_ADC (2:アナログ入力)~ +
-GPIO_OUT_OPENDRAIN (3:オープンドレイン出力)~ +
-GPIO_OUT_PUSHPULL (4:プッシュプル出力) +
-~デフォルトはGPIO_IN_PULLUP_OFF。 +
--戻り値 +
-~成功すると0 、パラメータエラーがあった場合は-1が返される。 +
--使用例 +
- #include <ud3.h> +
- +
- UD3_INITIALIZE () +
- { +
-   // ADC +
-   UD3_CFG_GPIO6 (GPIO_ADC); +
- } +
- +
-****UD3_CFG_GPIO7 [#c82b29f3] +
-GPIO7の端子機能を設定する。 +
- int UD3_CFG_GPIO7 (TGPIOMode conf); +
--パラメータ +
---TGPIOMode '''conf''' +
-~以下のリストから一つだけ選択出来る。 +
-~GPIO_IN_PULLUP_OFF (0:入力かつ内蔵プルアップOFF)~ +
-GPIO_IN_PULLUP_ON (1:入力かつ内蔵プルアップON)~ +
-GPIO_ADC (2:アナログ入力)~ +
-GPIO_OUT_OPENDRAIN (3:オープンドレイン出力)~ +
-GPIO_OUT_PUSHPULL (4:プッシュプル出力) +
-~デフォルトはGPIO_IN_PULLUP_OFF。 +
--戻り値 +
-~成功すると0 、パラメータエラーがあった場合は-1が返される。 +
--使用例 +
- #include <ud3.h> +
- +
- UD3_INITIALIZE () +
- { +
-   // ADC +
-   UD3_CFG_GPIO7 (GPIO_ADC); +
- } +
- +
-****UD3_CFG_GPIO8 [#n31eda6b] +
-GPIO8の端子機能を設定する。 +
- int UD3_CFG_GPIO8 (TGPIOMode conf); +
--パラメータ +
---TGPIOMode '''conf''' +
-~GPIO端子の動作内容を設定。以下のリストから一つだけ選択出来る。なお、GPIO_ADC(2:アナログ入力)は設定出来ない。 +
-~GPIO_IN_PULLUP_OFF (0:入力かつ内蔵プルアップOFF)~ +
-GPIO_IN_PULLUP_ON (1:入力かつ内蔵プルアップON)~ +
-GPIO_OUT_OPENDRAIN (3:オープンドレイン出力)~ +
-GPIO_OUT_PUSHPULL (4:プッシュプル出力)~ +
-GPIO_PWM_CAP (5:パルス幅計測用入力かつプルアップON)~ +
-GPIO_PWM (6:PWM出力) +
-~デフォルトはGPIO_IN_PULLUP_OFF。 +
--戻り値 +
-~成功すると0 、パラメータエラーがあった場に-1が返される。 +
--使用例 +
- #include <ud3.h> +
- +
- UD3_INITIALIZE () +
- { +
-   // PWMキャプチャモードに設定 +
-   UD3_CFG_GPIO8 (GPIO_PWM_CAP); +
- } +
- +
-****UD3_CFG_GPIO9 [#u201f4af] +
-GPIO9の端子機能を設定する。 +
- int UD3_CFG_GPIO9 (TGPIOMode conf); +
--パラメータ +
---TGPIOMode '''conf''' +
-~GPIO端子の動作内容を設定。以下のリストから一つだけ選択出来る。なお、GPIO_ADC(2:アナログ入力)は設定出来ない。 +
-~GPIO_IN_PULLUP_OFF (0:入力かつ内蔵プルアップOFF)~ +
-GPIO_IN_PULLUP_ON (1:入力かつ内蔵プルアップON)~ +
-GPIO_OUT_OPENDRAIN (3:オープンドレイン出力)~ +
-GPIO_OUT_PUSHPULL (4:プッシュプル出力)~ +
-GPIO_PWM_CAP (5:パルス幅計測用入力かつプルアップON)~ +
-GPIO_PWM (6:PWM出力) +
-~デフォルトはGPIO_IN_PULLUP_OFF。 +
--戻り値 +
-~成功すると0 、パラメータエラーがあった場に-1が返される。 +
--使用例 +
- #include <ud3.h> +
- +
- UD3_INITIALIZE () +
- { +
-   // パルス幅計測モードに設定 +
-   UD3_CFG_GPIO9 (GPIO_PWM_CAP); +
- } +
- +
-****UD3_CFG_GPIO10 [#d2dd2f39] +
-GPIO10の端子機能を設定する。 +
- int UD3_CFG_GPIO10 (TGPIOMode conf); +
--パラメータ +
---TGPIOMode '''conf''' +
-~GPIO端子の動作内容を設定。以下のリストから一つだけ選択出来る。なお、GPIO_ADC(2:アナログ入力)は設定出来ない。 +
-~GPIO_IN_PULLUP_OFF (0:入力かつ内蔵プルアップOFF)~ +
-GPIO_IN_PULLUP_ON (1:入力かつ内蔵プルアップON)~ +
-GPIO_OUT_OPENDRAIN (3:オープンドレイン出力)~ +
-GPIO_OUT_PUSHPULL (4:プッシュプル出力)~ +
-GPIO_PWM_CAP (5:パルス幅計測用入力かつプルアップON)~ +
-GPIO_PWM (6:PWM出力) +
-~デフォルトはGPIO_IN_PULLUP_OFF。 +
--戻り値 +
-~成功すると0 、パラメータエラーがあった場に-1が返される。 +
--使用例 +
- #include <ud3.h> +
- +
- UD3_INITIALIZE () +
- { +
-   // パルス幅計測モードに設定 +
-   UD3_CFG_GPIO10 (GPIO_PWM_CAP); +
- } +
- +
-****UD3_GET_GPIOINPUT [#qdba2bbc] +
-GPIOの端子状態を取得。入力に使用するGPIOをUD3_CFG_GPIOxで設定する必要がある。 +
- uint16_t UD3_GET_GPIOINPUT (void); +
--パラメータ +
-~なし +
--戻り値 +
-~uint16_t GPIOの入力値~ +
-戻り値の各ビットは以下のGPIOポートに割り当てられる。 +
-|=BIT|=15|=14|=13|=12|=11|=10|= 9|=8|=7|=6|=5|=4|=3|=2|=1|=0| +
-|=GPIO|=- |=- |=- |=- |=- |=10  |=9  |=8  |=7  |=6  |=5  |=4  |=3  |=2  |=1  |=0  | +
--使用例 +
- // GPIOの入力値 +
- uint16_t input = UD3_GET_GPIOINPUT ()+
- +
-****UD3_SET_GPIOOUTPUT [#sb36fb83] +
-UD3_CFG_GPIOxにてGPIO_OUT_OPENDRAINないしGPIO_OUT_PUSHPULLに設定された端子のみ出力状態を変更する。 +
- int UD3_SET_GPIOOUTPUT (uint16_t out); +
--パラメータ +
-~uint16_t '''out''' +
-~出力データを設定。outの各ビットとGPIOの出力ポートは以下に割り当てられる。 +
-|=out BIT|=15|=14|=13|=12|=11|=10|= 9|=8|=7|=6|=5|=4|=3|=2|=1|=0| +
-|=GPIO|=- |=- |=- |=- |=- |=10  |=9  |=8  |=7  |=6  |=5  |=4  |=3  |=2  |=1  |=0  | +
-~デフォルトは0。 +
--戻り値 +
-~成功すると0 、パラメータエラーがあった場合は-1が返される。 +
--使用例 +
- UD3_CFG_GPIO0(GPIO_OUT_PUSHPULL); // GPIO0を出力に +
- UD3_CFG_GPIO1(GPIO_OUT_PUSHPULL); // GPIO1を出力に +
- UD3_CFG_GPIO2(GPIO_OUT_PUSHPULL); // GPIO2を出力に +
- +
- UD3_SET_GPIOOUTPUT (0x01); // GPIO0のみにHighを出力 +
- UD3_SET_GPIOOUTPUT (0x02); // GPIO1のみにHighを出力 +
- UD3_SET_GPIOOUTPUT (0x04); // GPIO2のみにHighを出力 +
- UD3_SET_GPIOOUTPUT (0x07); // GPIO0~2にHighを出力 +
- UD3_SET_GPIOOUTPUT (0x00); // GPIO0~2にLowを出力 +
- +
-****UD3_GET_ADC [#f0162d6a] +
-GPIO0~7に入力された電圧値を取得する。~ +
-ADCに使用するGPIOをUD3_CFG_GPIOxで設定する必要がある。 +
- uint16_t UD3_GET_ADC (uint8_t ch); +
--パラメータ +
---uint8_t '''ch''' +
-~0~7(GPIO0~GPIO8)のチャネル番号 +
--戻り値 +
-~uint16_t 指定したチャネルの0(0V)~1023(3.3V)のアナログ値 +
--使用例 +
- // GPIO0に入力された電圧を取得します。 +
- adc = UD3_GET_ADC (0); +
- +
-***MMI関連 [#e45522b5] +
-プッシュボタン・ディップスイッチ・LED・ブザー関連のサブルーチンです。 +
- +
-****UD3_SET_BUZZER [#y8fc67a7] +
-任意周波数・音長でブザーを鳴らす。 +
- int UD3_SET_BUZZER (uint8_t scale, uint8_t len); +
--パラメータ +
---uint8_t '''scale''' +
-~音程を0~52の範囲で設定。 +
---uint8_t '''len''' +
-~音長を0~250(x10ms)の範囲で設定。 +
--戻り値 +
-~成功すると0 、パラメータエラーがあった場合は-1が返される。 +
--使用例 +
- UD3_SET_BUZZER (24, 20); +
- UD3_WAIT (300); +
- UD3_SET_BUZZER (30, 20); +
- +
-****UD3_SET_LED [#q6f1d21e] +
-LEDの点灯/消灯。~ +
- int UD3_SET_LED (uint8_t on); +
--パラメータ +
---uint8_t '''on''' +
-~0で消灯、1で点灯する。 +
--戻り値 +
-~成功すると0 、パラメータエラーがあった場合は-1が返される。 +
--使用例 +
- // LEDを点滅させます。 +
- while (1) { +
-   UD3_SET_LED (1); +
-   UD3_WAIT (200); +
-   UD3_SET_LED (0); +
-   UD3_WAIT (200); +
- } +
- +
-****UD3_GET_PUSHBUTTON1 [#xe62248e] +
-PB1の状態を取得。 +
- bool UD3_GET_PUSHBUTTON1 (void); +
--パラメータ +
-~なし +
--戻り値 +
-~bool PB1の状態 +
-~true :押されている~ +
-false :放されている +
--使用例 +
- // PB1が押されている場合にLEDを点灯させます。 +
- UD3_SET_LED (UD3_GET_PUSHBUTTON1 ()); +
- +
-****UD3_GET_PUSHBUTTON2 [#t4c165bb] +
-PB2の状態を取得。 +
- bool UD3_GET_PUSHBUTTON2 (void); +
--パラメータ +
-~なし +
--戻り値 +
-~bool PB2の状態 +
-~true :押されている~ +
-false :放されている +
--使用例 +
- // PB2が押されている場合にLEDを点灯させます。 +
- UD3_SET_LED (UD3_GET_PUSHBUTTON2 ()); +
- +
-****UD3_GET_DIPSWICH [#o08f8c1c] +
-DIP1の状態を取得。 +
- uint8_t UD3_GET_DIPSWICH (void); +
--パラメータ +
-~なし +
--戻り値 +
-~uint8_t DIP1に設定された値(0x00~0x0f) +
--使用例 +
- // DIP1の状態を取得します。 +
- uint8_t sw = UD3_GET_DIPSWICH (); +
- +
-***モータアンプ関連 [#u7a23908] +
-2つのモータドライバの初期設定やデューティー関連のサブルーチンです。 +
- +
-なお、設定デューティ値と出力の相関は以下の図に従い、Duty limit(API上用意されず常時1000‰)とRecharge bandにより制限された水色の出力となります。なお、Recharge bandは全てにおいて優先されます。 +
- +
-#ref(ud3_motor_limit1.png,100%) +
-#ref(ud3_motor_limit2.png,100%) +
- +
-****UD3_SET_M1FREQUENCY [#wc47b8e1] +
-M1のPWM周波数を設定。~ +
- int UD3_SET_M1FREQUENCY (uint8_t freq); +
--パラメータ +
---uint8_t '''freq''' +
-~周波数を0~200[kHz]で指定。~ +
-なお周波数が高くなると最終段での出力が得られにくくなるため、最大でも100kHz程度にとどめることを推奨する。 +
-~デフォルトは50kHz +
--戻り値 +
-~成功すると0 、パラメータエラーがあった場合は-1が返される。 +
--使用例 +
- // M1の周波数を100kHzに設定 +
- UD3_SET_M1FREQUENCY (100); +
- +
-****UD3_SET_M1RECHARGE [#n8f06456] +
-駆動方式の都合から100%のデューテーィ比で連続運転が出来ないため、100%で指令された場合の目減り分(Recharge band)の値。負荷やPWM周波数によって調整が必要なパラメータである。~ +
-調整の際はデューティー100%で運転を指令した状態で、本設定値を0から順に負荷の運転が安定するまで大きくして行く。最大でも20%以下で安定すると思われる。 +
- int UD3_SET_M1RECHARGE (uint8_t re); +
--パラメータ +
---uint8_t '''re''' +
-~0~100[%]を設定。100%-re が出力リミッタとして働く。 +
-~デフォルトは5% +
--戻り値 +
-~成功すると0 、パラメータエラーがあった場合は-1が返される。 +
--使用例 +
- // M1の最大PWM制限幅を5%に設定します +
- UD3_SET_M1RECHARGE (5); +
- +
-****UD3_SET_M1DRIVEMODE [#a35c521d] +
-M1の駆動モードを設定する。 +
- UD3_SET_M1DRIVEMODE (mode); +
--パラメータ +
---uint8_t '''mode''' +
-~_UD_MOTOR_BRAKE (0:ブレーキモード)~ +
-_UD_MOTOR_DRIVE (1:ドライブモード) +
-~デフォルトは_UD_MOTOR_BRAKE。 +
--戻り値 +
-~成功すると0 、パラメータエラーがあった場合は-1が返される。 +
--使用例 +
- // M1をドライブモードにします +
- UD3_SET_M1DRIVEMODE (_UD_MOTOR_DRIVE); +
- +
-****UD3_SET_M1PWMDUTY [#de09cbea] +
-M1のPWMデューティー比を設定する。~ +
- int UD3_SET_M1PWMDUTY (int16_t duty); +
--パラメータ +
---int16_t '''duty''' +
-~デューティーを-1000~0~1000[‰]で指定。マイナス値は逆転を意味する。~ +
-0‰の場合はショートブレーキとなる。 +
-~デフォルトは0‰。 +
--戻り値 +
-~成功すると0 、パラメータエラーがあった場合は-1が返される。~ +
-±1000の範囲を越えて設定されている場合にも1が返されるが、リミッタで値はクリップされる。 +
--使用例 +
- // M1を20%のDUTYで動作させます。 +
- UD3_SET_M1PWMDUTY (200); +
- +
-****UD3_SET_M2FREQUENCY [#jf15fafa] +
-M2のPWM周波数を設定。~ +
- int UD3_SET_M2FREQUENCY (uint8_t freq); +
--パラメータ +
---uint8_t '''freq''' +
-~周波数を0~200[kHz]で指定。~ +
-なお周波数が高くなると最終段での出力が得られにくくなるため、最大でも100kHz程度にとどめることを推奨する。 +
-~デフォルトは50kHz +
--戻り値 +
-~成功すると0 、パラメータエラーがあった場合は-1が返される。 +
--使用例 +
- // M2の周波数を100kHzに設定 +
- UD3_SET_M2FREQUENCY (100); +
- +
-****UD3_SET_M2RECHARGE [#q3ed4f2c] +
-駆動方式の都合から100%のデューテーィ比で連続運転が出来ないため、100%で指令された場合の目減り分(Recharge band)の値。負荷やPWM周波数によって調整が必要なパラメータである。~ +
-調整の際はデューティー100%で運転を指令した状態で、本設定値を0から順に負荷の運転が安定するまで大きくして行く。最大でも20%以下で安定すると思われる。 +
- int UD3_SET_M2RECHARGE (uint8_t re); +
--パラメータ +
---uint8_t '''re''' +
-~0~100[%]を設定。100%-re が出力リミッタとして働く。 +
-~デフォルトは5%。 +
--戻り値 +
-~成功すると0 、パラメータエラーがあった場合は-1が返される。 +
--使用例 +
- // M2の最大PWM制限幅を5%に設定します +
- UD3_SET_M2RECHARGE (5); +
- +
-****UD3_SET_M2DRIVEMODE [#k9ab964c] +
-M2の駆動モードを設定する。 +
- UD3_SET_M2DRIVEMODE (mode); +
--パラメータ +
---uint8_t '''mode''' +
-~_UD_MOTOR_BRAKE (0:ブレーキモード)~ +
-_UD_MOTOR_DRIVE (1:ドライブモード) +
-~デフォルトは_UD_MOTOR_BRAKE。 +
--戻り値 +
-~成功すると0 、パラメータエラーがあった場合は-1が返される。 +
--使用例 +
- // M2をドライブモードにします +
- UD3_SET_M2DRIVEMODE (_UD_MOTOR_DRIVE); +
- +
-****UD3_SET_M2PWMDUTY [#k2c1cab9] +
-M2のPWMデューティー比を設定する。~ +
- int UD3_SET_M2PWMDUTY (int16_t duty); +
--パラメータ +
---int16_t '''duty''' +
-~デューティーを-1000~0~1000[‰]で指定。マイナス値は逆転を意味する。~ +
-0‰の場合はショートブレーキとなる。 +
-~デフォルトは0‰。 +
--戻り値 +
-~成功すると0 、パラメータエラーがあった場合は-1が返される。~ +
-±1000の範囲を越えて設定されている場合にも1が返されるが、リミッタで値はクリップされる。 +
--使用例 +
- // M2を20%のDUTYで動作させます。 +
- UD3_SET_M2PWMDUTY (200); +
- +
-****UD3_SET_MOTORREVRSE [#m604c98d] +
-M1/2の回転方向を反転させる。 +
- int UD3_SET_MOTORREVRSE (int8_t rev); +
--パラメータ +
---int8_t '''rev''' +
-以下のビットで各々反転を設定。 +
-~_M1_REV (0x1;M1反転)~ +
-_M2_REV (0x02:M2反転) +
-~デフォルトは0。 +
--戻り値 +
-~成功すると0 、パラメータエラーがあった場合は-1が返される。 +
--使用例 +
- // 両モータの回転を逆転します。 +
- UD3_SET_MOTORREVRSE (_M1_REV | _M2_REV); +
- +
-****UD3_SET_MOTORENABLE [#x441e3d8] +
-モータの駆動ゲート回路を活性/不活性化する。~ +
-なお、CN3からの電源供給がなされていない状態で活性化するとゲートドライバに過大な負荷がかかり破損する可能性がある。必ず電源が供給されたことを確認した上で本APIで活性化させる手順を踏むこと。 +
- int UD3_SET_MOTORENABLE (int8_t enb); +
--パラメータ +
---int8_t '''enbv''' +
-~0でモータドライバの機能を不活性化しモータをフリー状態にする。1でモータドライバの機能を活性化し各パラメータに応じて出力がなされる。 +
-~デフォルトは0。 +
--戻り値 +
-~成功すると0 、パラメータエラーがあった場合は-1が返される。 +
--使用例 +
- // モータ駆動回路を活性化する。 +
- UD3_SET_MOTORENABLE (1); +
- +
-****UD3_GET_MOTORENABLE [#t660991d] +
-モータの駆動ゲート回路の状態を取得する。 +
- bool UD3_GET_MOTORENABLE (void); +
--パラメータ +
-~なし +
--戻り値 +
-~bool  駆動ゲート回路の状態 +
-~true :ゲートON~ +
-false :ゲートOFF +
--使用例 +
- bool stat = UD3_GET_MOTORENABLE(); +
- +
-****UD3_SET_MOTORRAMP [#o63cc21d] +
-M1/M2共に指令デューティーに対して最終段は常時ランプ関数を介して出力がなされる。その際のミリ秒毎での増分を設定する。~ +
-指令値の急変に際し、モータや機構、電源への負荷を軽減する目的で使用する。 +
- int UD3_SET_MOTORRAMP (int8_t ramp); +
--パラメータ +
---int8_t '''ramp''' +
-~1ミリ秒あたりの増分を1~200‰の値で与える。~ +
-1を指定した場合、デューティー比を0‰の状態から1000‰へ変更すると1秒かけて0‰から1000‰へ直線的に変化する。また200を指定した場合、デューティー比を0‰の状態から1000‰へ変更すると5ミリ秒かけて0‰から1000‰へ直線的に変化する。 +
-~デフォルトは20。 +
--戻り値 +
-~成功すると0 、パラメータエラーがあった場合は-1が返される。 +
--使用例 +
- // 1ミリ秒毎の勾配を10‰に設定 +
- UD3_SET_MOTORRAMP (10); +
- +
-****UD3_SET_DUTY [#u0bc4a8b] +
-M1とM2へPWMデューティー比を同時に設定する。~ +
- int UD3_SET_DUTY (int16_t m1duty, int16_t m2duty); +
--パラメータ +
---int16_t '''m1duty''' +
-~M1用デューティーを-1000[‰]~0~1000[‰]で指定。~ +
---int16_t '''m2duty''' +
-~M2用デューティーを-1000[‰]~0~1000[‰]で指定。 +
--戻り値 +
-~成功すると0 、パラメータエラーがあった場合は-1が返される。~ +
--使用例 +
- // M1を30%,M2を20%のDUTYで動作させます。 +
- UD3_SET_DUTY (300, 200); +
- +
-***GPIOパルス入出力関連 [#o25124f6] +
-****UD3_SET_PWM8CLOCK [#g666594c] +
-PWM8のPWM出力及びPWM幅計測用ベースクロックを設定する。PWMは本クロックを基準に16bitカウンタとして機能する。~ +
-GPIO8を[[UD3_CFG_GPIO8>#u201f4af]]でGPIO_PWMに設定する必要がある。 +
- int UD3_SET_PWM8CLOCK (uint8_t clock); +
--パラメータ +
---uint8_t '''clock''' +
-~ベースクロックを0~4で選択。 +
-~_UD_PWM_CLOCK_24M  (0:24MHz)~ +
-_UD_PWM_CLOCK_6M    (1:6MHz)~ +
-_UD_PWM_CLOCK_1500K (2:1.5MHz)~ +
-_UD_PWM_CLOCK_375K  (3:375kHz)~ +
-_UD_PWM_CLOCK_46K  (4:46.875kHz) +
--戻り値 +
-~成功すると0 、パラメータエラーがあった場合は-1が返される。 +
--使用例 +
- // PWM8のベースクロック24Mに設定します。 +
- UD3_SET_PWM8CLOCK (_UD_PWM_CLOCK_24M); +
- +
-****UD3_SET_PWM8CYCLE [#pf67c2d8] +
-PWM8の周期を設定する。~ +
-GPIO8を[[UD3_CFG_GPIO8>#u201f4af]]でGPIO_PWMに設定する必要がある。 +
- int UD3_SET_PWM8CYCLE (uint16_t cycle); +
--パラメータ +
---uint16_t '''cycle''' +
-~周期を1~65535で設定。 +
--戻り値 +
-~成功すると0 、パラメータエラーがあった場合は-1が返される。~ +
--使用例 +
- // PWM8の周期を設定します。 +
- UD3_SET_PWM8CYCLE (5000); +
- +
-****UD3_SET_PWM8DUTY [#s1513f14] +
-PWM8のDUTYを設定する。~ +
-GPIO8を[[UD3_CFG_GPIO8>#u201f4af]]でGPIO_PWMに設定する必要がある。 +
- int UD3_SET_PWM8DUTY (uint16_t duty); +
--パラメータ +
---uint16_t '''duty''' +
-~デューティーを0~65535で設定。PWMはDUTY/CYCLEの比で出力される。 +
--戻り値 +
-~成功すると0 、パラメータエラーがあった場合は-1が返される。~ +
-CYCLEで設定された周期値を越えて設定されている場合に1が返され、CYCLE値でクリップされる。 +
--使用例 +
- // PWM8のDUTYを設定します。 +
- UD3_SET_PWM8DUTY (5000); +
- +
-****UD3_SET_PWM9CLOCK [#ae26f679] +
-PWM9のPWM出力及びPWM幅計測用ベースクロックを設定する。PWMは本クロックを基準に16bitカウンタとして機能する。~ +
-GPIO9を[[UD3_CFG_GPIO9>#u201f4af]]でGPIO_PWMに設定する必要がある。 +
- int UD3_SET_PWM9CLOCK (uint8_t clock); +
--パラメータ +
---uint8_t '''clock''' +
-~ベースクロックを0~4で選択。 +
-~_UD_PWM_CLOCK_24M  (0:24MHz)~ +
-_UD_PWM_CLOCK_6M    (1:6MHz)~ +
-_UD_PWM_CLOCK_1500K (2:1.5MHz)~ +
-_UD_PWM_CLOCK_375K  (3:375kHz)~ +
-_UD_PWM_CLOCK_46K  (4:46.875kHz) +
--戻り値 +
-~成功すると0 、パラメータエラーがあった場合は-1が返される。 +
--使用例 +
- // PWM8のベースクロック24Mに設定します。 +
- UD3_SET_PWM9CLOCK (_UD_PWM_CLOCK_24M); +
- +
-****UD3_SET_PWM9CYCLE [#sae67585] +
-PWM9の周期を設定する。~ +
-GPIO9を[[UD3_CFG_GPIO9>#j90d8ac4]]でGPIO_PWMに設定する必要がある。 +
- int UD3_SET_PWM9CYCLE (uint16_t cycle); +
--パラメータ +
---uint16_t '''cycle''' +
-~周期を1~65535で設定。 +
--戻り値 +
-~成功すると0 、パラメータエラーがあった場合は-1が返される。~ +
--使用例 +
- // PWM9の周期を設定します。 +
- UD3_SET_PWM9CYCLE (5000); +
- +
-****UD3_SET_PWM9DUTY [#pae41f19] +
-PWM9のDUTYを設定する。~ +
-GPIO9を[[UD3_CFG_GPIO9>#j90d8ac4]]でGPIO_PWMに設定する必要がある。 +
- int UD3_SET_PWM9DUTY (uint16_ duty); +
--パラメータ +
---uint16_t '''duty''' +
-~デューティーを0~65535で設定。PWMはDUTY/CYCLEの比で出力される。 +
--戻り値 +
-~成功すると0 、パラメータエラーがあった場合は-1が返される。~ +
-CYCLEで設定された周期値を越えて設定されている場合に1が返され、CYCLE値でクリップされる。 +
--使用例 +
- // PWM9のDUTYを設定します。 +
- UD3_SET_PWM9DUTY (5000); +
- +
-****UD3_SET_PWM10CLOCK [#cd6005d8] +
-PWM10のPWM出力及びPWM幅計測用ベースクロックを設定する。PWMは本クロックを基準に16bitカウンタとして機能する。~ +
-GPIO10を[[UD3_CFG_GPIO10>#d2dd2f39]]でGPIO_PWMに設定する必要がある。 +
- int UD3_SET_PWM10CLOCK (uint8_t clock); +
--パラメータ +
---uint8_t '''clock''' +
-~ベースクロックを0~4で選択。 +
-~_UD_PWM_CLOCK_24M  (0:24MHz)~ +
-_UD_PWM_CLOCK_6M    (1:6MHz)~ +
-_UD_PWM_CLOCK_1500K (2:1.5MHz)~ +
-_UD_PWM_CLOCK_375K  (3:375kHz)~ +
-_UD_PWM_CLOCK_46K  (4:46.875kHz) +
--戻り値 +
-~成功すると0 、パラメータエラーがあった場合は-1が返される。 +
--使用例 +
- // PWM10のベースクロック24Mに設定します。 +
- UD3_SET_PWM10CLOCK (_UD_PWM_CLOCK_24M); +
- +
-****UD3_SET_PWM10CYCLE [#nefca4e0] +
-PWM10の周期を設定する。~ +
-GPIO10を[[UD3_CFG_GPIO10>#d2dd2f39]]でGPIO_PWMに設定する必要がある。 +
- int UD3_SET_PWM10CYCLE (uint16_t cycle); +
--パラメータ +
---uint16_t '''cycle''' +
-~周期を1~65535で設定。 +
--戻り値 +
-~成功すると0 、パラメータエラーがあった場合は-1が返される。~ +
--使用例 +
- // PWM10の周期を設定します。 +
- UD3_SET_PWM10CYCLE (5000); +
- +
-****UD3_SET_PWM10DUTY [#a36b0abc] +
-PWM10のDUTYを設定する。~ +
-GPIO10を[[UD3_CFG_GPIO10>#d2dd2f39]]でGPIO_PWMに設定する必要がある。 +
- int UD3_SET_PWM10DUTY (uint16_t duty); +
--パラメータ +
---uint16_t '''duty''' +
-~デューティーを0~65535で設定。PWMはDUTY/CYCLEの比で出力される。 +
--戻り値 +
-~成功すると0 、パラメータエラーがあった場合は-1が返される。~ +
-CYCLEで設定された周期値を越えて設定されている場合に1が返され、CYCLE値でクリップされる。 +
--使用例 +
- // PWM10のDUTYを設定します。 +
- UD3_SET_PWM10DUTY (5000); +
- +
-****UD3_GET_PWM8DUTY [#td3856a0] +
-PWM8のキャプチャしたパルス幅を取得する。~ +
-GPIO8を[[UD3_CFG_GPIO8>#u201f4af]]でGPIO_PWM_CAPに設定する必要がある。 +
- uint16_t UD3_GET_PWM8DUTY (void); +
--パラメータ +
-~なし +
--戻り値 +
-~uint16_t パルス幅 +
--使用例 +
- // PWM8のパルス幅を取得します。 +
- pulse = UD3_GET_PWM8DUTY (); +
- +
-****UD3_GET_PWM9DUTY [#x328a466] +
-PWM9のキャプチャしたパルス幅を取得する。~ +
-GPIO9を[[UD3_CFG_GPIO9>#j90d8ac4]]でGPIO_PWM_CAPに設定する必要がある。 +
- uint16_t UD3_GET_PWM9DUTY (void); +
--パラメータ +
-~なし +
--戻り値 +
-~uint16_t パルス幅 +
--使用例 +
- // PWM9のパルス幅を取得します。 +
- pulse = UD3_GET_PWM9DUTY (); +
- +
-****UD3_GET_PWM10DUTY [#kf3fddcb] +
-PWM10のキャプチャしたパルス幅を取得する。~ +
-GPIO10を[[UD3_CFG_GPIO10>#d2dd2f39]]でGPIO_PWM_CAPに設定する必要がある。 +
- uint16_t UD3_GET_PWM10DUTY (void); +
--パラメータ +
-~なし +
--戻り値 +
-~uint16_t パルス幅 +
--使用例 +
- // PWM10のパルス幅を取得します。 +
- pulse = UD3_GET_PWM10DUTY (); +
- +
-****UD3_MEASURE_STICKPOS [#w3c149c4] +
-ラジコン用プロポのスティック位置に不感帯を設けるための調整を行う。調整値は不揮発メモリに保存され、以後[[UD3_GET_RCPOS>#q1f997f7]]や[[UD3_RC_MOTOR>#rf1dfc65]]で内部的に使用される。~ +
-不感帯はスティックの中立及び最大・最少位置にそれぞれ設けられ、中立位置と最大・最少位置を正確に計測した後に反映される。スティックの位置と不感帯、デューティーとして指令される値の相関は以下の図に示す。~ +
-#ref(ud3_stick2duty.png,100%) +
-予め[[UD3_CFG_GPIO8>#u201f4af]],[[UD3_CFG_GP​IO9>#j90d8ac4]],[[UD3_CFG_GPIO10>#d2dd2f​39]]でGPIO_PWM_CAPに設定する必要がある。 +
-~本APIが実行されると以下の手順で調整操作を行う。 +
-+UD3_MEASURE_STICKPOSがコールされるとピロリと音が鳴り、計測モードに遷移した事を知らせる。 +
-+プロポのスティックから手を離した状態(中立位置)にしたらPB1を押して放す。するとLED1が点滅し始め中立位置の計測が開始される。 +
-+中立位置を維持した状態で数秒が経過したら再度PB1を押してから放すと中立位置の計測が終了しLED1が消灯する。~ +
-+再度PB1を押して放すとLED1が点滅を始め、ブザーが鳴り始める。この間に諸々が正常であればプロポのスティックをそれぞれ上下ないし左右の端まで何度か移動させていると、ランダムだったブザーの音程がスティックの角度に連動して変化するようになる。~ +
-+スティックの角度に応じてなめらかに音階が変化するようになったらPB1を押して放すと上下限の計測が終了しLED1が消灯する。~ +
-+その後「明るいメロディー」が鳴ったら調整が成功した合図で、調整値が不揮発メモリに保存される。「暗いメロディー」が鳴ると失敗となるが、いずれの状態であっても調整処理は終了する。~ +
-なお、成否判定はGPIO8とGPIO9の入力信号のみを対象としている。 +
- +
- bool UD3_MEASURE_STICKPOS (uint8_t pos1, uint8_t pos2); +
--パラメータ +
---uint8_t '''pos1''' +
-~スティック中立時の不感帯幅を0~50[%]で設定。 +
---uint8_t '''pos2''' +
-~スティック両端時の不感帯幅を0~50[%]で設定。 +
--戻り値 +
-~bool +
-~true 調整が成功した場合に返される。~ +
-false 調整が失敗した場合に返される。 +
--使用例 +
- include <ud3.h> +
- +
- UD3_INITIALIZE () { +
-   // GPIO8,9をパルス幅計測モードに +
-   UD3_CFG_GPIO8 (GPIO_PWM_CAP); +
-   UD3_CFG_GPIO9 (GPIO_PWM_CAP); +
-   // モータの駆動モード設定 +
-   UD3_SET_M1DRIVEMODE (_UD_MOTOR_DRIVE); +
-   UD3_SET_M2DRIVEMODE (_UD_MOTOR_DRIVE); +
- +
-   UD3_ACTIVE_TASK (1); +
- } +
- +
- UD3_TASK1 () { +
-   // プロポの調整 +
-   if (UD3_MEASURE_STICKPOS (10, 10)) { +
-     // モータ駆動許可 +
-     UD3_SET_MOTORENABLE (true); +
-     while (1) { +
-       // 調整値を元にモータを駆動 +
-       // M1にGPIO8、M2にGPIO9を割り当てている +
-       UD3_RC_MOTOR (0, 1); +
-     } +
-   } +
- } +
- +
-****UD3_GET_RCPOS [#q1f997f7] +
-指定したチャネルのラジコンプロポのスティックの値を取得する。~ +
-この取得した値は、[[UD3_MEASURE_STICKPOS>#w3c149c4]]で調整された値となる。~ +
-予め[[UD3_CFG_GPIO8>#u201f4af]],[[UD3_CFG_GP​IO9>#j90d8ac4]],[[UD3_CFG_GPIO10>#d2dd2f​39]]でGPIO_PWM_CAPに設定する必要がある。 +
- int16_t UD3_GET_RCPOS (uint8_t ch); +
--パラメータ +
---uint8_t '''ch''' +
-~チャネルを指定する。 +
-~0: PWM8(GPIO8)~ +
-1: PWM9(GPIO9)~ +
-2: PWM10(GPIO10) +
--戻り値 +
-~int16_t ラジコンプロポのスティックの位置 +
--使用例 +
- // PWM8に接続されているラジコンプロポのスティックの位置を取得します。 +
- pos = UD3_GET_RCPOS (0); +
- +
-****UD3_RC_MOTOR [#rf1dfc65] +
-UD3_MEASURE_STICKPOSにて調整されたラジコン用プロポの受信器から出力されるパルスを元にM1とM2の駆動パワーに割り当てる。 +
- void UD3_RC_MOTOR (uint8_t rc1, uint8_trc2); +
--パラメータ +
---uint8_t '''rc1''' +
-~M1に割り当てるチャネル +
-~0: PWM8(GPIO8)~ +
-1: PWM9(GPIO9)~ +
-2: PWM10(GPIO10) +
---uint8_t '''rc2''' +
-~M2に割り当てるチャネル +
-~0: PWM8(GPIO8)~ +
-1: PWM9(GPIO9)~ +
-2: PWM10(GPIO10) +
--戻り値 +
-~なし +
--使用例 +
- include <ud3.h> +
- +
- UD3_INITIALIZE () { +
-   // GPIO8,9をパルス幅計測モードに +
-   UD3_CFG_GPIO8 (GPIO_PWM_CAP); +
-   UD3_CFG_GPIO9 (GPIO_PWM_CAP); +
-   // モータの駆動モード設定 +
-   UD3_SET_M1DRIVEMODE (_UD_MOTOR_DRIVE); +
-   UD3_SET_M2DRIVEMODE (_UD_MOTOR_DRIVE); +
- +
-   // モータ駆動許可 +
-   UD3_SET_MOTORENABLE (true); +
- +
-   UD3_ACTIVE_TASK (1); +
- } +
- +
- UD3_TASK1 () { +
-   // プロポの調整 +
-   UD3_MEASURE_STICKPOS (10, 10); +
-   while (1) { +
-     // 調整値を元にGPIO8をM1,GPIO9をM2に割り当てて運転 +
-     UD3_RC_MOTOR (0, 1); +
-   } +
-  } +
- +
-***SIXAXIS関連 [#tc0f292d] +
-BluetoothのモードがSIXAXISで、SIXAXISないしDUALSHOCK3がワイヤレス接続された時に取得出来る情報です。デジタルボタンの押力の取得及び振動モータの運転は出来ません。 +
- +
-****UD3_GET_PSDIGITAL1 [#na9afa77] +
-SIXAXISのグループ1に属するボタン情報を取得する。 +
- uint8_t UD3_GET_PSDIGITAL1(void); +
--パラメータ +
-~なし +
--戻り値 +
-~uint8_t グループ1のボタン情報 押下状態で該当ビットが1 +
-|=BIT| bit7 | bit6 | bit5 | bit4 | bit3 | bit2 | bit1 | bit0 | +
-|=ボタン| ← | ↓ | → | ↑ | START | ANALOG R&br;PUSH | ANALOG L&br;PUSH | SELECT | +
--使用例 +
- uint8_t btg1 = UD3_GET_PSDIGITAL1 (); +
- +
-****UD3_GET_PSDIGITAL2 [#j87bd158] +
-SIXAXISのグループ2に属するボタン情報を取得する。 +
- uint8_t UD3_GET_PSDIGITAL2(void); +
--パラメータ +
-~なし +
--戻り値 +
-~uint8_t グループ2のボタン情報 押下状態で該当ビットが1 +
-|=BIT| bit7 | bit6 | bit5 | bit4 | bit3 | bit2 | bit1 | bit0 | +
-|=ボタン| □ | × | ○ | △ | R1 | L1 | R2 | L2 | +
--使用例 +
- uint8_t btg2 = UD3_GET_PSDIGITAL2 (); +
- +
-****UD3_GET_PSDIGITAL3 [#uee03cdb] +
-SIXAXISのグループ3に属するボタン情報を取得する。 +
- uint8_t UD3_GET_PSDIGITAL3(void); +
--パラメータ +
-~なし +
--戻り値 +
-~uint8_t グループ3のボタン情報 押下状態で該当ビットが1 +
-|=BIT| bit7..1 | bit0 | +
-|=ボタン| - |  PS | +
--使用例 +
- uint8_t btg3 = UD3_GET_PSDIGITAL3 (); +
- +
-****UD3_GET_PSLX [#i62abd1b] +
-SIXAXISの左側アナログスティックのX軸情報を取得する。 +
- uint8_t UD3_GET_PSLX(void); +
--パラメータ +
-~なし +
--戻り値 +
-~uint8_t 左側アナログスティックの位置が左端で0、右端で255を返す。 +
--使用例 +
- uint8_t lx = UD3_GET_PSLX (); +
- +
-****UD3_GET_PSLY [#xf86f9e4] +
-SIXAXISの左側アナログスティックのY軸情報を取得する。 +
- uint8_t UD3_GET_PSLY(void); +
--パラメータ +
-~なし +
--戻り値 +
-~uint8_t 左側アナログスティックの位置が上端で0、下端で255を返す。 +
--使用例 +
- uint8_t ly = UD3_GET_PSLY (); +
- +
-****UD3_GET_PSRX [#f16c0c11] +
-SIXAXISの右側アナログスティックのX軸情報を取得する。 +
- uint8_t UD3_GET_PSRX(void); +
--パラメータ +
-~なし +
--戻り値 +
-~uint8_t 右側アナログスティックの位置が左端で0、右端で255を返す。 +
--使用例 +
- uint8_t rx = UD3_GET_PSRX (); +
- +
-****UD3_GET_PSRY [#f51902ac] +
-SIXAXISの右側アナログスティックのY軸情報を取得する。 +
- uint8_t UD3_GET_PSRY(void); +
--パラメータ +
-~なし +
--戻り値 +
-~uint8_t 右側アナログスティックの位置が上端で0、下端で255を返す。 +
--使用例 +
- uint8_t ry = UD3_GET_PSRY (); +
- +
-****UD3_GET_PSL2 [#yda6cc23] +
-SIXAXISのL2の情報を取得する。 +
- uint8_t UD3_GET_PSL2(void); +
--パラメータ +
-~なし +
--戻り値 +
-~uint8_t L2が解放で0、最大押下で255を返す。 +
--使用例 +
- uint8_t l2 = UD3_GET_PSL2 (); +
- +
-****UD3_GET_PSR2 [#f71afcd6] +
-SIXAXISのR2の情報を取得する。 +
- uint8_t UD3_GET_PSR2(void); +
--パラメータ +
-~なし +
--戻り値 +
-~uint8_t R2が解放で0、最大押下で255を返す。 +
--使用例 +
- uint8_t r2 = UD3_GET_PSR2 (); +
- +
-****UD3_GET_GX [#wa4f160b] +
-SIXAXISのX軸加速度を取得する。 +
- uint16_t UD3_GET_GX(void); +
--パラメータ +
-~なし +
--戻り値 +
-~uint16_t 0~1023の範囲でX軸の加速度を返す。 +
--使用例 +
- uint16_t gx = UD3_GET_GX (); +
- +
-****UD3_GET_GY [#m9f9751e] +
-SIXAXISのY軸加速度を取得する。 +
- uint16_t UD3_GET_GX(void); +
--パラメータ +
-~なし +
--戻り値 +
-~uint16_t 0~1023の範囲でY軸の加速度を返す。 +
--使用例 +
- uint16_t gy = UD3_GET_GY (); +
- +
-****UD3_GET_GZ [#i5505dd1] +
-SIXAXISのZ軸加速度を取得する。 +
- uint16_t UD3_GET_GZ(void); +
--パラメータ +
-~なし +
--戻り値 +
-~uint16_t 0~1023の範囲でZ軸の加速度を返す。 +
--使用例 +
- uint16_t gz = UD3_GET_GZ (); +
- +
-****UD3_GET_GYRO [#pcb0b72f] +
-SIXAXISの角加速度を取得する。 +
- uint16_t UD3_GET_GYRO(void); +
--パラメータ +
-~なし +
--戻り値 +
-~uint16_t 0~1023の範囲で角加速度を返す。 +
--使用例 +
- uint16_t gyro = UD3_GET_GYRO (); +
- +
-***コンソール関連 [#d0d4a9b4] +
-コンソールとして使用出来るUSB・Bluetooth・RS485のいずれかを介したシリアル通信を行います。デフォルトのコンソールはUSBとなっていますが、いすれかのI/Fからの受信が発生する事でデフォルトコンソールが切り替わります。~ +
-なお、USB・Bluetooth・RS485のI/FはDynamixelパケットによる通信に使用されるため、コンソールとしてのみ使用するには[[UD3_SET_DXPACKETENABLE>#pd1e307a]]でDynamixelパケット処理を停止しておく必要があります。その場合はDynamixelパケット処理が行われなくなります。~ +
-また、コンソールへの送信にはシリアル通信の都合からそれ相応の時間を要します。高速で動作させているタスクの中で高い頻度で送信を行うと処理時間が長くなります。 +
- +
-****UD3_PUTC [#w4f6854d] +
-コンソールに1文字送信する。 +
- void UD3_PUTC (char c); +
--パラメータ +
---char '''c''' +
-~送信文字(1バイト)を指定 +
--戻り値 +
-~なし +
--使用例 +
- UD3_PUTC('A'); +
- +
-****UD3_GETC [#ibd505dc] +
-コンソールから1文字取得する。受信バッファが空の場合は最低1バイト受信するまで返らない。 +
- char UD3_GETC (void); +
--パラメータ +
-~なし +
--戻り値 +
-~char 受信文字 +
--使用例 +
- while (UD3_RXBUFF()) UD3_PUTC(UD3_GETC()); +
- +
-****UD3_PUTS [#qc95c51a] +
-コンソールへ文字列を送信する。 +
- void UD3_PUTS (char *s); +
--パラメータ +
---char '''*s''' +
-~送信文字列(NULLターミネーション)のポインタを指定 +
--戻り値 +
-~なし +
--使用例 +
- UD3_PUTS("HELLO!\n"); +
- +
-****UD3_PUTSB [#e16d8efa] +
-コンソールへ指定バイト数のデータを送信する。 +
- void UD3_PUTSB (char *s, int len); +
--パラメータ +
---char '''*s''' +
-~送信データのポインタを指定 +
---int '''len''' +
-~送信バイト数を指定 +
--戻り値 +
-~なし +
--使用例 +
- char s[]={'A','B','C','D'}; +
- UD3_PUTS(s, 4); +
- +
-****UD3_RXBUFF [#w6cb53ad] +
-コンソールから受信されたバイト数を返す。 +
- int UD3_RXBUFF (void); +
--パラメータ +
-~なし +
--戻り値 +
-~int 受信バイト数。 +
--使用例 +
- while (UD3_RXBUFF()) UD3_PUTC(UD3_GETC()); +
- +
-****UD3_PRINTF [#xd168578] +
-コンソールへ書式化文字列を送信する。 +
- int UD3_PRINTF (const char *format, ...) { +
--パラメータ +
---const char '''*format''' +
-~書式文字列 +
---... +
-~可変個引数 +
--戻り値 +
-~int 送信バイト数。 +
--使用例 +
- int i ; +
- while UD3_PRINTF("HELLO! %d\n", i++); +
- +
-**サンプルプログラム [#kf8170aa] +
-APIを使用したいくつかのサンプルプログラムを用意しました。以下よりダウンロードして解凍した上でご利用ください。 +
-#ref(UD3_SMPL1.2.zip) +
-詳細はコメントおよびAPIのドキュメントを参考に読み解いてください。 +
--更新履歴+
-2010/9/25 Ver.1.2~+
コメントを追加~ コメントを追加~
DUALSHOCK3を使用するサンプル追加~ DUALSHOCK3を使用するサンプル追加~


トップ   差分 リロード印刷に適した表示   全ページ一覧 単語検索 最新ページの一覧   最新ページのRSS 1.0 最新ページのRSS 2.0 最新ページのRSS Atom