接点 ON/OFF なり 4-20mA なりを電気信号で PLC に入力すること。 はじめに 今回の話題はDCモータをHブリッジにより駆動する際の Locked Anti-Phase PWM方式と Sign-Magnitude PWM方式の それぞれがどの様なもので どの様な違いがあるのかを説明させて頂きます。 モータ制御に関連して僕が実際に作ったロボットの話題を一つご紹介します。 激しく電流が上下するのが確認できます。, 問題があるかもしれないのですが、以後、暫定的にデッドタイムを2μsとしPWM周期の1%にすることとします。 常に正転と逆転の指令を入れ替えています。 FETのONとOFFについては様々なところで解説されていますが、下図にあります様にゲートにあるとみなせるコンデンサの充電と放電をする必要があります。 ここでは仮にインダクタンスが500μHになったと仮定します。, リップルが大きく感じられます。インダクタンスを大きくしても周期200μsはまだ長いのだと思います。 ぶっちゃけ、多少の小銭があり数点の出力点数で良いのであれば、この方法で良いと思う。, ただ、実際には配線工事が必要だったり、信号点数が多いとPLCユニットが苦しくなる。 全日本学生飛行ロボットコンテストマルチコプタ部門 1位, ※注1 当ブログに書いている意見は個人的意見であり、所属する組織の意見ではございません。, ※注2 当ブログの記事はできるだけ間違いがないよう気を使っていますが、間違いも多分にあるかと思われますので、記事の内容をお使いなる際には自己責任でお願いいたします。, Pythonで考えるDCモータの制御(10)PWM制御におけるLocked Anti-Phase方式とSign-Magnitude方式について, https://www.modularcircuits.com/blog/articles/h-bridge-secrets/lock-anti-phase-drive/, ①はストップモードでFETに内臓のダイオードでダイオードがONならば電流がGNDから電源方向に流れます, ②は正転です正転逆転は相対的な基準です。今回は図のようにモータに電流が左から右に流れている状態です, ④はハイサイドのスイッチが全てOFF、ローサイドのスイッチが全てONでローサイドで電流が還流できるようにしています。. また、機能ごとに .py ファイルを分けて作っておくと GUI から呼び出す時に使いやすい。, まずは始めから自動で記述されている大量の using System.~ に続けて以下を追加する。, 次にpython 実行環境を public partial class 直下で宣言する。, ここで Python インタプリタの位置が分からないときは Python 環境で以下を実行すると絶対パスが教えてもらえる。, 実行してみると Python の計算結果が C# に取り込めている事が分かる。 matplotlibを使えばpythonで簡単にグラフを描画するすることが出来ます。以下matplotlibの使い方について、まとめます。 関数の描画 まずは、2次関数のグラフを描画します。 Jupyter Note... matplotlibをつかうとpythonで以下のようなアニメーションをつくることが出来る。 Jupyter Notebookを使う場合は先頭に %matplotlib nbagg をつける必要がある。 ... Jupyter Notebookでリカッチ方程式を解くために、slycotとcontrolをインストールします。 pipだとエラーが出たのでcondaでインストールする。 !conda install slycot --yes... Arduinoからpythonに数値を送る場合と,pythonからArduinoに数値を送る場合についてまとめる.pythonからArduinoにシリアル通信で数値を送ろうとすると,文字に変換されててうまくいかないので文字を数値にむりやり変換する。. PWM周期をもっと大きくしなければなりません。, ところが、仮にデッドタイムを2μsとしてそれをPWM周期の1%に相当するとすると、周期は200μsです。 By following users and tags, you can catch up information on technical fields that you are interested in as a whole, By "stocking" the articles you like, you can search right away. マニュアルによれば MX Component は Visual C++ や C# など .NET 環境で使えるとのこと。 そこで困るのが、どうやってこの PC(Python) と設備の PLC をつなぐんだろう、ということ。, ⇒ 良い感じで解析できてるけどアウトプットにつなげられず 悶々とする。 PWM制御を理想的に行うためには悪影響を及ぼします。, 試みに、デッドタイムを全体の1%にあたる10nsに設定して、OFF時間が長い方の計算をやり直してみます。この際、OFF時間は同じ600nsでデッドタイムを変えた分はON時間を380nsにして全体周期は同じにしています。 ゲートの充電・放電, さらに放電時間に加えてそれぞれのFET特性のターンオフ時間が加わり確実にOFFしきるまでの時間が算出されます。 機械学習のモデリングスコアが ## なんです!と言っても共感してくれる経営者など存在しない。 当時のモータ制御の参考は以下のページでした。 学生時代に情報系とオサラバしたはずが、社内情勢のため昔取った杵柄を引っ張り出し中。 今回の検討でデッドタイムをおろそかにできないと何となく解ってきたので次に自分で作るときに設計に生かせるかと思っています。, LAP方式が好きな理由として制御法則がそのまま適用できると言う噂がありましたが、それについては真実と考えて良いようです。, LAP方式とSMB方式の比較と優劣ですが、それが判るほどにはいったってないかなと思いますが、SMB方式は波形があまり美しくない感じがします。 よしんばコストや品質を計算したとして、で、どうやってやるの? Hブリッジのスイッチ状態による4つのモード, PWM駆動でモータを制御する場合に理屈通りにON・OFFをすると、ON・OFFのディレイのためにハイサイドとローサイドのスイッチが同時にON状態になりFETが発熱し危険な状態になります。, そこで、PWM駆動回路においてはON・OFFの遷移の際にハイサイドとローサイドが両方ともOFFの時間を設けて両方がONになることを防ぎます。この時間をデッドタイムと呼びます。, デッドタイムについてはFETが確実にOFFしきるまでの時間以上の時間を設ける必要があります。 ここまでたどり着けば、ビットデバイスを使ってスマート保全的に警報を出すなり、 PID制御とは何か、pythonでシミュレーションをしながら解説します。 シミュレーションについては以下の記事で紹介しています。 pythonでバネマスダンパ系のシミュレーション(オイラー法) 理工学系とくにロボットやドローンごくたまに投資に関する計算・プログラミング等の話題を扱って、そのようなことに興味がある人たちのお役に立てればと思っております。, 飲み食いも大好きなので、おいしいお店や美味しいお酒に出会ったときは、そんなことも書きたいと思っています。, 過去の受賞歴(個人として) マイクロマウス フレッシュマン競技2位 角速度の波形はステップ応答の波形に近く線形解析の結果とほぼ同じです。 ワードデバイスを使って PID 制御をかけてみるなり、やりたい放題である。, C# で Python 実行でなく .py >> .exe と変換して exe 実行も検討したが、 角速度にもデッドタイムの影響があるのが確認できます。, これは、波形全体の時間、すなわち1周期の長さが1μsに対してデッドタイムが100nsと1割の時間を占めているため顕著にみられるものです。デッドタイムは上下のFETの短絡を防ぐためには必要ですが、 """, [4] Inter-process communication between C# and Python (Windows デベロッパーセンター), you can read useful information later efficiently. 厳密にはとてもとても長い時間がかかってしまっていたものと思われる。, 以上の顛末にて Python で生産設備を制御する仕組みは構成できた。 3) PLC [三菱 Q-PLC]. まだよくわかってませんがGANを使ったら性能上がるのでしょうか?, 最近Twitterが面白くなってきて、そちらで遊んでいたのでブログが疎かになっていますが、ブログも頑張っていこうと思います。, 僕のペースでは3週間に2本ぐらい更新できれば今のところ精一杯なのかなと思います。 What is going on with this article? """ FETとモータでHの字を形成している様に見えるのでHブリッジ回路と呼ばれています。, 4つのスイッチのON・OFFのしかたで以下に示す4通りのモードがあります。 よってシーケンスは正転と逆転で場合わけされて, ストップモードは電源をそれまでとは逆に接続した状態になったと見做せますので、電流は鯉の滝登り状態となり急激に減衰します。 理想的にはデッドタイムが入らず1周期の電流波形はきれいな「へ」の字であることが期待されますが、OFF時間の長いほうの計算結果では明らかに「へ」の字ではなく、波形の最後が反転しており「Z」字になっています。 Numpy や Pandas を import した .py ファイルが .exe に変換できず断念。 PLC にさえ値が入ればこっちのもの なのに、それ以前の実装に壁が存在するのが実情だろう。, 現場エンジニアがこの壁を乗り越えてイキイキ仕事できる事を願って、今この文章を書いている。, 主として以下のようなフィールド側エンジニアを対象にする。 最も簡単なのは Python でデジタル/アナログ出力を制御して、 これで PC -----> 三菱 PLC 通信は保証される。 何回も読んでモータドライバを作りました。, これらのうちLAP方式がリニアな制御理論に一致する制御結果が現れると言うことでそちらを採用してモータドライバを動かすことにしました。, 今回は、LAP方式とSMB方式の挙動の違いに関してシミュレーションを通じて概観してみたいと思っています。, LAP方式はモータに印加する電圧の極性が常に入れ替わる方式です。 PWM制御の2方式, モータ駆動の正転・逆転駆動回路の基本はHブリッジ回路というもので4つのスイッッチ(下図ではNchFET)を下図の様に配置します。 長い記事をここまで読んで頂きましてありがとうございます。, 以下のページは大変参考になります。もうすこし読み込んで本記事にも反映させたいところです。, https://www.modularcircuits.com/blog/articles/h-bridge-secrets/lock-anti-phase-drive/ 頑張れる時は頑張ろうと思いますが、まずは無理しないで継続を目指します。 ランサーロボットのモータドライバも自作したのでそのときからですので20年ほど前になります。 全ての方式に速度目標値が500rad/sのPI制御をかけて比較しました。ゲインの設定も3方式とも同じものを使いました。, LAP方式がリニア制御に近い特性を持つと言う話を聞いたことがあるのですが、この結果をみるとかなり近いと感じました。ほぼ傾向は一緒です。 ・Python で生産設備を制御したい(制御するネタを持っている)人 ・昨今の製造業ではトップダウン/ボトムアップでの AI 導入が盛んになりつつある 1717モータの電気的時定数は16μsなのでそのおおよそ20倍ぐらいの長さになり長すぎます。, 以下は、1717モータをLAP方式でこの値で動かした場合のシミュレーションの結果です。 なので、デバッグ用などで余計な print 文を書くと思い通りに動かないので注意する。 正転指令の時間が逆転指令の時間より長ければ正転しますし、短ければ逆転します。 フィードバックの一種で、PID制御と言うものがあります。この記事では、PID制御をPythonで2通りのやり方で実装してみます。 方法1 matpllotlib のライブラリを使用 実行結果 方法2 ライブラリを使わずに自分で書く 実行結果 解説 参考文献 方法1 matpllotlib のライブラリを使用 プログラム… Python 自体が遅いというところは Cython なり何なりで高速化するとして、 PWM制御ではパルスの幅をDutyと呼びパーセント(%)で表すことが多いのですが、Duty100%が正転の最大値、Duty0%が逆転の最大値になりDuty50%が停止となります。, SMB方式はPWM1周期の中はオンとブレーキの切り替えだけが起こります。オンの時の極性はその都度変更されますが、1周期の間に極性が変わると言うことはありません。, もしかしたら、普通にロボットを動かすとこちらを採用していることが多いかもしれません。, モータに付加する電圧の与え方で両者を比較してみたのが次の図です。 特に、主たる生息地がフィールド側 (リレー接点とか4-20mAとか) のエンジニアにとっては、 実機では何か悪いことが起こりそうな気がします。確か、実機でやると、速度0付近で思ったのと違う挙動をする記憶があります。, 1717モータのようなインダクタンスの小さなモータはLAP方式はかなり厳しいかもしれません。FETの性能をよく調べて、チョークコイルの付加等を考慮して [言語] C++, Python, 三菱PLC(言語?). つまりPWM周期は200μsということでPWM周期は5KHzと言うことになり、自分的にはPWM制御をするためには50KHzや100KHzをイメージしていたので、それに比べれば遥かに遅く違和感がありますがこの件の検討は後日行うものとし、これで話を進めます。, この場合チョークコイルを接続してインダクタンスを大きくすることを想定しています。 Python + Visual Studio 環境をセットアップした PC を設備 PLC に接続して動かすイメージ。 それを再現できないので、後日の課題とします。, ようやく、ダイオードのモデルを適用して、ストップモードの回路方程式を立ててみます。 Sign-Magnitude Drive | Modular Circuits, Sign-Magnitude Drive (Modular Circuits和訳記事) - まんじゅう日記, まずは,ルンゲクッタ関係の関数の定義です。 (IT に疎い会社ではコマンドプロンプトを見せるだけで拒絶されるケースがあるので GUI も重要), ポイントは print 実行で Python → C# と値を渡すところ。 PID制御とは何か、pythonでシミュレーションをしながら解説します。シミュレーションについては以下の記事で紹介しています。, まず、質量のある物体( 制御対象 )に力(制御入力)を加え、ある値に収束させることを考えます。, 下図は縦軸が位置、横軸が時間を表しています。このようにxの値が0に収束するような制御入力の与え方をいろいろと試していきます。, xの値を0に収束させたい。そんなとき、どうすれば良いか。一番に思い付くのは、xが大きければ負の方向に力を加え、xが小さければ正の方向に力を加えることでしょう。, 目標値と現在値の差に応じて、力の入力を変えればうまくいくのではないか。つまり、目標値との差に比例した制御入力を与える。, これは単振動。"位置に比例した力"はバネと同じなので、収束しない。(抵抗とかあったら収束する), ここではノイズを考慮しないが、ノイズがある場合は微分値にローパスフィルタをかける必要がある。 (ノイズでギザギザの値は微分できないから)ローパスフィルタをかけた微分を不完全微分という。ローパスフィルタについては以下の記事で紹介しています。, PD制御だと、目標値付近ではほとんど入力が無くなる→無限時間経たないと完全には0に収束しない。そこで、積分成分を追加する。いつまでも正の位置にあれば負の方向へ、負の位置に居れば正の方向へ制御入力が増えていく。, 次回のコメントで使用するためブラウザーに自分の名前、メールアドレス、サイトを保存する。, このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください。, Windowsのキー配置入れ替え(mac風の入力切り替え&Caps Lock撲滅), pythonでバネマスダンパ系のシミュレーションを行い、グラフを描画します。今回はオイラー法を用います。, Arduinoのローパスフィルタのスケッチを紹介します。センサのノイズがひどいときなど、何らかのフィルタを入れると効果的です。ここでは、移動平均フィルタ、RCフィルタ、メディアンフィルタについてのサンプルスケッチを紹介しています。.