サウスダコタ鉱山技術学校の自律型潜水艇

作成者:Richard Banks、作成日:2013年05月01日
最終更新者:Robert Nelson、更新日:2017年09月08日

はじめに

サウスダコタ鉱山技術学校(SDSM&T)の自律型潜水艇(AUV)チームは、極限の水中環境を探査するミッションにおいて、潜水艇に9個のバッテリからの電力と電子推進制御を供給することが求められていました。私たちは、AUVスマート電源システムとAUV電子推進制御システムの2つのプロジェクトを立ち上げ、これを達成しました。

AUVスマート電源システム

AUVスマート電源システムシニア設計グループは、チーム内での議論や既存の手法の評価を通じて、これらの複雑な問題に対処する戦略を立てました。これらの電池の切り替え時に、電池の状態をエコーすることで、通信や切り替えの遅れの問題を解消しています。複数のコントローラを使用し、プライマリコントローラに障害が発生した場合、冗長性を確保しています。多様なシステムに対応するために、このシステムで通信が途絶えた場合に対応するための「Rogueモード」プロトコルが実装されています。このプロトコルにより、AUVは通信の一部または全部が失われ、それぞれの独立したソースが他のソースの活動を認識できない状態でも、動作することができます。このアプローチにより、AUVスマート電源システムシニア設計グループは、他の電力制御システムにも容易に適用できる方法を用いて、より多様な制御システムを開発することができました。

SDSM&T AUVスマート電源システムシニア設計グループのミッションは、自律型潜水艇に5時間電力を供給することができるモジュール式システムを作ることでした。このシステムは、スマートバッテリ管理を利用し、関連するすべてのバッテリデータをAUVのヘッドノードに報告します。完全な電源システムは、最大1500psiの耐圧性があり、20⁰Fから200⁰Fまでの温度変動に耐え、3時間のミッションと2時間のバックアップのために非安定化電源の12ボルトを供給し、I2Cプロトコルを使用して通信する必要があります。

スマート電源システムグループは、3つの完全なバッテリコンテナ、冗長化されたマスターバッテリブレーン(Master Battery Brain、MBB)システム、サブバッテリブレーン(Sub Battery Brain、SBB)のプログラム、MBBのプログラム、システムを完全に仕上げるために必要なすべてのコンポーネント、および詳細なドキュメントを作成しました。SBBプログラムは、2つの電源バスの切り替え、電圧・電流・クーロンの監視、および電池残量検知により、電池残量に応じた使用停止を行います。MBBプログラムは、バッテリの使用量をスマートに制御し、サブの電力需要に応じてすべてのバッテリを制御し、関連データをヘッドノードに送信します。また、スマートスイッチングアルゴリズムを実装しています。

全体のデザインコンセプト

ミッション時間が長いため、電源システムは合計36個の20Ah 3.2V LiFePO4セルを含み、合計9個の12Vバッテリで構成されています。これらのバッテリは以下の装置で構成され、それぞれ防水コンテナに収納されます。

  • SBBとしてArduino Nano(Digi-Key品番 1050-1001-ND)1台
  • 電源スイッチボード(PSB)2枚
  • 4066スイッチIC - 4回路双方向スイッチ(Digi-Key品番 296-28986-2-ND)1個
  • LiFePO4バッテリセル4個

image

図1:全体のデザインコンセプト

さらに、他の3つのArduino Nanoが冗長MBBシステムを構成します。 通信に関しては、MBBとSBBはI2CとArduino Wireライブラリを利用します。MBBはSBBに意図するバスの状態を伝え、SBBはマスターMBBに次のことを伝えます。PSBバス電圧、PSB電流、バッテリ電圧、クーロン数、バッテリ消耗状態、およびバス状態。

MBBのデザインコンセプト

図2に示すように、マスターバッテリブレーン(MBB)は、ヘッドノード内に3つの冗長化されたコントローラで構成されています。コントローラを実装するためのコードを付録Eに、ドキュメントを付録Dに掲載しています。

