・24CH.RCサーボモーターコントローラ

1.概要

  ご要望の多かったロボット作りによく利用されるRCサーボモータ(右写真)
  のコントローラを試作してみました。

  RCサーボモータは右下図のように与えられたパルス幅 t を位置指令として
  制御されます。
  t =1.5mS±0.75mSに対して回転角180度のように決められています。
  パルス周期 T には依存しませんが、レスポンスなどを考慮して10〜20mS
  程度に選ばれるようです。
  RCサーボモータの種類により、これらの値は若干異なるようですから、
  あらかじめご確認下さい。
  H8/3694Fには3相のPWMを発生する16ビットタイマーWがありますので
  これを使って製作することにします。

3.回路図

  上記の構想に基づいて設計した24CH RCサーボコントローラの
  回路図を別紙に示します。
  とりあえず、右写真のように8CH分のみを組み立てて実験しました。
  デモ用を兼ねていますので手動のボタンが並んでいますが・・・・・。

  (手っ取り早く試して見たい方・回路を組むのが面倒な方は)
  (FTIOB、FTIOC、FTIODをそれぞれRCサーボモータに )
  (接続し、簡易版 3CH RCサーボコントローラのサンプル
  (プログラムをお使い下さい。  CH.0 CH.8 CH.16 のみ  )



4.ソフトウエア

  ソースリストを見ていただけばわかりますが変数RC_posi[CH]に値を代入するだけで各チャンネルの
  制御を行うことができます。代入する値は6000〜24000でパルス幅0.6mS〜2.4mSに相当します。
  またUSBを通してPCからも制御できるようコマンドを用意しました。
  コマンドはバイナリ4バイトで(0xFF, CH_No, RC_posi_Hi, RC_posi_Lo)を送るだけで、応答はありません。
  実際には0.1秒くらいの間隔で1こま漫画のように各CHのポジションを決めながら、一連の動作をティーチングし
  これらの動作を組み合わせるようプログラムするのが簡単ではないかと考えています。
  このためティーチングデータがFLASHに収まらなければ回路図に示すようにI2C接続のEEPROMを追加
  するのも容易にできます。
  また各CHの位置補完や種々の計算をしながら制御するためには、H8/3694では力不足で32ビットクラスの
  マイコンを上位CPUとして、I2Cインターフェースを使ってコマンドをやり取りしながら制御する必要があるでしょう。
  この場合は単機能のRCサーボコントローラとして動作し、48CH、72CH・・・・のように増設することも考えられます。

  @ 簡易版 3CH RCサーボコントローラ サンプルソフト(HEW4・C言語)
  A 24CH RCサーボコントローラ サンプルソフト(HEW4・C言語)
  B PC側 ティーチングソフト (開発中) ・ 画面イメージ


(RCサーボモーター)

2.構想・設計

  ところでこの制御パルスは周期 T に比べてパルス幅 t が
  短すぎて効率が悪いと思いませんか?
  周期20mSの中に2.5mSのパルスは8個も入ります。
  そこでH8/3694FのPWM波形をマルチプレクサを使って
  1パルスづつ時分割出力することにより、8CH分の制御
  パルスを発生させてはいかがでしょうか。
  このようにすれば3ケのPWM波形からでも24CHのRCサーボ
  コントローラを実現できそうです。(右図タイミングチャート
  TCNTがGRAに達したときTCNTがクリアされ、パルスがOFFして、
  IMFA割込みを発生するようレジスタを設定します。
  パルスがOFF(0V)となってからCHを切換えて、次のパルス幅の
  再設定をする必要がありますから、パルス幅の制御範囲を
  0.6〜2.4mSとします。
  また、マルチプレクサには74HC283Aを使い、P10〜P12を
  CHセレクト信号とします。