RCサーボによる太陽電池雲台


【太陽電池雲台の概要】
太陽電池の雲台をRCサーボで動作させるものを作ってみました。
太陽電池を使う場合、太陽の動きを追跡していつも最適な方向にすることができれば
常時最大電力を得ることができます。
そこで、小型の太陽電池とRCサーボを組み合わせて太陽の動きを追跡する雲台を
製作してみました。製作したシステムの全体外観は下記のようになります。
小さな太陽電池ですのであまり大きな効果はありませんが、基本動作の試作です。


手前がコントローラ部です。
最初にジョイスティックを使って
初期位置を決めます。
その後は自動追従します。



上下左右の2次元ですので
RCサーボを2個使っています。

最も基本的な組み合わせです。

【全体構成と仕様】

この太陽電池雲台の全体構成は下図のようにしました。まず全体制御は次世代モジュールが
内蔵されているPIC16F1509を使います。
RCサーボの駆動にPICマイコンの次世代モジュールである、PWMモジュールとCLCモジュールを
組み合わせてソフトウェアに関係なくハードウェアだけで制御ができるようにしています。

また、最初、任意の位置に向けるためにジョイスティックを使って方向制御ができるようにします。
さらに、この制御の状態を表示するため液晶表示器を使います。
電源は、RCサーボに大電流が流れますので、それでPICが誤動作しないよう独立の5Vの
電源として供給しています。


こうして製作する太陽電池雲台の機能仕様は下表のようにするものとします。

項 目  仕 様  備 考 
電源 ACアダプタから供給
DC7〜9V 1A以上
内部はロジックとRCサーボ独立の5Vで動作
駆動部 RCサーボ 2台
水平方向と垂直方向移動
GWS社 S03T-2BB
表示 液晶表示器 SF1602HULB
16文字2行 キャラクタ表示
表示内容は X、Y設定値
操作 ジョイスティック TX-26PR
 X、Y移動
タクトスイッチ
 手動/自動切換え
抵抗値10kΩ

入力 太陽電池出力電圧 可変抵抗で任意電圧に調整可
【RCサーボの使い方】
この製作例ではPICの次世代モジュールを組み合わせてRCサーボを高分解能で
駆動しています。
まず、RCサーボS03T-2BBの仕様と駆動方法から説明します。
RCサーボはラジコンの制御に使われるサーボモータで、ラジコン自動車や飛行機などの
無線操縦に使われています。最近では2足歩行ロボットなどのロボットにたくさん使われています。
外観は下図に示すようなもので、上部の円盤部(ホーン)が約120度回転するようになっていて、
外部からの信号で指定された角度まで回転して静止します。



この制御用のインターフェースの規格は、下図のようになっています。
この規格から、制御のための接続は3線で、5Vの電源とGND、残りは制御信号線だけという
簡単な接続となっています。
制御信号はPWM制御で、周期が20msecで、パルス幅は0.9msec〜2.1msecの間の
1.2msecで制御する必要があることがわかります。
これで難しいのは20msecと1.2msecの差が大きいことで、単純に周期20msecのPWMで
制御しようとすると、デューティの有効幅が約1/20になってしまいますから、
10ビット分解能があっても50ステップ程度の可変幅しか確保できなくなってしまい、
制御としては荒くなってしまいます。


そこで十分な分解能のPWM信号を生成するためにPWMモジュールとCLCモジュールを
組み合わせて下図のような回路を構成しました。

20msec周期はタイマ0で作成し20.48msec周期とします。このタイマ0のオーバーフローで
CLC1のRSフリップフロップをセットします。

次にPWMの周期となるタイマ2を2.048msec周期に設定します。
このタイマ2とPR2の一致出力をCLC3のDフリップフロップのクロックとし、同時にCLC1の
RSフリップフロップをリセットします。

これで、タイマ0がCLC1のRSフリップフロップをセットしたときだけ、CLC3のDフリップフロップが
セットされ出力がHighとなります。
そして次のタイマ2の一致でリセットされますから、PWMの1周期分だけCLC3OUTがHighと
なることになります。
このCLC3OUTと2組のPWM出力のANDをCLC2とCLC4で構成しています。
これで20.48msecに1回だけPWM1とPWM4のパルスが出力されることになります。

PWMの周期が2.048msecですから、RCサーボ用の出力としては0.9msecから2.048msecまで
使えます。つまり1024分解能の内、450から1023まで使えますから573ステップでRCサーボを
制御できることになります。
しかもPWMのデューティを設定すればあとはハードウェアで繰り返し動作しますから、
プログラムでRCサーボに対して常時実行しなければならないことは、デューティに変更が
あったときタイマ0の割り込み処理の中で設定するだけとなり非常に簡単な処理となります。
【CLCモジュールの使い方】
CLCモジュール (Configurable Logic Cell)は一言でいうと、簡単なCPLDをPICに実装したもので、
CLC1からCLC4まで最大4モジュールが内蔵されているデバイスがあります。
内部構成は下図のようになっています。