image

図2:MBBの回路図

この制御システムは、スマート電源システムの中心となる頭脳であるため、制御装置の故障に備えて冗長性が必要であり重要です。一度にメインマスターになるコントローラは1つだけで、このコントローラは、各バッテリの状態を判断し、バッテリのデータを収集し、ヘッドノードにあるAUVのコンピュータと通信する役割を担っています。他の2つのスペアマスターは、メインマスターの機能を常にチェックし、正常に通信していることを確認します。メインマスターから第1のスペアマスターへの通信が正常に行われなかった場合、このスペアがメインマスターとして引き継ぎ、サブコントローラとの通信を開始します。同様に、第2のスペアマスターは、メインマスターと第1のスペアマスターの状態を常に確認します。メインマスターと第1のスペアマスターの両方が故障した場合、第2のスペアマスターが電力システムの制御を引き継ぎます。このルーチンにより、3つすべてに障害が発生しない限り、常に1つのメインマスターがSBBを制御することが保証されます。MBBは、メインマスターの障害を検出し対処することに加え、次のようなことも行っています。

  • 9つのコンテナに対してバッテリデータの取得要求を送信
  • そのデータから、各コンテナのバッテリ残量を計算する
  • ヘッドノードにパワーシステムのデータを送信する
  • 後述するスマートスイッチングアルゴリズムにより、バッテリコンテナバスの状態を制御

バッテリコンテナのデザインコンセプト

潜水艇に搭載された9つのバッテリコンテナは、クリーンバスまたはダーティバスのいずれかに電力を供給します。各バッテリコンテナ内のSBBは、以下のタスクを実行します。

  • PSB(電源スイッチボード) の状態を制御する
  • PSBからデータ読み出す
  • バッテリのクーロン数を算出する
  • バッテリ残量判定を行い、その状態をMBBに伝える
  • MBBに要求されたすべてのデータを送信する
  • 通信切断プロトコル(後述)を含む

image

図3:バッテリコンテナのブロック図

さらに、電源断の際にArduinoの通信を分離するため、4066小型ICを使用しています。このICの必要性については、さらにテストのセクションで説明します。SBBのコードは付録Gにあります。SBBのドキュメントは付録Fにあります。

電源スイッチボード(PSB)の動作

電源スイッチボード(PSB)は、電源の流れを制御し、各バッテリからの測定値をマイクロコントローラが読み取れるよう調整を行う目的で使用されます。各PSBは潜水艇の1つのバスに専用に接続されており、その結果、各バッテリコンテナに2つのPSBが搭載されることになります。接続は下図4のとおりで、5V入力、4.5V-76V入力、電流検出、電圧検出、およびスイッチング制御の各端子を備えています。部品表、回路図、および製造用のEagle PCBファイルはSVNでご覧になれます。この基板は最大30Aで動作するように設計されていますが、長時間の放電電流は過熱の問題があるため、13A以下に抑える必要があります。

image

図4:PSBの接続

各端子の説明は以下の通りです。

Vin:各バッテリコンテナスイッチに配線されるメイン入力電圧です。この端子は回路構成上、電流を流すために最低でも約5V必要です。14Vを超えるとアナログ電圧センサの出力が5Vを超え、マイクロコントローラが電圧を読めなくなるため、14Vを超えないようにしてください。これは、分圧器の仕様を変更することで回避することができます。

Vout:出力電圧端子です。高負荷時にはこの端子の電圧が低下することがあります。

5V:VSense、ISense端子で使用する電圧フォロワ用の電源です。

VSense:Vin端子に比例した0~5Vのアナログ出力です。入力電圧は680KΩと470KΩの抵抗で構成した分圧回路で分圧され、ボルテージフォロア回路を経て、Vsense端子に至ります(図5)。

4.5-76V:電流検出IC用の電源電圧です。通常は5V端子にジャンパするだけです。

