はじめに
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]の角位置まで進めって指示になる。
- Signal Builderで0.0~1.0の範囲で値を作り、外部に100倍Gainを設置する
MILS化
とりあえず全部合体。
シミュレーション結果
まとめ
- 数値解析シミュレーションとしてはScilabもMATLAB/Simulinkと同程度の性能を持ってはいる
- 操作性などが若干面倒だが。
- ただし、制御フローブロックやStateFlowがないため、制御モデルの作成にはかなり難がある。
- Switchブロックを駆使すれば、理論上可能だとは思うが、可読性、拡張性が悪かったりで、あまり勧められない
- MATLAB/Simulinkほど情報量が豊富ではない
- 構想段階の研究、実験目的であれば十分利用可能
MATLAB/Simulink版は以下の記事で。
コメント