タグ付けされた質問 「frequency-measurement」

4
オシロスコープの帯域幅、それは何ですか?
この質問は少し前に私に浮かびました。レベル0〜2.5の50Mhzの方形波を測定していましたが、画面上で見たものは、中心が1.2V、レベルが0.5〜2.0Vの正弦波で、周波数は4MHzでした。 オシロスコープのデータシートを調べたところ、サンプリングレートが50 MS / sで帯域幅が10 MHzであることがわかりました。 私はこれらの数字が何であるかについて疑問に思っています。 オシロスコープが測定できる周波数の上限の尺度ですか? このオシロスコープは50Mhzを測定できますか?

1
8ビットPICを使用してIR信号のパルス幅を測定する方法は?
私の友人と私は、学習目的のために、このようなユニバーサル学習リモートコントローラーを設計したいと考えています。基本的にやりたいことは、赤外線パルスの保存と再生です。 36kHz、38kHz、40kHzの信号を検出したい。40kHzの信号は、25の期間になります秒。μμ\mu 8ビットPICマイクロコントローラーを使用したいので、現在は20MHz高速水晶発振器で動作するPIC16F616を選択しました。次の2つのオプションを使用できます。 Interrupt On Changeモジュールを使用します。 CCPモジュールのキャプチャモードを使用します。 最初のオプションは次のとおりです。 レジスタが次のように設定されていると仮定しますunsigned char _10_us = 0;。このレジスタは時間を保持します。周期レジスタとTMR2モジュールは、すべての10割り込み作成するために設定されている秒。割り込みが発生すると、レジスタをインクリメントして終了します。これにより、最大時間は2.55ミリ秒になります。さらに時間を測定する必要がある場合は、追加のレジスタを定義し、必要に応じてインクリメントできます。μμ\mu_10_us_1_ms 現在、あらゆる種類の変更(高から低または低から高)によって割り込みが生成されるたびに、プログラムは現在の時刻、つまり_10_usレジスタの値を記録します。しばらくして、次の割り込みが生成されると、プログラムは保存された値を_10_usレジスタから減算するため、その間にかかった時間は秒単位になります。μμ\mu このオプションを使用すると、頭を悩ますことができます。TMR2割り込みは、約50命令ごとに発生します。割り込み処理には約20命令かかります。期間を計算して配列に保存するための30の命令が残っています。この方法は機能しますか? 2番目のオプションは次のとおりです。 CCP1ピンでイベント(高から低)が発生したときに割り込みを生成するように、CCPモジュールのキャプチャモードを設定します。割り込みルーチンでは、フラグを設定して、プログラム内のタスクが(必要に応じて)CCPR1H(おそらく必要ない)とCCPR1Lの値を計算して保存できるようにします。次に、キャプチャモードの構成を変更して、ローからハイのエッジが発生したときに割り込みをトリガーするようにします。そして、次のイベントを待ちます。使用したことがないため、この方法のパフォーマンスを推定することはできません。 別のオプション? TSOP17xxシリーズなどの赤外線復調ICを使用できます。これで問題が完全に解決します。しかし、いくつかの質問が思い浮かびます。 読み取り距離の要件はそれほど大きくありません。1メートル(〜3フィート)。38kHzで動作することを意図したTSOP1738を選択した場合、36kHzと40kHzの信号でどれだけうまく動作しますか? TSOP17xxシリーズのデータ​​シートの4ページには、「応答性の周波数依存性」グラフが示されています。わかっている限りでは。 38kHzの約1.053である40kHzは、相対感度が約0.6になります。 38kHzの約0.95である36kHzは、相対感度が約0.65になります。 これらの値はどういう意味ですか?TSOP1738を使用しても問題ありませんか?

4
ボード内の水晶振動子をテストする方法は?
PCBボードに32.768 kHzと20 MHzの2つの水晶振動子があります。これらは、HCS08マイクロコントローラーが組み込まれたFreescale MC12311トランシーバーICに接続されています。これらの結晶が正常に機能しているかどうかをテストしたいです。 利用可能なツール:オシロスコープ、周波数計(デジタルカウンター)、デジタルマルチメーター。 ボード内の結晶をテストするには、これらのツールをどのように使用すればよいですか? 注:プローブの容量性負荷効果をおそらく考慮する必要があります。そうでなければ、測定は正確ではなく、さらに悪いことに、結晶はまったく機能しません。 Edit1:オシロスコープと周波数計(x10プローブ)の両方を使用しましたが、残念ながら何も監視されていませんでした。

6
マイクロコントローラーで5Vを超える信号の周波数を測定
0VとVtopの間で変化する長方形信号の周波数(最大300 Hz)を測定したいのですが、Vtopは5Vから15Vの間です。マイコン(PIC16F1827)に5V以上はかけられないので、なんとかして電圧を制限する必要があります。 私の最初のアイデアは、分圧器を使用することでした。ただし、5Vの入力信号は低くなります。 2番目のアプローチは、オペアンプ(TS914)を使用することです。5Vで電力を供給しているとき、出力は5Vを超えません。別の電圧測定をフィルタリングするために、このオペアンプを設計にすでに組み込んでいます。しかし、データシートを見ると、次のように書かれています(「絶対最大定格」セクション)。 入力電圧と出力電圧の大きさは、VCC + + 0.3Vを超えてはなりません。 LM324などの別のオペアンプを追加する必要がありますか?データシートには、(コモンモード入力電圧範囲(Note 10))と記載されています。 どちらかの入力信号電圧の入力コモンモード電圧が0.3Vを超えて負になることを許可しないでください(25˚C)。コモンモード電圧範囲の上限はV + − 1.5V(25°C時)ですが、V +の大きさに関係なく、どちらかまたは両方の入力が損傷することなく+ 32V(LM2902の場合は+ 26V)に到達できます。 LM324は破損していませんが、デザインで動作しますか(5Vの長方形信号を出力します)? 私が持っていた最後のアイデアは、ツェナーダイオードを使用しています。これはうまくいくでしょうか? この問題を解決するにはどうしますか?私が考えなかった別の可能性はありますか?