ISense:0.02Ωの抵抗に流れる電流に比例した0~5Vのアナログ出力です。この電圧はTASAアンプで測定されます。入力電圧は680KΩと470KΩの抵抗で構成した分圧回路で分圧され、ボルテージフォロア回路を経て、ISense端子に至ります(図5)。

Switching Control:ボードを介して電圧のスイッチングを行うMOSFETを制御します。この端子はノーマルクローズで配線されています。この端子が無電圧の時に電流が流れ、5Vで電流が止まります。

Switch Bypass:この端子は、通常、動作中には使用しません。トラブルシューティング用で、この端子はMOSFETのバイパスとなり、ボードが電圧と電流レベルを測定することができます。

image

Figure 5:PSBの裏面部品

トラブルシューティング

VSense端子に電圧が出力されない、または正しい電圧が出力されな い:ボルテージフォロワ回路が故障しているか、構成が正しくありません。不適切な電圧が測定された場合は、分圧回路を修正する必要があります。電圧が測定されない場合は、図5のオペアンプが5Vを受信していることを確認し、入力ピン3に5Vをジャンパしてください。オペアンプが正常に動作していれば、VSense端子に5Vが測定されるはずです。そうでない場合は、オペアンプを交換する必要があります。

ISense端子に電圧が出力されない、または正しい電圧が出力されない:ボルテージフォロワ回路が故障しているか、構成が正しくありません。不適切な電圧が測定された場合は、分圧回路を修正する必要があります。電圧が測定されない場合は、図2のオペアンプが5Vを受信していることを確認し、入力ピン3に5Vをジャンパしてください。オペアンプが正常に動作していれば、ISense端子に5Vが測定されるはずです。そうでない場合は、オペアンプを交換する必要があります。オペアンプが正常に機能している場合、図5のTASA電流アンプを交換する必要があります。

電源システムの部品表

電源システムの部品表
項目 品番 ディストリビュータ
Tenergy LiFePo4 20Ahr Tenergy
Arduino Nano 1050-1001-ND DigiKey
アルミ製バスバー
プリント基板(2層) Advanced Circuits
ワイヤ(14AWG)
ショットキーダイオード(40A) MBRB4030T4G DigiKey
オプトカプラ LH1540AT Vishay
オペアンプ MCP6231-E/P-ND DigiKey
MOSFET(Pチャンネル) IRF9Z10PBF-ND DigiKey
MOSFET(Nチャンネル) IRF520NPBF-ND DigiKey
パワーMOSFET FQP27P06-ND DigiKey
電流検知 MAX4080TASA±ND DigiKey
大電力抵抗器 PF2472-0.020-ND DigiKey
コンデンサ P6473-ND DigiKey
端子台(小型) 277-1273-ND DigiKey
端子台(大型) A98275-ND DigiKey
ヒートシンク EV-T220-38E DigiKey
I2CスイッチIC 568-1694-5-ND DigiKey
14ピンICソケット A100205-ND DigiKey

エコーバッテリスイッチング

エコーバッテリスイッチングは、SBBとの通信で受信したエコーでバッテリを切り替えるものです。前述のように、スマート電源システムは、AUVのミッションの間に9つのバッテリがオフとオンを繰り返すことになります。供給が途絶えると停電状態になるため、この電池の切り替えは完全にシームレスである必要があります。これを容易にするために、エコー状態、停電防止、過電流保護、および高度な電力消耗検出などの重要な項目が設計に盛り込まれています。

電源システムの目標は、負荷に確実に電力を供給することであり、AUVの電源システムはすべてのバッテリのバス状態を常に把握することでこれを実現しています。通信の遅延により、MBBがバッテリ状態の確認を受信する前に、バッテリの通信が送信状態にあると判断し、次の行動を起こす可能性があります。もちろん、通信の遅れが大きく、確認する前に別のスイッチングが起こった場合は、AUVに供給する電池がない、または少なすぎるという可能性があります。そのため、AUVに安定した電力を供給するために、通信時には常にバッテリ状態のエコーを受信しています。

