• 締切済み

ストップウォッチ

油圧シリンダの弁をADボードを用いて外乱(構造物の地震による揺れ)を採取し、それに対してPID制御で調節する研究をしています。この制御は、あらかじめサンプリングクロックを設定し、あるサンプリング数に達したら、その度にswitch文を用いてを制御イベントが発生するプログラムとなっています。しかし、大まかには出来たのですがサンプリング周期がまだ目標には達していなく(目標サンプリング周期1ms)、プログラムをいじっても本当に改善されているのかわかりません。 そこで、このイベントが1回発生するために要する時間を知るため、制御ソフトのダイアログ上に0.001秒オーダーのストップウォッチを付けたいと思っていますが、何か参考になるサイト等はございますか。 上述の通り、サンプリング周期が数msオーダーとなるので、0.001秒オーダーのものが必要となります。 ちなみに使用言語はVC6のMFCを使用しています。また、PC環境等は影響するのでしょうか? よろしくお願いします。

みんなの回答

  • ricardo_
  • ベストアンサー率19% (14/72)
回答No.4

 やりたい事が良く分からないけど、タイマーで割り込みを掛けたらどうですか。

  • titokani
  • ベストアンサー率19% (341/1726)
回答No.3

間隔を測定するだけなら、QueryPerformanceFrequencyとQueryPerformanceCounterを使うのがよいかと思います。

回答No.2

 パソコンで1ms間隔処理はお勧めできません。  実機はSHやH8S等のマイコンにITRON等の組合せで実装される 前の実験として使用される前提で参考URLをお勧めします。  マルチメディアタイマーならほぼ正確な1ms処理が出来そうです。

参考URL:
http://lcl.web5.jp/prog/mmtimer.html
  • hidebun
  • ベストアンサー率50% (92/181)
回答No.1

timeGetTime()を使えばミリ秒まで取得できます。 取得できる時間分解能には、OS依存性があるようです。 timeBeginPeriod() timeEndPeriod()を使って、最小分解能を調整しましょう。 http://social.msdn.microsoft.com/Forums/ja-JP/vcgeneralja/thread/5a98c5fa-09d2-4b26-ba3b-6b851ac17a94

