NI製品ディスカッション

cancel
Showing results for 
Search instead for 
Did you mean: 

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

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

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

Message 2 of 5
(2,391 Views)

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

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

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

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

 

0 Kudos
Message 3 of 5
(2,353 Views)
白石様、ご教授ありがとうございました。初心者にとって非常に勉強になるVIでした。おかげさまで、やろうとしていることが出来そうです。今後もよろしくお願いします。
0 Kudos
Message 4 of 5
(2,351 Views)

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

確かに御指摘の通り、提示の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 Kudos
Message 5 of 5
(2,344 Views)