スイッチングを行う前に、電源システムのコントローラはすべてのアクションの影響を分析する必要があります。この決定は、現在使用されているバッテリの数と、結果としてこの数を減らすために必要な切り替えを調べることから始まります。この数値が電流の過負荷や電源切断の原因となる一定レベル以下になると、次のスイッチングサイクルまでスイッチング割り当てができなくなります。これらのスイッチングサイクルは、バッテリ状態のエコーによって効果的に制御されます。エコーが最後に送信された状態と一致すると、スイッチングサイクルを再び開始することができます。サイクルを繰り返すことで、限られた電池の数でも、希望するすべてのスイッチをシームレスに発生させることができます。ミッション終盤のサイクルでは、使える電池が少ないため、この切り替えが難しくなることがあります。これを考慮して、システムは、供給能力が低い状況でシステムの電源要件を最適に満たすために、この安全な切り替え方法をバイパスするように設計されています。

ミッションタイムの終盤になると、消耗したバッテリが増えるため、高度な残量検出が非常に重要になります。クーロンカウントによるパーセント寿命の計算のほかに、電源システムのコントローラがバッテリの残量を予測し、信頼性の高い電力供給のためのバッテリの交換ができるようにする必要があります。そのため、各SBBはバッテリの状態(電圧や電流の特性)を常に分析し、バッテリが消耗しかかっているかどうかを判断しています。そして、電力を供給し続けながら、残量が少なくなってきたことをMBBに報告し、交換に必要な時間を確保します。

通信切断時の操作について

MBBコントローラとSBB間の通信に障害が発生した場合、適切な対処を行い、安定した電源供給を行う必要があります。通信が途絶える理由は様々ですが、結果的に電源システムがAUVに電力を供給し続ける必要があることは同じです。通信が途絶えている間、SBBは他のSBBの動きやシステムの電力需要を認識できません。SBBが認識するのは、クリーンバスとダーティバスの電圧と、どちらかのバスのバッテリの電流です。

通信切断は、MBBのミスでクリーンバスから電源が抜け、自分自身の電源が落ちる(リセットされる)か、他の一時的な通信切断が発生すると起こりやすくなります。通信が途絶えている間、各SBBは最後に指令された状態が適切であると判断することができます。通信切断が続いている間、SBBは各バスの電圧を監視します。バス電圧がゼロボルトになった場合、そのバスに供給しているバッテリはないものと考えて差し支えありません。その後、SBBのI2Cアドレスで決まる所定の遅延時間に基づいて、SBBはそのバスに切り替わり、その後のイベントに関係なくそのバスへの接続を確立します。これにより、通信が再開されるまでの間、電源を供給し続けることができます。

テスト

PSBの動作

このプロジェクトを始めるにあたって、私たちが受け取ったPSBのうち、完全な機能を持つものはごくわずかでした。電源システムを稼働させるためには、機能するボードが必要でした。テストが必要なデバイスは、ボードにスイッチング、アナログ電圧センシング、およびアナログ電流センシングを実行する機能を提供するコンポーネントでした。これらのボードを完全に組み立てた後、Vin端子に電源を接続してテストを行いました。バス端子にテスト用の負荷をかけると、電源のアンペア数が変化します。スイッチング制御端子に5Vを印加した後、正常に動作していれば電流は上昇/下降します。電流を流しながら、電圧と電流の検出端子を測定し、適切な電圧レベルを求めました。

テストの結果、5枚のボードに少なくとも1つの不良部品があることが判明しました。 特に電流検出回路は、電流検出ICとオペアンプの両方が搭載されているため、トラブルシューティングが困難でした。これは、オペアンプ電圧フォロワ回路に任意の電圧を入力することで分離されました。そこから、交換すべき部品が見つかりました。電源スイッチボードの詳細な説明は、電源スイッチボードのマニュアル、付録Cに記載されています。

