あれこれ考えてみる(原点を見直してみる...3)
さて、前回のつづきです。
●【ゼロ点補正データ】
ゼロ点補正の為のデータは、(*)内蔵EEPROM(不揮発性メモリー:電源の供給を切っても記録が残るメモリー)の0x0FE0〜0x0FFFの32バイトと、(*)SRAM(揮発性メモリー)の0x0340〜0x035Fの32バイトがゼロ点補正データが記録されている場所です。(*)さらに、プログラムは外付けEEPROMに記録されていますが、プログラム中にZEROコマンドで、ゼロ点の設定が書いてあるかもしれません。
まず、内蔵EEPROMや、SRAMに記録されるデータに関してですが、メモリーから値を読込んでみると、以下のような値で記録されています。
01FDFDFD 03000301 03000000 FF00FC00
0000FD01 00000100 FFFFFFFF FFFFFFFF
ゼロ点補正値は、ゼロ点設定の基本姿勢の状態における、それぞれのサーボモーターの値が100で、補正の数値がそのまま記録されるのではなく、100からのズレ量が記録されることになります。
こうすることによって、プログラムのMOVEなどで指定した角度を補正する式は、例えば以下のようになります。
上段が指定角度、下段が補正値ですが、つまり、そのまま足し算をすればOKということですね(※「計算結果が型の範囲外になると」を参照)。ちなみに指定角度/現在角度はSRAMの0x0300〜0x031F/0x0320〜0x033Fに、補正後の角度はSRAMの0x0360〜0x037Fに記録されます。
実際には、さらにDIR設定で反転させているサーボモーターの値を反転させて(100が中心なので、200-角度で計算できる:例、0xC8-0x49=0x7F)、目的の角度としてサーボモーターを動かすことになります。ちなみに、この値はSRAMの0x0380〜0x039Fに記録されています。
次に、あまり用いないんですが、プログラム中にZEROコマンドを書いて、ゼロ点補正値を設定することができます。ゼロ点のデータも、DIRの場合と同じ様に、電源を入れると内蔵EEPROMからSRAMにコピーされ、さらにZEROコマンドで、ゼロ点を指定していると、内蔵EEPROM、SRAMともに、その値に設定されます。
ということで、今回はここまで
つづく。。。
----------------
にほんブログ村
| 固定リンク
「工作・改造・解析」カテゴリの記事
- Maker Faire Tokyo 2014 に行ってきました(2014.12.14)
- ワイヤーストリッピングゲージ(2014.06.26)
- Arduino関連の本を買いました(2013.09.04)
- Maker Faire Tokyo 2012 12月1-2日開催(2012.11.09)
- 5V対応SBDBTがついに発売開始!(2012.10.26)
この記事へのコメントは終了しました。
コメント