はじめに
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[%]指示になるが、平均電圧と解釈すれば根本的には一緒とする。
- モーターモデルは電圧⇒電流⇒トルク⇒実トルク⇒角加速度⇒角速度⇒角移動量の順で伝達するモデルにする
![指令器、モーター角移動量の指示、制御モデル、モーター駆動電圧、モーターモデル、モーター角移動量](https://www.simulationroom999.com/blog/wp-content/uploads/2020/03/ScilabMotorMILS1-1024x329.png)
プラントモデル
- xcosであれば、Simulinkとほぼ同じノリで作成可能
- Simulinkにある一般的なブロックは大体存在する。
- StateFlowはさすがになかった。
- 制御フロー系のブロックも無い
- If Action Subsystem , Switch case Action Subsystemなど
- モーターの一般的な伝達関数をベースとしている。(別途解説予定)
![モータープラントモデル](https://www.simulationroom999.com/blog/wp-content/uploads/2020/03/ScilabMotorMILS2-1024x442.png)
制御モデル
- SimulinkのTriggered Subsystemに相当するブロックは存在しない様子。
- よって、サンプル&ホールドを各所に配置して、無理やり離散化
- もしかしたら、入力ポート直後でサンプル&ホールドするだけで離散化されるのかもしれないが。
- どちらにしても\(1/Z\)に対してクロックは必要
- プラントのところでも書いたが制御フロー系ブロックがないので、条件分岐はかなり大変そう
- 今回のモデルには条件分岐は存在しないのでとりあえずOK
![制御モデル、モータ](https://www.simulationroom999.com/blog/wp-content/uploads/2020/03/ScilabMotorMILS3-1024x300.png)
指示器
- 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を設置する
![simulation結果](https://www.simulationroom999.com/blog/wp-content/uploads/2020/03/ScilabMotorMILS4-1024x373.png)
MILS化
とりあえず全部合体。
![MILS化、10ms周期で駆動、指令器、制御モデル、プラントモデル](https://www.simulationroom999.com/blog/wp-content/uploads/2020/03/ScilabMotorMILS5-1024x444.png)
シミュレーション結果
![シミュレーション結果、指令値、実移動量、一応それっぽく追従している](https://www.simulationroom999.com/blog/wp-content/uploads/2020/03/ScilabMotorMILS6-1024x593.png)
![モーター電流、モータートルク、角加速度、角速度](https://www.simulationroom999.com/blog/wp-content/uploads/2020/03/ScilabMotorMILS7-1024x862.png)
まとめ
- 数値解析シミュレーションとしてはScilabもMATLAB/Simulinkと同程度の性能を持ってはいる
- 操作性などが若干面倒だが。
- ただし、制御フローブロックやStateFlowがないため、制御モデルの作成にはかなり難がある。
- Switchブロックを駆使すれば、理論上可能だとは思うが、可読性、拡張性が悪かったりで、あまり勧められない
- MATLAB/Simulinkほど情報量が豊富ではない
- 構想段階の研究、実験目的であれば十分利用可能
MATLAB/Simulink版は以下の記事で。
コメント