image

図6:SBBとPSBのレイアウト

冗長MBBプログラム

電源システムの信頼性を高めるため、3つの冗長MBBを連携して使用します。これらは、プライマリMBBで障害が発生した後、冗長MBBが引き継ぐことを確認するためにテストされます。これは、I2Cのクロック端子にオシロスコープを当ててテストしたもので、動作中はこの端子が矩形波を読み取ります。第1のMBBを取り外した後、クロックパルスが一時的に停止しました。これは、マスターが存在しないために通信が停止したことを示します。クロックパルスが再開された直後、第2のMBBが引き継いだことが表示され確認されました。第2のMBBを取り除いた後、第3のMBBを使っても同じ結果を得ることができました。このことは、プライマリMBBが失われた後、必ず別のMBBが引き継ぐことを示しています。これを検証した後に、MBBのプログラムに変更を加え、通信障害が複数回発生しても引き継げるようにしました。2つのMBBが同時にマスターになろうとする期間があったため、この措置が必要だったのです。冗長化されたMBBプログラムのコードは付録E、Doxygenのドキュメントファイルは付録Dにあります。

image

図7:マスターバッテリブレーンボード

I2C通信

電力システムは、すべてのマイクロコントローラが互いに通信するためにI2C通信を使用しています。電力システムを機能させるためには、これが正常に動作することを確認する必要があります。これは、MBBとの通信時のシリアル出力を見ることで検証しました。これを見ることで、通信バス上のすべてのSBBからの正常なデータを確認することができました。

テストでは、SBBの電源が落ちると通信が停止する現象が確認されました。ロジックアナライザで調べた結果、通信線がグランドに引き込まれていることがわかりました。これは、電源OFF時にArduinoのピンがグランドに落ちた結果です。この問題を解決するために、4066のアイソレータICを挿入しました。このICを搭載することで、電源切断後の通信再開を確認することができました。

3台の冗長MBBをすべてシステムに実装し、3台のSBBをアクティブにした状態で、断続的に通信に問題が発生するようになりました。オシロスコープでI2Cのクロックパルスを見ると、通信が停止していることが確認できました。調査の結果、I2Cラインのプルアップ抵抗のサイジングが根本的に重要であることがわかりました。冗長MBBのそれぞれにプルアップ抵抗を設定していたため、Arduinoのピンがプルダウンする電流が大きすぎたのです。このテストの後、I2Cバスを変更して、プルアップ抵抗を4.7KΩの1セットだけにしました。すると、図5のような波形を確認することができました。このことから、I2Cバスは搭載するデバイスの数や使用するプルアップ電流の量に敏感であることがわかりました。今後、バスサイズを変更する場合は、下図のようにクロックピンの波形が同じになるようにプルアップ抵抗を調整する必要があります。MBB内のI2C通信設定の回路図を付録Bに示します。バッテリコンテナ内の I2C 絶縁の回路図を付録Aに示します。

image

図8:プルアップ抵抗のサイズを適切に設定した場合のI2Cクロックの波形

スマートスイッチングアルゴリズム

MBBは、電流の過負荷や電源喪失を防ぐために、SBBのバッテリバスの状態を調整する必要があります。MBBプログラムに擬似負荷をかけ、その結果発生するバスの状態の変化をロジックアナライザで見て、電流の過負荷をテストしました。その結果、MBBは各バスのバッテリの数を自動的に調整し、電流を理想的な値に保ちました。これにより、スマート スイッチング アルゴリズムの電流自動調整機能が正常に動作していることが証明されました。その変化の様子を見ることで、毎回のように遅延が発生し、エコーの切り替えが行われていることが確認できました。また、切り替えの際に、各バスのバッテリの数が1個以下になることはなく、システムに安全に電流を供給できる最小の数を下回ることがないことも確認されました。MBBプログラムのこのスイッチングのコードは付録Eに、Doxygenのドキュメントファイルは付録Dにあります。

