• ソース を表示
  • UD3 は削除されています。
1: 2010-09-09 (木) 01:24:39 takaboo ソース
Line 1: Line 1:
 +#norelated
 +#contents
 +**概要 [#x0a22961]
 +本製品は2個のDCモータ用ブリッジ回路を搭載したインテリジェンスモータコントローラです。~
 +モータドライバの他に11本のデジタル入出端子を備え、そのうち8本はアナログ入力を兼用します。
 +**仕様 [#r881cac5]
 +***同梱内容 [#m79dd66b]
 +|型式 |数量 |備考 |
 +|UD3PRE |1 |E093 |
 +|USBケーブル |1 |150cm |
 +|コネクタキット |1 |CPU・センサ用&br;モータ用 |
 +|[[BTE003]] |2 |おまけ |
 +
 +***基本仕様 [#pb0bf34c]
 +|品番 |BTA021 |
 +|リビジョン |E093 |
 +|動作温度範囲 |0~+50℃ |
 +|寸法 |外形:53x78mm (±1mm)&br;取り付け穴:45.7x66.7mm 4-φ2.2 |
 +|厚み |突起物を含み25mm以下 |
 +|重量 |70g以下 |
 +|CPU |AT91SAM7S256もしくはAT91SAM7S512 (48MHz ARM7TDMI) |
 +|CPU内蔵メモリ |フラッシュROM:256kもしくは512kbyte(ブートローダ領域を含む)&br;RAM:64kbyte |
 +|モータ電源  |入力: DC0~DC24V (絶対最大定格電圧:75V)&br;出力: UD3定格20A (FET 定格電流:240A パルス電流:960A) |
 +|PWM周波数 |1~200kHz(1kHz単位で任意) |
 +|CPU及びセンサ電源 |入力: DC8~24V (絶対最大定格電圧:DC35V)&br;出力: DC5V 7A(最大) |
 +|I/F |入力用プッシュスイッチx2&br;入力用4bitロータリーDIPスイッチx1&br;リセット用プッシュスイッチx1 |
 +|コネクタ |ホストPC間: USB (miniB)x1&brGPIO: 2.5mmピッチ3ピンオスヘッダ(信号・5V・GND)x11&br;モータ用電源:近藤科学 ストロングゴールドコネクターx1&br;モータ用: 近藤科学 レーシングコネクターx2&br;マイコン・センサ用電源:JST B2B-XH-Ax1 |
 +|GPIO機能 |GPIOは全部で11ch装備し以下の機能を割当可能(排他含)&br;汎用入力:11ch(プルアップON/OFF機能あり)&br;汎用出力:11ch(オープンドレイン出力機能あり)&br;アナログ入力:8ch(分解能10bit)&br;パルス幅計測:3ch(分解能16bit 基準クロックは47k~24MHzの中で5段階)&br;PWM出力:3ch(分解能16bit 基準クロックは47k~24MHzの中で5段階) |
 +|環境配慮 |Rohs未対応 |
 +
 +***内部簡略ブロック [#y6e0b9c7]
 +#ref(ud3pre_block.png,100%)
 +***外形・端子配置 [#lc74b433]
 +#ref(ud3pre_layout.png,100%)
 +RIGHT:(単位:mm)
 +
 +以下特に断りのない限り本図のレイアウトを正として端子番号やそれらの方向、位置等を示す。
 +
 +****CN1 [#c95ac81b]
 +|CENTER:BGCOLOR(red):||c
 +|  :idea:|電源の逆接続は電源回路の即時破壊となる。|
 +-5Vロジック・3.3Vロジック・12Vゲートドライバ電源供給用
 +-図左より順に ①:-(GND), ②:+(センサCPU電源) の端子割り当て
 +-入力絶対最大定格:DC35V
 +-入力定格電圧:DC8~24V(リプルなき事)
 +-②ピン(GND)はボード内全て(ロジックおよびモータ電源)において共通
 +-本端子から供給される電源によりボード内で使用されるDC5V電源とDC3.3Vが作られ、更にJ1~J12端子からの5V出力がなされる
 +-CN3とは別の電源から供給する事
 +-J1~J12及びボード内で使用されるDC5V電源の総電流が7Aを超えてはならない。
 +
 +****CN2 [#q01a8c34]
 +-USB Mini-B
 +-PC(ホスト)と本ボード上のCPU(デバイス)間のUSBによる通信用
 +-USBバスパワーによるロジック電源供給用(CN1からの電源が優先)
 +-USBバスパワーからはJ1~J12及びゲートドライバへの電源供給は行われない
 +
 +****CN3 [#c0d4bab9]
 +|CENTER:BGCOLOR(red):||c
 +|  :idea:|電源の逆接続はブリッジ回路の即時破壊となる。&br;&br;バッテリを取り外した直後は搭載されたコンデンサに電荷が残っており、ショートすると放電する等の危険性がある。|
 +-Hブリッジ(モータ)電源供給用
 +-図上より順に ①:+(モータ電源), ②:-(GND) の端子割り当て
 +-入力定格電圧:DC0~24V (DC16V以下を推奨)
 +-入力絶対最大定格:DCV75V
 +-②ピン(GND)はボード内全て(ロジックおよびモータ電源)において共通
 +-本端子から供給される電源がHブリッジ回路に供給されM1ないしM2端子を介して負荷へと供給される
 +-CN1とは別の電源から供給する事
 +
 +****M1 [#p68e0f67]
 +-負荷接続用端子
 +-図左より順に ①:M1+, ②:M1+, ③:M1-, ④:M1-
 +-①と②端子(M1+)および③と④端子(M1-)は各々ボード内で接続されている
 +-DCモータ等を接続した場合の回転方向はモータに依存するが、ソフト的にプラスのデューティを指定するとM1+側からプラスの出力が得られる
 +
 +****M2 [#s05e2d77]
 +-負荷接続用端子
 +-図左より順に ①:M2+, ②:M2+, ③:M2-, ④:M2-
 +-①と②端子(M2+)および③と④端子(M2-)は各々ボード内で接続されている
 +-DCモータ等を接続した場合の回転方向はモータに依存するが、ソフト的にプラスのデューティを指定するとM2+側からプラスの出力が得られる
 +
 +****PB1(プッシュボタン) [#j5e009fe]
 +-ブートローダおよびアプリケーションにて使用
 +
 +****PB2(プッシュボタン) [#y59d09cb]
 +-ブートローダおよびアプリケーションにて使用
 +
 +****PB3(プッシュボタン) [#u237602b]
 +-押下でCPUの強制リセット
 +
 +****DIP1(ロータリーディップスイッチ) [#r4a636d8]
 +-アプリケーションにて使用
 +-4bit(16段階)
 +
 +****LED1 [#g2b739d3]
 +-橙色
 +-ブートローダ内でコンソール入力があるとフラッシュ
 +-アプリケーションにてプログラマブルに点灯・消灯
 +
 +****LED2 [#uca490ef]
 +-赤色
 +-CN1から電源を供給した後、ボード内で5V電源が供給開始されると点灯
 +
 +****J1~J8 [#y6c5f6b8]
 +-図左より順に ①:SIG, ②:5V出力, ③:GND の端子割り当て
 +-J1~J8の各①ピン(SIG端子)にGPIO0~GPIO7が相当
 +-①ピン(SIG端子)は5V入力トレラント対応~
 +IEC61000-4-2 level4のESD保護
 +-②ピン(5V出力)はJ0~J4とJ5~J8の2グループで共通で、各々4Aトリップのリセッタブルヒューズを装備
 +-③ピン(GND)はボード内全て(ロジックおよびモータ電源)において共通
 +
 +****J9~J11 [#mcb1b14c]
 +-図左より順に ①:SIG, ②:5V出力, ③:GND の端子割り当て
 +-J9~J11の各①ピン(SIG端子)にGPIO8~GPIO10が相当
 +-①ピン(SIG端子)は5V入力トレラント対応~
 +IEC61000-4-2 level4のESD保護
 +-②ピン(5V出力)はJ9~J12共通で4Aトリップのリセッタブルヒューズを装備
 +-③ピン(GND)はボード内全て(ロジックおよびモータ電源)において共通
 +
 +****J12 [#u979e189]
 +|CENTER:BGCOLOR(red):||c
 +|  :idea:|本機能によるシャットダウンの使用を禁止し、必ずオープン状態で使用の事。出荷分はピンヘッダをカット済み。|
 +-図左より順に ①:SIG, ②:5V出力, ③:GND の端子割り当て
 +-①ピン(SIG端子)と③ピン(GND)を短絡すると5V用DCDCコンバータがシャットダウン(ボード内の5V・3.3V・12Vの電源がOFFになる)し消費電流が0.3mA以下に減少する~
 +なおUSB(CN2)からのバスパワーは本端子の影響を受けないため、シャットダウン中でもCPUのみ活性化する
 +-シャットダウンさせない場合は①ピン(SIG端子)をオープンにしておく事
 +
 +**各機能の詳細 [#db9530a6]
 +***電源の印加順序 [#l7a7e35f]
 +CN1とCN2の電源には印加順序があります。誤動作や破損を防ぐため、以下の以下の順序に従ってください。なお、CN2から供給されるPCからのUSBバスパワーは本手順に影響しません。
 +~&color(red){電源ON};
 ++CN1にCPU及びセンサ用電源を接続しLED2の点灯を確認
 ++CN3にモータ用電源を接続
 +
 +~&color(red){電源OFF};
 ++負荷を駆動していない状態でCN3からモータ用電源を切断
 ++CN1からマイコン用電源を切断
 +
 +|CENTER:BGCOLOR(red):||c
 +|  :idea:|本手順に従わない場合は回路の誤動作による焼損の可能性がある。|
 +
 +***CPU電源 [#c08ff775]
 +CPU電源の入力方法は3つあり、各々目的が異なります。
 +-CN1~
 +外部の電源装置からCN1に電源を接続すると、モータを除く本ボード上の機能全てが活性化し、LED2が点灯します。J12に入力される信号によりON/OFFが可能です。~
 +ユーザプログラムが書き込まれていれば自動的に実行が開始されます。
 +-CN2(PCからのUSBバスパワー)~
 +電源が入ったPCとUSBケーブルで接続すると同時に本ボード上のマイコン・RS485・無線機に電源供給され、J1~J12への電源供給されず、LED2は点灯しません。J12とは連動せず電源供給が常時行われます。
 +ユーザプログラムが書き込まれていれば自動的に実行が開始されます。
 +-CN1とCN2両方~
 +電源電圧が高い方が優先される回路となっています。両社を接続したとしても大抵の場合はCN1からの電源が優先されることになります。~
 +ユーザプログラムが書き込まれていれば自動的に実行が開始されます。
 +
 +***USB [#f213387d]
 +PCのUSBバスパワーでボード内の電源供給を行う他に、PCとマイコンとの有線による通信手段を提供します。~
 +PCとUSBケーブルで接続し、予め書き込まれたブートローダのコマンドモードが起動すると、PCからは増設シリアルポートとして見えます。
 +
 +***ブートローダ [#ueb4c356]
 +USBないしBluetooth経由で本装置を操作するための専用プログラムが予め搭載されており、ユーザプログラムの転送やBluetoothの設定等をシリアルターミナル経由で行う事が出来ます。~
 +SIMPLE TERMで該当のポートを開き、ブートローダのコマンドモードに入ると以下のメッセージ及びプロンプトが表示されます。
 + --< UDIII Ver.1.0 by BestTechnology >--
 + >
 +この状態で使用できるコマンドは'?'を入力すると表示されます。
 + >?
 + --< UDIII Ver.1.0 by BestTechnology >--
 +  [w]:UPLOAD [g]:BOOT [i]:FLASH INFO [e]:ERASE [b]:BLUETOOTH
 + >
 +-w (UPLOAD)~
 +UD3用にコンパイルされたユーザプログラムをフラッシュROMに転送するモードです。ダウンロードして実行出来るファイルは、GCC Developer LiteにてUD3向けにコンパイルされたバイナリファイルのみです。
 +-g (BOOT)~
 +フラッシュROMに転送されたユーザプログラムへ実行を遷移します。ユーザプログラムエリアが消去されていれば実行されません。
 +-i (FLASH INFO)~
 +ユーザプログラム用フラッシュROMの状態を表示します。
 +-e (ERASE)~
 +ブートローダ本体を除くユーザプログラムエリアに書き込まれたデータを完全消去します。消去したデータは復活させる事が出来ません。
 +-b (BLUETOOTH)~
 +Bluetoothの設定モードに遷移します。Bluetooth経由でブートローダのコンソールにアクセスしている場合は設定出来ません。USBケーブルでPCと接続された状態でのみBluetoothの設定変更が出来ます。
 +
 +なお、ユーザプログラムが書き込まれている場合は、電源投入直後にユーザプログラムが実行されるため、ブートローダのコマンドモードにはなりません。ユーザプログラムの転送や消去といった操作を行う場合は、以下の手順に従ってください。
 ++UD3にUSBないし外部電源を接続し電源を入れる
 ++PB1とPB2を押しっぱなしにする
 ++その状態のままPB3を1秒程度押してCPUをリセットする
 ++ブートローダのコマンドモードに入ると「ピロッ」という起動音とLED1が一度フラッシュするので、押していたPB1とPB2を離す。
 ++SIMPLE TERMで該当のCOMポートを開けば、コマンドモードの操作が可能になる。
 +
 +**開発環境 [#v1eb2eaa]
 +
 +***GCC Developer Lite [#v57a2534]
 +GCC Developer Liteの詳細については[[こちら>GCC Developer Lite]]。~
 +コンポーネントの選択中にフルインストールないし「ユニバーサルドライバⅢ(AT91SAM7S)でのみ使用)」を選択する事で必要なコンポーネントが自動的にインストールされます。~
 +#ref(GDL_UD3_Select.png)
 +UD3で使用される主要なコンポーネントを簡単に紹介します。
 +-''[[GCC Developer Lite>GCC Developer Lite#GCCDevL]]''
 +~ソースプログラムを編集するためのテキストエディタとその他のツールを起動するためのランチャ機能を有する。
 +-''[[SIMPLE TERM>GCC Developer Lite#STERM]]''
 +~汎用シリアルターミナル。簡易的なTLENETクライアントとしても機能する。~
 +USB等で提供されるCOMポートの動的な検出と、COMポートを使用する弊社ツールとの排他制御機能を持つ。
 +-''ARMGCC''
 +~ARMコア向けC/C++言語向けのコンパイラ。出来る限り最新のパッチを適用しているため、時に互換性を失う。
 +-''デバイスドライバ''
 +~弊社提供のAT91SAM7シリーズ向けUSB CDCエミュレーションドライバ。
 +-''ターゲットファイル''
 +~マイコンの内蔵ペリフェラルを定義したヘッダファイルやUARTを簡便に使うためのAPI、USBをシリアルポートとして使用するためのAPI、GDBにてデバッグする際に使用する初期化ファイル、シリーズ毎に異なるメモリマップを定義したリンカスクリプトファイル、スタートアップルーチンを含む。基本的にコンパイル済みライブラリとしてソースとリンクして使用する。
 +
 +****ターゲットファイル [#l9fe78a0]
 +[[GCC Developer Lite>GCC Developer Lite]]ではUD3用の設定を1種類備えています。~
 +#ref(GDL_CompileOption_TargetList.png)
 +以下にUD3に対応した設定リストの一覧とその設定における機能を紹介します。
 +-''UD3''
 +~USB・Bluetoooth・RS485 I/Fを介してDynamixelプロトコルをサポートするタスクとUD3搭載機能を簡便に使用するためのライブラリとして提供される。~
 +同時にOSとしてAT91SAM7Sシリーズ用Toppersカーネルもリンク対象となる。~
 +~ビルドするとブートローダにてマイコンのフラッシュROMへ転送するための.bin(バイナリ)ファイルが作られる。~
 +ビルドが成功すると、STERM.exe(SIMPLE TERM)が起動する。~
 +
 +****SIMPLE TERMとブートローダ [#zd751f4a]
 +ブートローダはUD3のUSB・Bluetooth・RS485を使用して外部からユーザーログラムの書き換えや操作を行う事が出来ます。~
 +ブートローダを使用して動作するプログラムが構成できる設定リストは以下の通りで、これ以外の設定リストで構成されたプログラムをブートローダで転送しても正常に動作しないまでか、ボードが破損する可能性があります。
 +-UD3 (Bootloader)
 +
 +PCとマイコンボードをUSBケーブルで接続して使用するケースを紹介します。~
 +USBを仮想シリアルポートとして認識させるためのPC用デバイスドライバは、[[GCC Developer Lite>GCC Developer Lite]]をインストールした際にWindowsのシステムフォルダにコピーされます。USBケーブルでUD3とPCを接続するとデバイスドライバを要求されますが、自動検索させる事でインストールが行われます。~
 +インストール後、新しいCOMポートがWindowsのデバイスとして追加され、SIMPLE TERMから該当するCOMポートを選択(COMポート番号はPCの環境によって変わるが、デバイス名に「AT91 USB to Serial Converter」が表示されたポートを選択)しオープンするとブートローダの各種コマンドが使用可能となります。その他の設定は以下の通りです。~
 + Baudrate:ここでは意味を持たないので何でも構わない
 + Databits:8
 + Stopbits:1
 + Parity:Non
 + Flow Control:Non
 + Protocol:Xmodem
 +#ref(AT91SAM7_BL_COM.png,100%)
 +
 +なお、ユーザプログラムが既に書き込まれている場合は、電源投入およびリセット直後にユーザプログラムが実行される仕様です。[[こちら>#ueb4c356]]の手順にてブートローダのコマンドモードにしておく必要があります。
 +
 +先の設定リストでソースプログラムをコンパイルし成功するとSTERM.exe(SIMPLE TERM)が自動起動されます。COMポート以外に関しては、以下の条件で起動します。
 +-既にSIMPLE TERMが実行中であれば2重に起動しない。
 +-ボーレートや転送プロトコルは要求される設定が自動的になされる。
 +-コンパイル済み.binファイルの情報が渡る(ステータスバーにて確認可)。
 +-ユーザプログラムを転送する際の手順を記述したスクリプトファイルが使用できる様になる。
 +
 +#ref(AT91SAM7_STERM_SCRIPT1.png,100%)
 +
 +UD3がブートローダのコマンドモードであれば、「スクリプト実行[STERM UD3]」をクリックするだけで転送するファイルを手動で選択する事無く転送にかかる処理と実行までが全て自動的に行われます。
 +#ref(AT91SAM7_STERM_SCRIPT2.png,100%)
 +本機能により、手動で間違ったファイルを選択して転送してしまったり、転送不可能な状態で転送をしてしまうといったミスを軽減する事ができます。
 +
 +**UD3向けターゲットファイル及びライブラリ [#zfc66a9e]
 +[[GCC Developer Lite>GCC Developer Lite]]では1つのソースプログラムのみを対象とするため、機能別にソースを分割して編集やコンパイルするといった使い方は出来ません(完全にできないという訳でもありません)。だからと言って全ての機能を一つのソースに記述する事は、プログラムの見通しが悪くなりバグの温床になりかねません。~
 +そこで、複数のソースに分割する事無くある程度のソースプログラムサイズでコーディングするために、頻繁に使用されるであろう一部の機能が専用のライブラリとして提供されます。~
 +GCC Developer Liteを標準的な環境のPCへインストールすると、「C:\Program Files\BestTech\GCC Developer Lite\TARGET」フォルダに必要なファイルがコピーされます。必要に応じて本フォルダを参照できますし、ユーザがソースを修正しライブラリを再構築する事も可能です。~
 +~
 +UD3は複数のライブラリを組み合わせて使用するため、実体はかなり複雑になっています。
 +-''SAM7S用ライブラリ''~
 +AT91SAM7Sシリーズ共通の内蔵ペリフェラルを簡便に扱う為のライブラリ。
 +-''AT91SAM7Sシリーズ用 TOPPERS/ASP''~
 +μITRON4.0仕様準拠であるリアルタイムカーネル[[Toppers>http://www.toppers.jp/]] ASPのAT91SAM7Sシリーズ向けベステクカスタム版。OSを搭載してもある程度のリアルタイム性を確保できる事から採用。
 +-''UD3ライブラリ''~
 +UD3ライブラリはToppersを採用することで、2チャンネルあるモータドライバを全く違う目的で各々個別のタスクで動かしたり、ホストPCとDynamixelプロトコルで通信を行うタスクを走らせながら(PRE版では未サポート)システムを運用といった機能を提供。~
 +実際にはToppersのそれを意識する必要はほとんどない。
 +
 +**UD3 API [#c8cb0041]
 +ユーザ自らCPUのペリフェラルへ直接アクセスするコーディングをする訳ではなく、GCC Developer Liteが提供するUD3専用ライブラリを介してUD3PREの機能へアクセスする事になります。~
 +APIを使用する前に、ソースプログラムの先頭に ud3.h をインクルードしてください。
 + #include <ud3.h>
 +APIの詳細は以下に列挙します。
 +
 +***UD3_INITIALIZE [#bd0f80b9]
 +一般的なC言語のプログラムで言えばmain関数に相当し、一番最初に実行される初期化関数。タスクの起動やGPIOの初期化等はこの関数内で記述する。
 + void UD3_INITIALIZE(void);
 +-パラメータ
 +~なし
 +-戻り値
 +~なし
 +-使用例
 + #include <ud3.h>
 +
 + UD3_INITIALIZE ()
 + {
 +   // 動作環境設定
 +   // 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_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_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_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_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 (0x07); // GPIO0~2にLowを出力
 +
 +***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_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]
 +負荷が駆動できる最大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 DUTYを設定する。~
 + 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]
 +負荷が駆動できる最大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 DUTYを設定する。~
 + 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]
 +モータの駆動回路を活性/不活性化する。
 + int UD3_SET_MOTORENABLE (int8_t enb);
 +-パラメータ
 +--int8_t '''enbv'''
 +~0でモータドライバの機能を不活性化しモータをフリー状態にする。1でモータドライバの機能を活性化し各パラメータに応じて出力がなされる。
 +~デフォルトは0。
 +-戻り値
 +~成功すると0 、パラメータエラーがあった場合は-1が返される。
 +-使用例
 + // モータ駆動回路を活性化する。
 + UD3_SET_MOTORENABLE (1);
 +
 +***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同時にDUTYを設定する。~
 + int UD3_SET_DUTY (int16_t duty1, int16_t duty2);
 +-パラメータ
 +--int16_t '''duty1'''
 +~M1用デューティーを-1000[‰]~0~1000[‰]で指定。~
 +--int16_t '''duty2'''
 +~M2用デューティーを-1000[‰]~0~1000[‰]で指定。
 +-戻り値
 +~成功すると0 、パラメータエラーがあった場合は-1が返される。~
 +-使用例
 + // M1を30%,M2を20%のDUTYで動作させます。
 + UD3_SET_DUTY (300, 200);
 +
 +***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>#j90d8ac4]]で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_MEASURE_STICKPOS [#w3c149c4]
 +ラジコン用プロポからの信号をモータのパワーに合わせるための調整を行う。調整値は不揮発メモリに保存され、以後UD3_RC_MOTOR等で内部的に使用される。~
 +予め[[UD3_CFG_GPIO8>#u201f4af]],[[UD3_CFG_GP​IO9>#j90d8ac4]],[[UD3_CFG_GPIO10>#d2dd2f​39]]でGPIO_PWM_CAPに設定する必要がある。
 +~本APIが実行されると以下の手順で調整操作を行う。
 ++UD3_MEASURE_STICKPOSがコールされるとLED1が高速で点滅する。~
 ++プロポのスティックから手を離した状態(中立位置)でPB1を押し続ける。PB1の押下中はブザーが鳴り続け、数秒押し続けた後PB1を離す(この間に中立位置の計測が行われる)~
 ++プロポのスティックをそれぞれ上下ないし左右の端まで移動させる。何度か移動させるうちにランダムだったブザーの音程がスティックの角度に連動して変化するようになる。~
 ++スティックの角度に応じてなめらかに音階が変化するようになったらPB1を押す。~
 ++成功した「明るいメロディー」か、失敗した「暗いメロディー」が鳴ったら調整終了し、調整値が不揮発メモリに保存される。
 + 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_SET_MOTORENABLE (true);
 +
 +   UD3_ACTIVE_TASK (1);
 + }
 +
 + UD3_TASK1 () {
 +   // プロポの調整
 +   UD3_MEASURE_STICKPOS (10, 10);
 +   while (1) {
 +     // 調整値を元にモータを駆動
 +     UD3_RC_MOTOR (0, 1);
 +   }
 +  }
 +
 +***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);
 +   }
 +  }
 +
 +***UD3_GET_ELAPSEDTIME [#lf9e26fd]
 +アプリケーション起動時からの経過時間をミリ秒単位で取得。
 + uint32_t UD3_GET_ELAPSEDTIME (void);
 +-パラメータ
 +~なし
 +-戻り値
 +~uint32_t 経過時間
 +-使用例
 + // 経過時間を取得します。
 + uint32_t tm = UD3_GET_ELAPSEDTIME ();
 +
 +***UD3_GET_GPIOINPUT [#qdba2bbc]
 +GPIOの端子状態を取得。入力に使用するGPIOを[[UD3_CFG_GPIO0>#c10e9d62]]~[[UD3_CFG_GPIO10>#d2dd2f39]]で設定する必要がある。
 + 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_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 ();
 +
 +***UD3_GET_ADC [#f0162d6a]
 +GPIO0~7に入力された電圧値を取得する。~
 +ADCに使用するGPIOを[[UD3_CFG_GPIO0>#c10e9d62]]~[[UD3_CFG_GPIO7>#c82b29f3]]で設定する必要がある。
 + 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);
 +
 +***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_GET_RCPOS [#q1f997f7]
 +指定したチャネルのラジコンプロポのスティックの値を取得する。~
 +この取得した値は、[[UD3_MEASURE_STICKPOS>#w3c149c4]]で調整された値となる。
 + 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);
 +
 +**サンプルプログラム [#kf8170aa]
 +APIを使用したいくつかのサンプルプログラムを用意しました。以下よりダウンロードして解凍した上でご利用ください。
 +#ref(UD3_SMPL1.1.zip)
 +詳細はコメントおよびAPIのドキュメントを参考に読み解いてください。
 +-更新履歴~
 +2010/7/29 Ver.1.1~
 +UD3_SET_MOTORRAMPの指定を追加~
 +~
 +2010/7/15 Ver.1.0~
 +初期リリース
 +
 +***基本操作フロー [#heb0404f]
 +個々の詳細に関しては上記を参照していただくとして、サンプルプログラムをコンパイルしてUD3に転送して実行させるまでの流れを書いておきます。
 ++GCC Developer Liteで任意のソースをコンパイラオプションで「UD3」を選択してコンパイル。
 ++コンパイル成功と同時にSIMPLE TERMが勝手に起動する。二重に起動する事はない。
 ++PCとUD3をUSBケーブルで接続し、PB1とPB2を押しながらPB3のリセットを押す。PB3だけを放しUD3から「ピロッ」という起動音が聞こえたら全てのボタンを放して構わない。
 ++SIMPLE TERMのポートを適宜設定しポートを開くと、SIMPLE TERMのターミナルウィンドウに起動メッセージが表示されたら転送可能状態。
 ++SIMPLE TERMの転送メニューからスクリプト実行をクリックし、プログラムの転送を開始する。スクリプトはプログレスバーが100%になれば転送を完了し、転送したプログラムを実行する。
 ++転送したプログラムに実行が遷移する際にSIMPLE TERMで開いているポートが切断されるが、プログラムが正常に実行されてしまえば再度活性化してポートが自動的に開く。
 +
 +**注意事項 [#hc748965]
 +
 +***UD3との相違 [#wf3e23e5]
 +-Bluetoothによるワイヤレス通信機能を有しない。またブートローダにおけるBluetoothの設定も無効
 +-RS485・USB・Bluetooth経由のDynamixelプロトコルを使用した通信に対応しない。よってUD3コンフィギュレータでの設定や操作も未サポート。
 +
 +***利用上の注意 [#i2beab9a]
 +|CENTER:BGCOLOR(red):||c
 +|  :idea:|下記に記載された事項以外にも、経験を踏まえた危険回避方策を講じる事。&br;安全に配慮しない場合は人命や財産を失う恐れがある。|
 +-CPU及びセンサ用電源とモータ用電源は同じソースから供給しない事。
 +-一般的な直流電源装置をモータ用電源として使用しない事。
 +-高いモータ用電源の使用はひかえる事。当然アクチュエータにもよるが、公称7.4Vバッテリパックを2本直列程度にとどめる事を強く推奨する。
 +-ノイズが大きいモータを使用する場合はノイズ対策を十分に施す事。アークが飛ぶ程の高インダクタンスなモータの使用は推奨しない。また、そういったモータへ定格を超える電源を印加する事は絶対にしてはならない。アバランシェ破壊を誘発する可能性が高くなる。
 +-基本的にフルパワーでモータの瞬時逆回転は許容しない。その場合低電ないし仕様以下の電源電圧であっても、逆転した瞬間に逆起電力やノイズにより見かけ上の電源電圧が上昇し、もしFETの絶対最大定格を超えた場合は即時短絡破壊する。
 +-最悪ショート状態に陥りバッテリにとって超過放電に陥る可能性がある以上、最終的に電流を遮断するためのヒューズ等を電源ラインに挿入しておく。
 +-モータ駆動用のHブリッジが破損するときわめて大きな短絡電流が流入する。その際モータ用電源として接続したバッテリが電流制限ないし保護機能を持っていない場合は、極めて重篤な事態を生じる可能性がある。
 +-運転中以外はバッテリは必ず取り外す。
 +-ブスバーに直接半田したり導電性の物と接触させてはならない。
 +-移動台車等を構成した際にUSBケーブルを接続したまま使用しない。
 +-タスクを複数起動すると1つのタスクの実行時間が延びる。よほどの事が無い限りシングルタスクにとどめておくことを推奨する。
 +-本製品にかかるいかなる損害が生じても、本製品の単価を超える保障は行わない。


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