まず、入力源となる信号は全部で29種類あり、この信号源から下表のようにCLC1からCLC3の
モジュールごとに16種の入力が指定されており、さらにCLC内部の4つの入力ブロックごとに
8種類ずつの選択肢に分けられています。
この中から任意のひとつを内部ロジックへの入力とします。したがって、CLCモジュールごとに
入力できる信号源が異なることになりますので、モジュールの使い分けが必要です。

内部ロジックは上図の上部に示した8種類の回路からひとつを選択してロジック回路を構成し、
出力は外部ピンに出力したり、割り込みを生成したり、他の内部モジュールへ接続したりする
ことができます。ハードウェアロジックで回路を構成していますので、プログラムには無関係に、
ハードウェアロジックの速度で高速に動作します。


これらの設定はすべてレジスタ設定で行います。レジスタですから、電源オフで内容は消えますので
電源オン時には再設定する必要があります。
設定レジスタは非常にたくさんあり設定が複雑ですので、これらの設定値を自動的に求めることが
できるパソコン用ツールとして「CLC Configuration Tool」が用意されています。
このツールの画面は下図のようになっており、ひとつのCLCモジュール全体がグラフィック形式で
表示されています。


グラフィック上でPICデバイスとCLCモジュールを設定してから、入力、ロジック、出力の3要素を
決めれば、レジスタ設定値が自動的にC言語またはアセンブラ言語用のソースファイルとして
出力されます。

入力信号の選択では、4入力ブロックごとに選択肢が8種類ずつ決まっていますので、必要な
入力信号を選択します。その後、どのゲートと入力を接続するかをGATEnの直前にある×マークを
クリックして選択します。
未接続、接続、反転接続の3種類が選択できます。未接続とした場合のゲート入力はLowの扱い
となっています。

ロジック選択は最上段のメニューで行い、出力は右下のチェックボックスで行います。
最後にFileメニューをクリックして「Save C Code」とすれば、指定したディレクトリにレジスタ設定の
C言語ファイルが「xxxx.inc」の拡張子で生成されますので、この内容をCのソースファイルにコピー
して使います。
今回のRCサーボの回路構成とするための設定は下記のようになりました。


【回路図と組み立て】
全体構成に基づいて作成したコントローラ部の回路図が下図となります。
電源は、RCサーボ用とロジック用を別々のレギュレータを使っています。
いずれも9VのACアダプタの入力から5Vを生成していますが、RCサーボの供給電流が
大きく変化しますので、これでロジック部が誤動作しないように別系統としています。

RCサーボの出力ピンはCLCの出力ピンとする必要があります。そして、コネクタには
3ピンのシリアルピンヘッダを使って、RCサーボのコネクタが直接接続できるようにしました。
この電源供給ピンには大容量の電解コンデンサを接続して電源変動を抑制しています。

ジョイスティックの2個の可変抵抗の出力は、アナログ入力ピンに直接接続しています。
4個のスイッチの内、リセットスイッチとSW4は10kΩでプルアップしていますが、
SW2とSW3はPICマイコンの内蔵プルアップを使うことにして、抵抗を省略しています。

CN2は太陽電池の出力電圧をモニタするための入力で、可変抵抗で電圧を自由に
調整できるようにし、さらに簡単なノイズフィルタを挿入してアナログピンに接続しています。


組み立てが完了した部品面とはんだ面が下記となります。
液晶表示器にはパラレル接続の物を使いました。






【プログラム】
コントローラと雲台の組み立てが完了したら、次はPICマイコンのプログラムの製作です。
液晶表示器の制御部分はライブラリとして別ファイルとしましたので、プロジェクトに必要な
ソースファイルは次の3つとなります。

  ・RCServo2.c  :本体プログラムのソースファイル
  ・lcd_lib.c     :液晶表示器のライブラリソースファイル
  ・lcd_lib.h     :液晶表示器ライブラリ用ヘッダファイル

プログラムの全体構成は下図のようなフローとなっています。
最初に必要な内蔵モジュールの初期設定を行いますが、この中で4組のCLCの初期設定も
行っています。
LCDに開始メッセージを表示後、メインループに入ったらまず手動モードか自動モードかを
判定して分岐します。初期値は手動になっています。

手動の場合は、ジョイスティックを動かせば、連動してRCサーボが動き、水平と垂直を任意の
位置に動かせます。これでおよそ最大となる位置に太陽電池の向きを合わせます。
その状態のままで、S2をオンにすると自動モードに入ります。

自動モードでは、30秒間隔で、水平と垂直をわずかずつ動かしながら太陽電池の出力が
最大となる位置を探します。5回これを繰り返して、その間に最大値だった位置にRCサーボを
動かします。
この30秒間隔は実験レベルでの間隔ですので、実用的には10分程度でも十分かと思います。




太陽電池雲台のファームウェアは下記からダウンロードできます。
MPLAB X IDEのプロジェクト1式となっています。

  ★★★ 太陽電池雲台のファームウェアのダウンロード ★★★