関連するQ&A

  • 倒立振子をPIDで

    倒立振子のような制御を行なうにはPID制御は向いていないのはなぜですか? 自分で考えたのは「PIDを含めたフィードバック制御の場合、外乱が発生するとその影響がプロセス値に現れてから初めて制御が動き出す後追い制御のため,外乱の影響は避けられない。」ですがこれは適当でしょうか?補足があれば教えていただきたいです。

  • PID制御のサンプリング単位と制御出力の時間間隔

    水の中にヒータを入れ、PID制御のプログラムを書いて、温度制御しています。 ヒータの通電制御はSSRなので、実際はON/OFFしかできません。そのため、1秒のうちの通電期間と非通電期間の比率を変えています。例えば、50%の出力なら、ON0.5秒、OFF0.5秒です。50Hzなら1秒を50分割するため2%単位で出力を変更できます。 通電の比率はPID制御で、1秒毎にサンプリングを行って出力を計算しています。 今まで、通電の比率を変える間隔が1秒なので、PIDによる出力量の計算も1秒単位で行っていました。PIDの計算は位置型で行っています。 ですが、速度型PID制御なら、サンプリング期間のみの出力から制御対象の変化分だけの出力を行える、と気づきました。サンプリング期間をもっと短くし、それを1秒間積算した値を1秒毎に出力すれば、もっと適切な出力になるのではないかと、、 質問ですが、PID制御のサンプリング単位と制御出力の時間間隔は、同じでなくても良いですか? 世の中の温度調節器などはどうしているのでしょう? どうぞ宜しくお願いします。

  • フィードバック制御におけるサンプリング周期の

    ある質問掲示板で、DCモーターのフィードバック制御について質問したときに、質問文の中の「サンプリング周期は1ms」ということに対して、回答者様から、 「>サンプリング周期は1ms←この時点で破綻していると思います。モーターの反応速度はそんなに速くありません。時定数を適切に設定しないと、制御系はまともに動きません。」 と回答を頂いたのですが、これは正しいのでしょうか?制御対象の時定数に対してサンプリング周期が短いことによって制御性能に与える悪影響はあるのでしょうか?PID制御などをする時に微分要素へのノイズ成分の影響が考えられますが、フィルタを通せば済む問題だと思います。その回答者様に追加質問したのですが、返答がありません。この回答者様はどのような理由で、サンプリング周期が1msというのが破綻している、と回答されたと思いますか? どなたかご意見頂けると幸いです。 よろしくお願い申し上げます。

  • PID制御のプログラミング3

    油圧モータを電流比例弁を介して目標回転数に合わせこむ ソフトを検討しております 制御はPID制御を使います PID制御の書籍を何冊か見ましたがブロック線図の説明止まりで 具体的な計算式やプログラミングまで落とし込んだ書籍が見当たりません。 PID制御は各方面で使われており、ハッキリ言ってしまえば 定石のプログラミングも存在していると思います どなたかご教示お願いいたします 特に積分 微分のPGM計算式への展開の仕方がわかりません ----------------------------------------- コントローラはH8マイコン PGM言語はCです モータの回転数を回転センサ→fv変換→電圧入力しています コントローラ電流→ 制御弁油圧出力 → 油圧モータ回転 制御周期は1秒を予定しています

  • VBのタイマーコントロールについて

    VB2005のタイマーコントロールで疑問があります。 ピクチャーボックスコントロールにラベルを貼り付けて タイマーコントロールで文字がスクロールする プログラムを作ったのですが、 タイマーコントロールのインターバルを10msから120msまで 500回タイマーのイベントをカウントしたタイムとストップウォッチで 計ったタイムを比べたらズレが生じることが分かりました。 人間の手で計っていますが、計測方法としては、タイマーをスタートするボタンと同時にストップウォッチのスタートを押し、カウンターが500回で止まった時点でストップウォッチを止める方法でWindowXPでCPUがCore2 DuoのパソコンとWindowsMeでCPUがPentiumIIIのノートパソコンで下記のように計測しました。 WindowsXP 10ms…8秒24、20ms…15秒84、30ms…15秒82、40ms…24秒64、50ms…31秒60、60ms…31秒72、70ms…41秒21、80ms…47秒40、90ms…47秒32 後省略 WindowsMe 10ms…28秒25、20ms…28秒21、30ms…28秒10、40ms…28秒23、50ms…28秒28、60ms…57秒20、70ms…57秒43、以下ほぼ一緒なので省略110ms…56秒93でした。 その後、VBのヘルプの検索で、Windowsのタイマーの精度は55msとあるのを発見したのですが、WindowsMeのノートパソコンでは、55msの精度にあったデータが帰ってきたのですが、 WindowsXPのパソコンは、どう見ても内部精度は違うような結果に見えます。 どなたかタイマーの精度について知っておられる方、教えてもらえますか? よろしくお願いします。

  • リアルタイムOSが必要かどうか

    Linuxが入ったPCで、AD/DAボードを介してロボット制御(サンプリング周期は1ms)をしようと思うのですが、RT Linuxなどのリアルタイムカーネルは入れた方が良いでしょうか?それとも、1ms程度なら必要ないでしょうか?

  • PID制御のプログラミング2

    先ほど、PID制御のプログラミングについて質問したのですが、もう少しわからないところがあるので教えてください。 1.ステップ応答から各パラメータを求める方法   http://www.picfun.com/motor05.htmlのページの一番下のほうに書かれており、   Kiの値=0.6~0.7/KL、Kdの値=0.3~0.45T/Kとなっています。   このLとTの単位は[sec]と考えていいのでしょうか。   KpはLとTで打ち消されて、単位を考える必要ないですが、KiとKdは単位により結果が違います。 2.サンプリングデータにより制御する場合のサンプリング時間について上記アドレスにPID制御のアルゴリズムの説明があるのですが、   サンプリング時間が考慮されていません。   サンプリング時間により前回の偏差との差や、積分の場合足しこむ回数が違ってくると思うのですが、どのように補正すればよいですか。   このときも単位を1[sec]秒として補正すればよいでしょうか。

  • ヒータのON/OFF制御

    ヒータの温度制御を交流電源の半波単位でゼロクロスのON/OFF制御 をしました。 100V、1500Wのヒータは制御できましたが 200V、3000Wのヒータは温度の振動が大きく失敗しました。 現象としては 目標値に達したのでOFFしても2秒ほど温度が上がり続ける。 それから温度が下がりはじめ 目標値を下回ったのでONしても2秒ほど温度が下がり続ける。 熱的に慣性が大きいようなイメージです。 結果的に温度の振動が大きくなってしまいました。 このような場合ON/OFF制御では限界でしょうか? 何か解決策となるようなアドバイスをいただけたら 幸いです。 最初はPID制御で電源の半波100個ぐらいを ゼロクロスでデューティ制御しようと思いましたが わかりやすい参考例もなく、 また調整が難しそうで断念していましたが、やはりPID制御 にすべきでしょうか?

  • フィードバック制御の操作量と積分制御について

    お世話になります。 2点お伺いしたいと思います。 1点目はフィードバック制御の操作量についてです。 一般的なフィードバック制御のイメージは、 車の速度を一定に保つために、アクセルやブレーキを操作することや 風呂の温度を一定に保つためにお湯をたしたりすることです。 天秤の片方に重り(例えば10g)が載っており、平行に保つために用意された重り(こちらも10g)があるとします。 その用意された重りは片方に載っている重りと同じ重さの重りが用意されており、 それを載っけることで平行にすることができたとします。 その後誰かが1g抜き取ってしまったため、片方も1g抜いて平行に戻した。 これはフィードバックとは言わないのでしょうか? 車や風呂との違いは時間で徐々に目標値に近づくのではなく、 次のステップで目標に達することです。 2点目は、積分制御の具体的な実現方法が思いつかずに困っております。 現在FPGAでフィードバック制御の構築を考えております。 積分制御の目的は一般的に比例制御で制御しきれないオフセット値を打ち消す役目だと認識しております。 http://www.f-kmr.com/pid_control.htm のPI制御の図のようなイメージです。 実現方法は目標値との差をサンプリングごとに足していって、差し引くとオフセットが0になるということでしょうか? 単純なサンプリングごとの差の積分では実現できないのでしょうか? よろしくお願いします。

  • PID制御について

    下記の「モータ制御の仕方」を見ています。 http://www.picfun.com/motorframe.html このPID制御によりヒータの制御をしたいと 考えています。 しかし定性的に理解できない点があり、皆様のお知恵をお借りしたく質問させていただきました。 PI制御において 結果的に操作量Vのとき現在値が目標値に達し、その状態を維持できると仮定します。 現在値が目標値になったときは 1.偏差が0になるので比例項は0になります。 2.そうすると操作量Vを維持するものは積分項のみとなります。 3.最適に制御された場合ということは目標値に達したとき積分項の値がVです。 4.もし3.での積分項の値がVより大きければ必ずオーバーシュートが発生して   -偏差が発生し積分項を減らしVに近づきます。 という考えでよいのでしょうか? よろしくお願いします。

専門家に質問してみよう