ラジコン用サーボモータの制御を目的としています.
下記の仕様を満たすサーボの制御に対応しています. パルス幅の範囲:1.5ms±0.4ms,1.5ms±0.5ms,1.5ms±0.8ms パルスの周期:20ms 注意点
サーボコントローラのアドレス設定はモータドライバ、ビデオセレクタとは異なるため注意してください |
記号 | 分類 | 定格・型 | パッケージ |
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リードという.このことを利用して,コマンドの上位2bitを1にすることによって,アングルと区別する.
(補足)カレントチャネルとは,I2Cリードまたは,データを受信したときに,その対象となるチャネルである.
今回は8つのサーボを制御するのでチャネルはCH0~CH8まである.
チャネルはI2Cサーボコントローラが保持しておく.セットチャネルコマンドによって設定する.初期値は0チャネル.
今回は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 (未定義) |
-
アングル
-
サーボタイプ
サーボタイプ | パルス幅の範囲 |
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:スレーブアドレス
- W・・・Write
- R ・・・Read
- UART-I2Cブリッジを参考にしてください
- 全チャネルをニュートラルにする
1. スタートコンディション
2. SLA+W
3. 11000XXX : コマンド | コマンドコード(フルリセット) | パラメーター
4. ストップコンディション
2. SLA+W
3. 11000XXX : コマンド | コマンドコード(フルリセット) | パラメーター
4. ストップコンディション
- チャネル4を100°にする
1. スタートコンディション
2. SLA+W
3. 11001100 : コマンド | コマンドコード(セットチャネル) | パラメーター(CH4)
4. 01100100 : アングル(100°)
5. ストップコンディション
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. ストップコンディション
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. ストップコンディション
2. SLA+W
3. 11001101 : コマンド | コマンドコード(セットチャネル) | パラメーター(CH5)
4. 11010001 : コマンド | コマンドコード(セットサーボタイプ) | パラメーター(サーボタイプ)
5. ストップコンディション
- チャネル0のアングル値を保存する
1. スタートコンディション
2. SLA+W
3. 11001000 : コマンド | コマンドコード(セットチャネル) | パラメーター(CH0)
4. 11011XXX : コマンド | コマンドコード(サーボアングルライト) | パラメーター
5. ストップコンディション
2. SLA+W
3. 11001000 : コマンド | コマンドコード(セットチャネル) | パラメーター(CH0)
4. 11011XXX : コマンド | コマンドコード(サーボアングルライト) | パラメーター
5. ストップコンディション
- チャネル1の保存した値を読み出し、設定する
1. スタートコンディション
2. SAL+W
3. 11001001 : コマンド | コマンドコード(セットチャネル) | パラメーター(CH1)
4. 11100XXX : コマンド | コマンドコード(サーボアングルリード) | パラメーター
5. ストップコンディション
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)
佐藤さんが基板を設計していた(城)