1
合成されたROMコアを使用した単純なテストベンチのシミュレーション
私はFPGAの世界にまったく新しいので、4ビットの7セグメントデコーダーという非常に単純なプロジェクトから始めようと思いました。私が純粋にVHDLで書いた最初のバージョン(それは基本的に単一の組み合わせselectであり、クロックは必要ありません)は機能しているようですが、ザイリンクスISEの「IPコア」の要素を試してみたいと思います。 今のところ、「ISE Project Explorer」GUIを使用しており、ROMコアを使用して新しいプロジェクトを作成しました。生成されるVHDLコードは次のとおりです。 LIBRARY ieee; USE ieee.std_logic_1164.ALL; -- synthesis translate_off LIBRARY XilinxCoreLib; -- synthesis translate_on ENTITY SSROM IS PORT ( clka : IN STD_LOGIC; addra : IN STD_LOGIC_VECTOR(3 DOWNTO 0); douta : OUT STD_LOGIC_VECTOR(6 DOWNTO 0) ); END SSROM; ARCHITECTURE SSROM_a OF SSROM IS -- synthesis translate_off COMPONENT wrapped_SSROM …


7
MCUを使用した0〜1MHz(0.25Hz分解能)方形波の測定
0から1MHzの範囲で変化し、0.25Hzの分解能を持つ方形波の周波数を測定する必要があります。 私はまだどのコントローラーを決定していませんが、それはおそらく20ピンAttinyの1つでしょう。 通常、より低い周波数の信号を測定する方法は、タイマーキャプチャモードで設定された2つのタイマーを使用して、外部信号の立ち上がりエッジで割り込みを行うように設定し、別のタイマーを毎秒割り込みするように設定することにより、前のタイマーは1秒後のレジスタ値をカウントします信号の周波数に等しくなります。 ただし、この方法は明らかに0.25Hzの解像度で0〜1MHzの範囲の信号をキャプチャするには機能しません。これには22ビットカウンターが必要です(AFAIK 8ビットマイクロには8/16ビットカウンターしかない)。 私が持っていたアイデアの1つは、信号をマイクロに適用する前に分割することでしたが、信号を61で除算する必要があるため、これは実際的ではなく、周波数は61秒ごとにしか更新できず、数秒ごとにしたい場合があります。 頻度を4秒ごとに更新できる別の方法はありますか? 更新: 最も簡単な解決策は、外部割り込みまたはタイマーキャプチャを使用して、信号の立ち上がりエッジで割り込みを行いisr、変数の型をインクリメントすることですlong int。4秒ごとに変数を読み取ります(0.25Hzまでの周波数を測定できるようにするため)。 アップデート2: JustJeffが指摘したように、8ビットMCUは1MHz信号に追いつくことができないため、すべての立ち上がりエッジで割り込みを中断し、long int... 私はtimororrが提案した方法を選びました。実装に取り​​掛かったら、投稿して結果を共有します。ご提案いただきありがとうございます。 経過報告: ここで紹介するアイデアのいくつかをテストし始めました。まず、vicatcuのコードを試しました。頻度の計算後にTCNT1がクリアされないという明らかな問題がありました-大したことではありません... 次に、コードをデバッグするときに、約2〜7回の頻度で計算されたタイマー1(外部イベントをカウントするように構成されたタイマー)のオーバーフローカウントが2だけ短いことに気付きました。これをタイマー0 ISRのレイテンシに置き、ifステートメントブロックをISRからメイン(以下のスニペットを参照)に移動して、ISRにフラグを設定することにしました。いくつかのデバッグは、最初の測定は問題ないが、その後の読み取りごとに、タイマー1のオーバーフローカウントが2を超えることを示しました。これは説明できません。 int main() { while(1) { if(global_task_timer_ms > 0 && (T0_overflow == 1)) { global_task_timer_ms--; T0_overflow = 0; } ..... } } 次に私はティムロスの提案を実装しようとすることを決めました。Atmega16の唯一の16ビットタイマーが外部信号の立ち上がりエッジをキャプチャするために使用されているため、必要な間隔(各timer_isr割り込みの間に約15ms)を生成するには、2つの8ビットタイマーをカスケードする必要があります。 オーバーヘッドのほとんどがタイマーにシフトされ、CPUが処理する短い残りが1つしかないため、このソリューションが機能し、はるかに効率的だと思いました。しかし、私が期待していたほど正確ではなかったため、測定値は約70Hzだけ前後にシフトしましたが、高周波数では問題にはなりませんが、低周波数では許容できません。私は問題の分析に多くの時間を費やしませんでしたが、2つの16ビットタイマーを備えた非常に遅い8051コントローラーにtimrorrsの提案と同様の構成を実装しており、結果は非常に正確だったため、タイマーのカスケード構成はそれほど正確ではないようです。 これでvicatcuの提案に戻りましたが、周波数計算をTimer 0 isr (下のスニペットを参照)に移動しました。このコードにより、一貫して適度に正確な測定が行われました。少しの校正で、精度は約+/- 10Hzになります。 ISR(TIMER0_OVF_vect) { TCNT0 = …
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.