2: 2011-07-05 (火) 19:17:42 yoshida ソース 3: 2011-07-06 (水) 12:54:27 yoshida ソース
Line 27: Line 27:
合わせて、不要になる変数も削除します。~ 合わせて、不要になる変数も削除します。~
#ref(gcc_edit_1.png,100%) #ref(gcc_edit_1.png,100%)
-AX-12+のホーンを回転させれば手は開きますので、fd_DXSetPositionを使用します。~+AX-12+のホーンを回転させれば手は開きますので、[[fd_DXSetPosition>FDIIILIB#nbe84864]]を使用します。~
#ref(AX12Hone.png,100%) #ref(AX12Hone.png,100%)
Line 39: Line 39:
先ずAX-12+から読み込んだ負荷の値を保存するための変数を宣言します。負荷は、AX-12+コントロールテーブルのアドレス40と41の値で表されることから、読み込んだ負荷の値を入れる変数も、16ビットのデータサイズである必要があります。 先ずAX-12+から読み込んだ負荷の値を保存するための変数を宣言します。負荷は、AX-12+コントロールテーブルのアドレス40と41の値で表されることから、読み込んだ負荷の値を入れる変数も、16ビットのデータサイズである必要があります。
-#ref(RobotHand_p6.png, 100%)+#ref(gcc_edit_2.png, 100%)
変数名のLoadDataは、負荷データという意味です。変数名は何でも構いませんが、後で見直した時に、何のための変数なのかが直ぐ分るような名前にしましょう。 変数名のLoadDataは、負荷データという意味です。変数名は何でも構いませんが、後で見直した時に、何のための変数なのかが直ぐ分るような名前にしましょう。
Line 50: Line 50:
fd_DXGetLoad関数の後に読み込んだ負荷の値を表示します。 fd_DXGetLoad関数の後に読み込んだ負荷の値を表示します。
-負荷の値は[[コントロールテーブル>DXTABLE1#k921f4f9]]で10ビットまで使用することになっていますので、4桁表示としています。(10ビットで表現できる最大数は2047)+負荷の値は[[コントロールテーブル>DXTABLE1#k921f4f9]]で11ビット使用することになっていますので、4桁表示としています。(11ビットで表現できる最大数は2047)
---- ----
Line 65: Line 65:
閉じる方向へ力を加えると、負荷の値は50や100といった値になります。開く方向へ力を加えると、少し力を加えただけで1050や1100といった値になります。開く方法へ力を加えた場合、何故急に大きな値になるのでしょうか。 閉じる方向へ力を加えると、負荷の値は50や100といった値になります。開く方向へ力を加えると、少し力を加えただけで1050や1100といった値になります。開く方法へ力を加えた場合、何故急に大きな値になるのでしょうか。
-AX-12+の負荷の値は下表のように2バイト=16ビットで表されます。+AX-12+の負荷の値は下表のように16ビットで表されますが、上位5ビットは使用していません。
| ビット | Bit15~11 | Bit10 | Bit9 Bit8 Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 | | ビット | Bit15~11 | Bit10 | Bit9 Bit8 Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 |
Line 77: Line 77:
**手を少しづつ閉じる [#mdb3661c] **手を少しづつ閉じる [#mdb3661c]
-ゴールポジションの値を少しづつ増やしながら、AX-12+に逐次書き込むことで、手を少しづつ閉じる動作を実現します。+負荷の値によりゴールポジションの値を少しづつ増やしながら、AX-12+に逐次書き込むことで、手を少しづつ閉じる動作を実現します。
#ref(RobotHand_p11.png, 100%) #ref(RobotHand_p11.png, 100%)
先ずゴールポジションを保存する変数を宣言します。 先ずゴールポジションを保存する変数を宣言します。
-uint16_t PresentLoad;の下に +uint16_t GoalPositon = 300は、変数宣言時に予め300という値を入れておくという意味です。
- uint16_t GoalPositon = 300; +
-と入力します。 +
-GoalPositon = 300は、変数に予め300という値を入れておくという意味です。+
---- ----
-#ref(RobotHand_p12.png, 100%) +次に負荷の閾値を決めます。~ 
- +手を閉じて物を挟んだ時、負荷は手が開く方向にかかるので、負荷の方向1024と負荷の値を足した値が閾値となります。~ 
-AX-12+にゴールポジションを書き込みます。 +ここでは負荷の値を100として、閾値を1124とします。
-fd_printf文の後に +
- fd_DXWriteWordData (1, 30, GoalPosition); +
-と入力します。+
---- ----
-#ref(RobotHand_p13.png, 100%) +閾値を超えたらfd_DXSetPositionで1加算したゴールポジションを指定します。~
- +
-ゴールぽシジョンの値を1増やします。 +
-fd_printf文の後に +
- GoalPosition++; +
-と入力します。GoalPositionに1足すという意味です。 +
- +
-*負荷の値によって分岐 [#m50c25ac] +
- +
-負荷の値が、ある閾値より小さい場合だけ、ゴールポジションの値に1足し、そのゴールポジションをAX-12+へ書き込みます。 +
- +
-#ref(RobotHand_p14.png, 100%) +
- +
-ゴールポジションに1足す行とゴールポジションを書き込む行をif文で囲みます。if文の条件は、「負荷の値が1124より下だったら」とします。手を閉じて物を挟んだ時、負荷は手が開く方向にかかります。よって、負荷の方向1024と負荷の値100を足した値の1124としました。 +
- +
- if(PresentLoad < 1124) { +
-   GoalPosition++; +
-   fd_DXWriteWordData (1, 30, GoalPosition); +
- }+
**動作確認 [#x3a5a029] **動作確認 [#x3a5a029]
-&nbsp;#include <fd.h> +#html{{ 
- #define KEY_QUIT { if(fd_rx_buff()) fd_SoftReset();}+&lt;pre class="brush: c"> 
 +#include <fd.h> 
 +void main (void) { 
 +  uint16_t LoadData; 
 +  uint16_t GoalPosition = 300;
- void main (void) { +  fd_SetBeepCondition (FD_BEEP_MMI | FD_BEEP_PACKETERR | FD_BEEP_LOWVOLTAGE | FD_BEEP_BOOTUP); 
-  uint16_t PresentLoad+  fd_SetUVThreshold (7.4)
-  uint16_t GoalPosition = 300;+  DX_ChangeBaudrate (1000000);
-  fd_Init (0, BT_CONSOLE, FD_BEEP_MMI | FD_BEEP_PACKETERR | FD_BEEP_LOWVOLTAGE | FD_BEEP_BOOTUP, 7.4); +  fd_DXSetTorqueLimit (1, 154); 
-   fd_DXWriteWordData (1, 34, 200); +  fd_DXSetPosition (1, 300);
-  fd_DXWriteWordData (1, 30, 300);+
-  while (1) { +  while (!fd_rx_buff () && !fd_GetPB ()) { 
-    fd_DXReadWordData (1, 40, &PresentLoad); +    fd_DXGetLoad (1, &LoadData); 
-    fd_printf("%6d\r",PresentLoad); +    fd_printf ("%4d\r", LoadData); 
-    if(PresentLoad < 1124) { +    if (LoadData < 1124) { 
-      GoalPosition++; +      fd_DXSetPosition (1, ++GoalPosition); 
-       fd_DXWriteWordData (1, 30, GoalPosition); +   
-    +    fd_Wait (10)
-    KEY_QUIT+ 
-  +
-&nbsp;}+&lt;/pre> 
 +}}
プログラムが完成しました。プログラムを書き込んで動かしてみましょう。 プログラムが完成しました。プログラムを書き込んで動かしてみましょう。


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