バッテリ残量検知

バッテリが消耗した後、システムから取り外されますが、取り外す前にMBBに通知されることを確認する必要があります。バッテリの機能劣化を防ぐために、バッテリ残量検知を行うことが必要です。電源をバッテリに見立てて、残量検知のテストを行いました。電圧をカットオフ値以下にすると、SBBは短時間電力を供給し続けますが、MBBには使用不可と報告します。この機能はロジックアナライザとMBBのシリアルプリントで確認しました。ロジックアナライザで、SBBが実際にPSBをオフにするよりもかなり前に、消耗したバッテリのバス位置に新しいバッテリが設定されていることを確認しました。このテストの後、SBBを消耗状態にロックするようにビットを設定しました。この変更が必要なのは、バッテリの負荷を外すと、バッテリの電圧がカットオフ値を超えて上昇するためです。電圧レベルが変動すると、SBBはバスのオンとオフを繰り返すことになります。バッテリ残量検知のコードは付録Gに、Doxygenファイルは付録Fにあります。

バッテリ放電の最適化

電源システムは、バッテリの寿命ができるだけ延びるようにテストが必要です。これは放電特性を用いて検証しました。1A、15Aで放電させた結果を図9に示します。その結果、MBBのコードに理想電流の項を設け、理想電流に基づいて各バスのバッテリの必要個数を決定するようにしました。

image

図9:低/大電流によるバッテリ放電テスト

結論

AUVスマート電源システム設計グループは、その目標を見事に達成しました。バッテリコンテナの内部設計、冗長MBBの設定、および電力システムのMBBとSBBのプログラムを製作しました。私たちは、このシステムの機能を完全にテストし、AUVの必要な電力を供給できることを確認しました。MBBはI2CでSBBを安全に管理し、安定した電力を供給します。通信が途絶えた状態でも、SBBへの電源供給が可能であることが確認されています。私たちの目標は、卒業設計学期の過程で着実に達成され、最後に仕事に追われるということはほとんどありませんでした。計画された予算内に収まり、受け取った電力システムの資金にはまだ余剰があります。卒業設計の成果として、完全に機能する3つのバッテリコンテナの内部装置と冗長化されたMBBシステムを実現しました。

電源システムの仕様は、一部の未確認の要件を除き、大半を満たしました。バッテリセルを含め、すべての部品で、2000psiのクラッシュテストを行っています。ミッション期間中の電力要件を計算し、2時間の緊急予備用の容量は減少しているものの、3時間のミッションに電源供給することができました。温度仕様のテストはテスト装置がないためできず、フルシステムの圧力テストはサイズの制限のためできませんでした。なお、テスト中も通信要件は満たされていました。

今年は電源システムに大きな影響を与え、機能するプロジェクトを生み出しました。 このシステムを本格的に活用するには、今後も研究が必要になります。指示された以上のタスクをドキュメントで提供することができました。今後の課題としては、冗長MBBを搭載するための回路基板の設計から始める必要があります。そうすることで、ヘッドノードに搭載するためのより完成度の高い製品が出来上がります。このプロジェクトに参加した際、電力の流れを制御・測定するためのPSBを渡されました。これらのボードはうまく機能しますが、上位レベルの電流処理能力としては長期放電をサポートしていません。 また、クリーンバスとダーティバスを切り替えるには、各バッテリ コンテナに 2 つのPSBが必要です。PSBの設計を見直せば、2つのボードを1つのPSBに統合し、SBBの実装を含めることも可能でしょう。電圧レギュレーションについてこのプロジェクトでよく議論されましたが、電圧レギュレーションが必要で、電流レギュレーションを回路に含めることができれば、これも将来の仕事となり得るでしょう。さらに、システムの多様性を高めるための変更点として、SBBにおける高度な通信切断対応、冗長MBBにおけるボーティングシステムなどを挙げることができます。AUVの完全な運用を実現するためには、少なくとも9個のバッテリコンテナを製造することが今後の課題となっています。現在、完全に機能するバッテリコンテナを1つ、さらに2つのバッテリコンテナの内部のみを生産しています。より多くのバッテリコンテナが製造された後、内部構造も同様に構築および設置されると思われます。

