NI製品ディスカッション

キャンセル
次の結果を表示 
次の代わりに検索 
もしかして: 

Whileループ内でシーケンシャルに増減する数値を発生させる方法について

非常に基本的な質問で大変申し訳ありません。12bit-DAボードを使って0~+10V~ー10V~+10V~0というような電圧Sweepをさせたいと考えております。Whileループ内で、反復端子の数値を用いて2048~(+1)~4095~(-1)~0~(+1)~4095~(-1)~2048のように数値を発生させたいのですが、具体的にどのようにすればよいかご教授いただけませんでしょうか。よろしくお願いいたします。
0 件の賞賛
メッセージ1/5
3,964件の閲覧回数

三角波の生成の関数とかを利用できると良さそうですが、例えば、Whileの中で添付のようにして2048~(+1)~4095~(-1)~0~(+1)~4095~・・・というのを生成するのは如何でしょうか? 初期値を2048として最初は増加し、0と4095に達したところで向きを反転させています。

メッセージ2/5
3,956件の閲覧回数

いつも御世話になっております。
日本ナショナルインスツルメンツ技術部のサハと申します。

白石様より提供されたサンプルVIを見たところ、これでおそらくお客様がなさりたいことはできると思います。一つだけお勧めしたいことは、While Loop内に「次のミリ秒倍数まで待機」関数(LV8.0では「関数」→「プログラミング」→「タイミング」パレットにあります)を使用しVI実行中CPUへの負担を減少させること。これでも問題は解決されないようでございましたら、お客様がなさりたいことをもうちょっと具体的に教えて頂けますようお願い申し上げます。

今後とも宜しくお願い致します。

サハ |技術部 |日本ナショナルインスツルメンツ

 

0 件の賞賛
メッセージ3/5
3,918件の閲覧回数
白石様、ご教授ありがとうございました。初心者にとって非常に勉強になるVIでした。おかげさまで、やろうとしていることが出来そうです。今後もよろしくお願いします。
0 件の賞賛
メッセージ4/5
3,916件の閲覧回数

サハ様: コメントありがとうございます。

確かに御指摘の通り、提示のviを単独で実行させるときは何らかのwaitが必要ですが、zak777様の用途を考えるに、sweep速度は所定の速度になるよう何らかの形でループ内で時間をコントロールしていると思いますので(そうしないとものすごく高速でsweepされるか、あるいはAO関連viの実行速度で決まる速さでsweepされる)、あくまで「所望の数値を発生させる部位」についての参考ダイヤグラムを提供させて頂きました・・・。(もちろん、そのviが単独で完全なものになる付加処置は設けておいたほうがよかったでしょうけれども・・・)

zak777様: また、提示のviについてですが、1点次のことに御留意下さい。「2048~(+1)~4095~(-1)~0~・・・」という動作に即して、4095と0に達すると直ちに反転するようにしました。この場合、0~4095のステップ数は4096あるにも関わらず、見かけの周期は4095×2=8190ステップになります(0~4094、4095~1、を繰り返す)。そのことにより、sweep速度が分割数に対して想定した周波数にならないな?と感じるかも知れませんので、それが気になる場合は0と4095は2回繰り返し、0~4095、4095~0、という風にして8192ステップにするか、あるいは周期が8190ステップであることを考慮して、ループのステップ時間をコントロールして下さいますようお願いします。

 

0 件の賞賛
メッセージ5/5
3,909件の閲覧回数