2016-11-14 5 views
0

たとえば、100ヘルツの周波数を設定する必要がある場合は、tone関数を使用してPWMを使用して周波数を設定しました。今私はPWMを使用して0 - 5ボルトの振幅を変える必要があります。 toneanalogWriteを一緒に使用して周波数を固定することは可能ですか?つまり、振幅を変更するには100ヘルツとanalogWriteを固定しますか?どのようにして周波数と振幅を同時に変更できますか?

上記のコマンドトーンとアナログピンを同じピンで試したので、別の方法があるかどうか教えてください。動作しません。

+1

こんにちはデイブを尋ねる - あなたは私たちは、あなたがそれを改善できるように、あなたはすでに書かれているコードを投稿してくださいできますか? –

答えて

1

tone機能を使用することはできません。 PWMを使用して「周波数」がどのように生成されるかを知るには、https://en.wikipedia.org/wiki/Pulse-width_modulationを参照してください。この画像は役に立つかもしれません:

PWM waveform

あなたが本当に異なる電圧を持っている必要がある場合は、出力ピンに外付け部品を追加する必要がありますいずれか(簡単な分圧器少なくとも)または使用して信号を生成します専らanalogWrite。後者の場合、コードの複雑さに応じてタイミングの問題が発生する可能性があることに注意してください。

+0

私はトーン機能を使用しています。正確な周波数は100ヘルツで、オシロスコープはバッテリの定電圧でチェックしています。同時に、周波数を変更したので、電圧を変更するためのアナログ書き込み機能は動作していません。 –

0

編集

あなたがdigital potentiometerを検討したことがありますか?その説明を読んだあと、あなたが必要とするものとほとんど同じです。

[...]あなたのステレオの音量を制御する[...]

これはかなり通常のポテンショメータのように機能し、私はそれがあなたのために働くべきだと思います。


オリジナルポスト

答えは、設定された周波数でtone意志の出力パルスので、ノーであるが、その後analogWriteは他の出力のものにピンを依頼します。マイクロコントローラは「混乱」する可能性があり、おそらく何をしたいのでしょうか。

この問題を乗り越えるより機械的な方法は、ポテンショメータを使用することです。それは、ノブの位置に応じてその抵抗を変える可変抵抗器です。なぜこれが機能するのは、パルスが関与していないということだけです。信号の強度を変更しないで、強度を下げることが唯一のことです。

+0

私はすでに電圧を変えるためにポテンショメータを使いましたが、私はArduinoを使ってそれをデジタルで制御したいと思います。私は機械的なポテンショメータと同じ目的を果たすことができるオプションを探しています。 –

+0

はい、デジタル電位差計を使用しました。私は100mA近く必要です。ワイパーの出力電流は25mA以下です。 –

+0

OpAmp?あなたはそれを考慮しましたか? –

0

あなた

  1. 使用analogWriteとトーン機能の動作をまねる、トーン機能を捨てることができます。
  2. 外部回路を使用してください。最初のソリューションに合うことができ

コードを使用すると、出力を混合するために何かを使用し、その後、二つのピンを使用することができる第二の溶液のために

#define TONE_PERIOD 10 /* Period in milliseconds */ 
unsigned long lastPulseStart; 
byte volume; 

void setup() 
{ 
    volume = ...; 
    lastPulseChange = millis(); 
} 

void loop() 
{ 
    if (lastPulseStart - millis() < TONE_PERIOD/2) 
     analogWrite(pin, volume); 
    else if (lastPulseStart - millis() < TONE_PERIOD) 
     analogWrite(pin, 0); 
    else 
     lastPulseStart += TONE_PERIOD; 
} 

です。たとえば、

  • ANDポート(トーンは入力に、analogWriteは他に、ポートはフィルタの前にある必要があります)。
  • イネーブル入力(トーンはイネーブルになり、analogWriteはラインに接続されます;これはフィルタの前または後のいずれかになります)。
  • アンプを使用していて、イネーブルピンを使用している場合は、それを使用します(もちろん、トーンはイネーブルになり、analogWriteをラインに接続します)。
  • 外部ADC(この場合、電圧リファレンスとしてトーンを使用します。ボリュームはADCの値として渡す必要があります)。
  • 出力にスピーカーを直接接続した場合は、analogWrite出力をスピーカーに送信し、スピーカーのもう一方のピンにNMOSを接続して、トーン出力で駆動することができます。

あなたには、いくつかの回路図が必要な場合は、単に..

+0

私の必要条件は、100Hzで周波数を固定し、上記の周波数を維持しながら0〜5Vの電圧を変えることです。最初の解決方法について言及したコードは、 2つ目の解決策は興味深いようですが、同じ回路図や回路図を送ってもらえますか?5Vの外付けバッテリを使用していますが、現在の要件は250mAです。 –

+0

音は周波数100Hzの方形波ですので、5msごとにVddからGNDに切り替わります。 PWMを使用している固定電圧を使用するのではなく、単にPWMをオンまたはオフにするだけです。しかし、analogWriteがPWM波、すなわち固定値ではなく約500または1000Hzの矩形波を出力していることに注意してください。フィルターで滑らかにする必要があります(ただし、100Hzは少し近すぎます)。回路図に関しては、もう少し時間が必要です。何かを描いて答えに追加することができます。 – frarugi87

+0

返事ありがとうございます。私は固定電圧を供給していないので、 PWMを使用して変更しようとすると、私の唯一の疑問は周波数を100ヘルツに設定し、再びPWM(500 - 1000ヘルツ)で電圧を変更すると100ヘルツ周波数に影響するかどうかです。オシロスコープで同じことがチェックされます。私は0〜5Vの間のすべての電圧で100ヘルツが必要です。 –

関連する問題