AUV推進制御

AUVシニア設計プロジェクトのこの部分は、2つのタスクを実行できる電子回路を作るというものでした。最初の課題は、SDSM&Tの自律型潜水艇(AUV)の主スラスタと副スラスタを制御することです。2つ目の課題は、フレームに取り付けられた力変換器と連動させることで、制御エンジニアが推進システムのシステム同定を実行できるようにすることです。完成したシステムは、高度なマイクロエレクトロニクス回路の知識がないエンジニアでも利用できるようになっており、そのために、エンジニアの補助としてユーザーガイドを作成しました。

設計開発

私が電子推進制御のリードエンジニアとして採用されたとき、チームリーダーは図10に示すような設計仕様を提示しました。

image

図10:設計仕様

これらの要件に対して、図11のブロック図を作成しました。

image

図11:開発ブロック図

最終的な設計には、USB通信機能、LCDインターフェース、複数の汎用入出力ポート、小型化、およびプロセッサ速度などを考慮して、AtmelのXMEGAB1開発ボード(Digi-Key品番 ATXMEGAB1-XPLD-ND)を選びました。

モータのPWM制御(航行中モード)

AtmelのXMEGAB1は、AVRオンチップデバッグシステム(Digi-Key品番 ATJTAGICE3-ND)を使用してプログラムされます。

航行中モードでは、PWM(Pulse Width Modulation)方式でモータの回転数を制御しています。モータに電流を供給するために、Turnigy Car 60電子速度コントローラ(ESC)を使用します。これは、400HzのPWM信号を受け入れ、84%のデューティサイクルで完全な順方向電力を提供し、36%のデューティサイクルで完全な逆方向電力を提供します。 デッドバンド(アイドル電力)は58~62%です。16ビットのTIMER0を出力比較モードで使用して波形を生成し、過電流と過少電流の保護を行うルーチンを使用しています。TOP値をソフトウェアで変化させることで、モータの回転数をフルレンジで選択できるようにしています。またルーチン全体が割り込みサービスルーチン(ISR)によって実行されるため、プロセッサの待ち時間がなくなります。

モータのPWM制御(システム同定モード)

システム同定モード(AUVはテスト構成)では、周期、周波数、および変調をソフトウェアで制御して作成した正弦波に従って、パルス幅変調(PWM)でモータ速度を制御しています。出力比較モードで同じ16ビットTIMER0を使用して前と同じように波形を生成し、16ビット分解能の正弦値を参照してTOP値を調整します。正弦値はルックアップ テーブル(付録2) で参照します。

スロットル制御(航行中モード)

現在の構成では、10KΩのポテンショメータのスロットルで、スラスタスピードのコマンドを出しています。私はICのADCを使って電圧をデジタル値に変換し、プログラムが速度コマンドに対応できるようにしています。ADCの1チャンネルを初期化してスロットル値をソフトウェアでサンプリングし、ISRで10ビットADC値をアルゴリズムに取り込むことで、プロセッサの遅延を減らしています。ADCのコーディングについては、Scott Schmit氏に協力してもらいました。

液晶ディスプレイ

私はXMEGAの液晶ディスプレイを使用して、電圧として表示される電流のPWM値と、回路が設定された動作モードを表示させます。この仕組みについては、Scott Schmit氏のwikiを参照してください。図12に表示例を示します。

image

図12:液晶ディスプレイの例

