ScilabによるモーターMILS

ScilabによるモーターMILS scilab

はじめに

scilab/xcosで以下を実施。

  • モーターの動特性を持ったモータープラントモデルの作成
    • モーターといってもブラシ付きDCモーター
    • モーターの先の負荷は一旦無視。(つまり空転状態)
  • そのモーターを制御する制御モデルの作成
  • さらにそれらを合体させてMILSにする。

本モデルで使用している伝達関数導出は以下で説明している。

MATLAB/Simulink版は以下の記事で。

モデルファイル等はこちら
https://github.com/KEIKEI999/MotorMILS

GitHub - KEIKEI999/MotorMILS: MATLAB/SimulinkとScilab/xcosで作ったモーターMILS
MATLAB/SimulinkとScilab/xcosで作ったモーターMILS. Contribute to KEIKEI999/MotorMILS development by creating an account on GitHub.

構成

  • モーターの角移動量の制御を行う
    • 制御方式はPID
    • パラメータは固定とし、持ち替えなどは行わない
  • モーターへの制御指示は電圧とする
    • ※実際の制御の場合はPWM制御でDuty[%]指示になるが、平均電圧と解釈すれば根本的には一緒とする。
  • モーターモデルは電圧⇒電流⇒トルク⇒実トルク⇒角加速度⇒角速度⇒角移動量の順で伝達するモデルにする
指令器、モーター角移動量の指示、制御モデル、モーター駆動電圧、モーターモデル、モーター角移動量

プラントモデル

  • xcosであれば、Simulinkとほぼ同じノリで作成可能
    • Simulinkにある一般的なブロックは大体存在する。
    • StateFlowはさすがになかった。
    • 制御フロー系のブロックも無い
      • If Action Subsystem , Switch case Action Subsystemなど
  • モーターの一般的な伝達関数をベースとしている。(別途解説予定)
モータープラントモデル

制御モデル

  • SimulinkのTriggered Subsystemに相当するブロックは存在しない様子。
    • よって、サンプル&ホールドを各所に配置して、無理やり離散化
    • もしかしたら、入力ポート直後でサンプル&ホールドするだけで離散化されるのかもしれないが。
    • どちらにしても\(1/Z\)に対してクロックは必要
  • プラントのところでも書いたが制御フロー系ブロックがないので、条件分岐はかなり大変そう
    • 今回のモデルには条件分岐は存在しないのでとりあえずOK
制御モデル、モータ

指示器

  • Simulinkと同じく、Signal Builderがあったので、それで指示値を0~10秒の間で上記のように作成。
    • Signal Builderで0.0~1.0の範囲で値を作り、外部に100倍Gainを設置する
      • Signal Builderで0.5を指示すれば50[rad]の角位置まで進めって指示になる。
simulation結果

MILS化

とりあえず全部合体。

MILS化、10ms周期で駆動、指令器、制御モデル、プラントモデル

シミュレーション結果

シミュレーション結果、指令値、実移動量、一応それっぽく追従している

モーター電流、モータートルク、角加速度、角速度

まとめ

  • 数値解析シミュレーションとしてはScilabもMATLAB/Simulinkと同程度の性能を持ってはいる
    • 操作性などが若干面倒だが。
  • ただし、制御フローブロックやStateFlowがないため、制御モデルの作成にはかなり難がある。
    • Switchブロックを駆使すれば、理論上可能だとは思うが、可読性、拡張性が悪かったりで、あまり勧められない
  • MATLAB/Simulinkほど情報量が豊富ではない
  • 構想段階の研究、実験目的であれば十分利用可能

MATLAB/Simulink版は以下の記事で。

コメント

タイトルとURLをコピーしました