I2Cサーボコントローラ

ラジコン用サーボモータの制御を目的としています.

下記の仕様を満たすサーボの制御に対応しています.
パルス幅の範囲:1.5ms±0.4ms,1.5ms±0.5ms,1.5ms±0.8ms
パルスの周期:20ms

注意点

サーボコントローラのアドレス設定はモータドライバ、ビデオセレクタとは異なるため注意してください
 

サーボタイプはGWSならST08に設定してください
角度調整がうまくいかない場合はST05を試してください

回路

  • 回路図


  • 部品対応表

記号 分類 定格・型 パッケージ
C1
積層セラミックコンデンサ 0.1uF ラジアル
U1 AVRマイコン ATmega88P 28ピンDIP
U2
デマルチプレクサ
74HC238
16ピンDIP
CN1        
I字型ピンヘッダ
1×3
 
CN2
EH-Aベース付ポスト トップ型04P
SW1 DIPスイッチ 8P 16ピンSOP

基板

  • 部品面



  • ハンダ面



プログラム

I2Cサーボコントローラプロトコル

  • 概要

1. データはバイト単位(I2Cの規格による制限)

2. データの種類はコマンドアングル

3. データの種類の判別はデータの上位2bitで判定する
(補足)アングルの最大値は10110100(=180°).すなわち,アングルの上位2bitがともに1になることはない.
このことを利用して,コマンドの上位2bitを1にすることによって,アングルと区別する.

4.I2Cマスターからデータ要求が行われたとき,I2Cサーボコントローラはカレントチャネルのアングルを送信する.I2Cマスターからのデータ要求をI2Cリードという.
(補足)カレントチャネルとは,I2Cリードまたは,データを受信したときに,その対象となるチャネルである.
今回は8つのサーボを制御するのでチャネルはCH0~CH8まである.
チャネルはI2Cサーボコントローラが保持しておく.セットチャネルコマンドによって設定する.初期値は0チャネル.

5.I2Cサーボコントローラはチャネル毎にサーボタイプを保持しておく.セットサーボタイプコマンドによって設定する.
(補足)サーボタイプとは,サーボが許容するパルス幅の範囲を区別するものである.

  • コマンド

 7bit  6bit  5bit  4bit  3bit  2bit  1bit  0bit
 CMF  CMC  PRM

・CMF・・・コマンドフラグ.常に11にセットする.(アングルと区別するため.)
・CMC・・・コマンドコード.コマンドの種類を示す.
・PAM・・・コマンドのパラメーター.サーボのチャンネルやサーボのタイプを示す.

  • コマンドコードの種類

CMC
名前
I2Cサーボコントローラの動作
 0 (FRS)  フルリセット  全チャネルのサーボタイプをNUL,アングルを90°(1.5ms)にする
 1 (SCH)
 セットチャネル  カレントチャネルをPRMで指定されたものに設定
 2 (SST)
 セットサーボタイプ  カレントチャネルのサーボタイプをPRMで指定されたものに設定
 3 (SAW)  サーボアングルライト  カレントチャネルのアングルを保存
 4 (SAR)
 サーボアングルリード  カレントチャネルの保存した値を読み出し、アングルをその値に設定
 5 (未定義)
   
 6 (未定義)
   
 7 (未定義)
   

  • アングル

I2Cサーボコントローラは,アングルを受信すると,カレントチャネルのサーボタイプがNULでないならば,カレントチャネルにその値を設定する.
  • サーボタイプ

 サーボタイプ  パルス幅の範囲
 0 (NUL)
 サーボタイプなし(初期値)
 1 (ST05)
 1.5ms±0.5ms
 2 (ST08)
 1.5ms±0.8ms
 3 (ST04)
 1.5ms±0.4ms
 未定義
 未定義
 未定義
 未定義

  • 使用例

アクノリッジの表示は省略する.
  • 赤字 : I2Cサーボコントローラ → I2Cマスターへ送信する
  • それ以外 : I2Cマスター → I2Cサーボコントローラへ送信する
  • X:なんでもいい.または,場合による.
  • SLA:スレーブアドレス
  • 全チャネルをニュートラルにする
1. スタートコンディション
2. SLA+W
3. 11000XXX : コマンド | コマンドコード(フルリセット) | パラメーター
4. ストップコンディション
  • チャネル4を100°にする
1. スタートコンディション
2. SLA+W
3. 11001100 : コマンド | コマンドコード(セットチャネル) | パラメーター(CH4)
4. 01100100 : アングル(100°)
5. ストップコンディション
  • チャネル6のアングル値を読み出す
1. スタートコンディション
2. SLA+W
3. 11001110 : コマンド | コマンドコード(セットチャネル)| パラメーター(CH6)
4. Repスタート
5. SLA+R
6. XXXXXXXX : アングル(チャネル6のアングル値)
7. ストップコンディション
  • チャネル5のサーボタイプを1.5ms±0.5msに設定
1. スタートコンディション
2. SLA+W
3. 11001101 : コマンド | コマンドコード(セットチャネル) | パラメーター(CH5)
4. 11010001 : コマンド | コマンドコード(セットサーボタイプ) | パラメーター(サーボタイプ)
5. ストップコンディション
  • チャネル0のアングル値を保存する
1. スタートコンディション
2. SLA+W
3. 11001000 : コマンド | コマンドコード(セットチャネル) | パラメーター(CH0)
4. 11011XXX : コマンド | コマンドコード(サーボアングルライト) | パラメーター
5. ストップコンディション
  • チャネル1の保存した値を読み出し、設定する
1. スタートコンディション
2. SAL+W
3. 11001001 : コマンド | コマンドコード(セットチャネル) | パラメーター(CH1)
4. 11100XXX : コマンド | コマンドコード(サーボアングルリード) | パラメーター
5. ストップコンディション

RCサーボ制御用PWM出力

mega88Pの高速PWM動作(データシート15.9.3)でサーボに送る信号を作り出します.
非反転出力動作(COM1x1~0=10)に設定しています.
内部クロック8MHzで動かします.(分周なし)
ICR1に2.5msの幅20000(8MHz×0.0025s=200000)の値を入れています.

~参考ページ~データシートmega88P~
  • 8.6校正付き内蔵RC発信器
  • 15.7比較出力部
  • 15.9.3高速PWM動作

参考文献

  • 二足歩行ロボット製作超入門-バッテリーからRCサーボまで-
    • 著者:浅草ギ研
    • 出版年:平成17年9月20日
    • 出版社:株式会社オーム社
  • ATmega88Pデータシート
    • URL:http://moon.gmobb.jp/hero/PDF/mega88P.pdf
    • アクセス日:2010.2.25

進捗状況

(2009.7.22)
I2Cサーボコントローラのプログラム最新版ですservoprogram.zip

(2009.6.22)
I2Cサーボコントローラのプログラムをアップしました
完成版は後日アップします(佐藤)

(2009.5.25)
I2Cサーボコントローラのプロトコル第3版.pdfをアップしました(佐藤)

(2009.5.19)
基板図アップしました(佐藤)

(2009.4.25)
回路図アップしました(佐藤)

(2009.3.10)
佐藤さんが基板を設計していた(城)

(2009.3.8)
仕様の決定(城)

ċ
servo.CE3
(17k)
Robo Kirarin,
2010/02/25 0:35
ċ
servoprogram.lzh
(32k)
Robo Kirarin,
2009/06/21 17:37
ċ
servoprogram.zip
(32k)
Robo Kirarin,
2009/07/22 3:57
ċ
サーボ基板.mb3
(56k)
Robo Kirarin,
2009/05/19 3:04
Comments