Scott Schmit氏のコードを改変し、図12に示すような2つのデータ行とアイコンを用意しました。バーグラフのアイコンは、エンジン回転数の全選択範囲をグラフィカルに表示します。このシーケンスでは、ボードが航行中モード(U)に設定されていることを示しています。

力変換器の読み取り

私のプログラムは、2mV/Vまでの定格電圧を持つあらゆる力変換器を読み取る機能を備えています。現在、AUVテストタンクにはテストフレームが設置され、OmegaのLCUB-100Gロードセル力変換器が取り付けられています。現在、ゲイン100を実現するアンプボードを回路に組み込んでいますが、ATXMEGA 128B1のADCにはゲイン64のオプションもあるので、アンプは必要ありません

ロードセルのADC値は、スロットルの読み込みと同じ方法で読み込むので、プロセッサの遅延に影響されません。

システム同定のためのダイアグラムを図 13 に示します。

image

図13:システム同定ダイアグラム

データ抽出(システム同定)

システムの識別セッションが完了したら、ユーザーが力変換器の値をVT100ターミナルエミュレータにダウンロードできるようにしました。これにはAtmelが提供するUSBライブラリ機能を使用し、XMEGAB1ボードのCommunications Device Class(CDC)接続を生成しています。これはWindowsのデバイスマネージャに仮想通信ポートとして表示され、ArduinoのSerial Printや他のマイコンボードのprintfやscanfに似たシリアル通信を可能にします。

USBでPCとボードを接続したら、ターミナルエミュレータ(私はTeraTermを使っています)を開き、ロギング機能とタイムスタンプを有効にして、時間値の入ったデータファイルをダウンロードします。Excelでデータファイルを開き、MATLABにデータを転送して処理します。私の手順とMATLABのコードは付録3にあります。

モジュールの構成

テストスロットル(航行中モードに使用)は、10KΩのポテンショメータ(Digi-Key品番 P3G7103-ND)です。このモジュールは、6つの独立したスラスタを制御するために6つのコントローラを収容するように設計されているので、25mmのスタンドオフ(Digi-Key品番 25506K-ND)を使用して、基板のサポートと間隔を確保しました。

テストと評価

XMEGAB1で推力(前進のみ)を正弦波状に16秒周期で変化させる設定にして、システム同定機能をテストしてみました。私のテストの主眼は、ICチップからデータを取り出す機能の評価であり、堅牢な制御プロセスアプリケーションを実行することではありませんでした。このテストでは、AUVのスマート電源バッテリシステムに接続し、SDSM&T AUV Team Senior Design Demo 2013 - YouTubeで見ることができるテストの動画記録を作成しました。

図14に示すようなプロットが得られました。

image

図14:テスト信号

航行中モードのテストでは、XMEGAにテスト用のスロットルを入力するように設定し、フルリバースからフルスロットルまでのスラスタの動作を確認しました。テストの様子は、YouTubeの動画でもご覧いただけます。

まとめ

私は、AUVのスラスタを電子制御するための実用的なソリューションと、推進システムのシステム同定を開始するための調整可能なアルゴリズムを紹介しました。ユーザーはクイックスタートガイド(付録4)を参照することで、すぐにモータの操作を開始したり、制御テストを行ったりすることができます。

将来的には、制御エンジニアは図4のようなシステムの詳細な検討を始めることができます。電気/コンピュータ技術者は、より正確な正弦値計算を行うために、32ビットプロセッサ(おそらく浮動小数点演算機能を持つもの)にコードを移植することを望むかもしれません。すべてのスラスタが完成したら、これらのプロセッサを積み重ねて配線すると、6基すべてのスラスタアセンブリを制御することができます。

付録

Appendix A.pdf (73.5 KB)
Appendix B.pdf (80.8 KB)
Appendix C.docx (441.8 KB)
Appendix D.pdf (110.3 KB)
Appendix E.docx (35.8 KB)
Appendix F.pdf (114.6 KB)
Appendix G.docx (29.0 KB)




オリジナル・ソース(English)