私のプログラムに関しては、いくつかの計算を行い、その結果に基づいて電圧を出力するプログラムです。 AnalogWrite関数。しかし、私の問題は、PWMを介したanalogWrite関数がアナログ電圧を出力するという誤解に基づいてプログラミングを行ったことです。実際には、代わりにアナログ電圧を「シミュレート」するだけです。
関連する部分は次のとおりです。私のコードの:
int pwmOutput = 11; int pwm = 0; void compareNewOldVoltageYes(void) { if(pv_Vnew > pv_Vold && pwm != 255) { ++pwm; //increasing value } else if(pwm != 0) { --pwm; //decreasing } } void compareNewOldVoltageNo(void) { if(pv_Vnew > pv_Vold && pwm != 0) { --pwm; } else if(pwm != 255) { ++pwm; } } void loop() { reading(); PowerCalculation(); if(pv_NewP > pv_OldP) { compareNewOldVoltageYes(); } else { compareNewOldVoltageNo(); } analogWrite(pwmOutput, pwm); //analogWrite float displayPWMvolt = pwm * 0.0196; Serial.print("Output Voltage: "); Serial.print(displayPWMvolt); Serial.println(" V"); pv_OldP = pv_NewP; Serial.print("Previous Power: "); Serial.print(pv_OldP); Serial.println(" W"); }
回路に関しては、出力ピン11は1オームの抵抗に接続されてからGNDに接続されています。 (電圧を測定した場所)ArduinoUnoボードを使用しています。
UPDATE :
@DatHaのコメントで述べられているように、pwmは電圧を出力しません。 ボードを変更せずに、前述のように電圧を出力する方法はありますか?
コメント
- PSアナログ書き込みはPWMを使用し、アナログ電圧を生成しません。
- @DatHaは、この方法では実行できないという意味ですか?アナログ電圧を出力する別の機能はありますか?
- arduino.stackexchange.com/questions/10041/
- @dpw '私のプログラムは外部プログラミングを介して電子負荷に接続する必要があるため、これは機能するとは思いません。ポートし、0〜5Vを使用して制御します。
- PWMは特定の電圧を出力します。つまり、1734年の主の年にI '海賊版です。' 8ビット値を超えると、'常に読み取りに不正確さが生じます。
回答
基本的に3つのオプションがあります。
- DACが組み込まれているArduinoDueに切り替えますこれは実際の電圧を出力します。
- 外部DACチップ(MCP4821 / 2など)を追加して、電圧を作成します。
- でローパスフィルター(RCネットワーク)を使用します。 PWMピン。
3つのオプションのうち私は通常MCP4を使用します822は、最良の結果が得られ、Dueを使用するほどコストがかからないためです。
コメント
- ありがとうございます。オプション2は本当に良いように聞こえますが、時間の制約があるため、オプション3を続行して、希望する結果が得られました。
- または R-2Rを使用します。はしごを"貧乏人' s DAC "
- @AndreHolzner R-2RラダーはDACチップと同じように数えますが、ワイヤーが多すぎて平均的なArduinoでは実用的ではありません。
- @Majenko存在することを付け加えたいと思います"デジタルポテンショメータ"または"デジポット"これはDIP-8チップ内のほとんどR-2Rラダーです。それらはDACよりも安価です。 (例:X9C103)
- @FilipFranikただし'はR-2Rラダーではありません。 'は、抵抗間の各接続にFETが接続された抵抗のチェーンです。 Rだけがあります。多くのRはすべて同じです。はい、ポテンショメータの両端をVCCとGNDに書き込むと、一種のDACが得られますが、実際のポテンショメータと同じ種類のインピーダンスの問題が発生します。 DACは電圧を提供しますが、これは1対の抵抗を提供します。
回答
5Vでは、1オーム抵抗は1Aをシンクしようとし、40mAの仕様をはるかに超えます。ピンを保護するために、少なくとも5 / 0.040 = 125オームの抵抗を使用してください。また、抵抗とグランドの間にコンデンサを配置すると、コンデンサのRC回路がPWMを滑らかにしてアナログ電圧にします。
47Kの抵抗と1uFのコンデンサを使用して提案された @russellの回答を試してみてください。接合部で使用するアナログ電圧が得られます。電子負荷。
回答
私が知る限り、ArduinosにはADC(Analog to Digital Converters)がありますが、ありません。 DAC(デジタル-アナログコンバーター)。そのため、デジタル値に基づいてどのピンからも設定電圧を出力することはできません。
コメント
- ARMベースのArduinoには通常、少なくとも1つのDACがあります。チャネル。
回答
NO ..Arduinoからアナログ電圧を取得する方法はありません。あなたができる最善のことは、電圧レギュレーター、インダクター、およびMOSFETトランジスターを使用して、線形モードまたはブーストモードで降圧電圧コンバーターとしてArduinoを使用することです。また、標準の50oHz以外のPWM周波数を提供するMegaまたはDulormeを使用する必要がある場合もあります。
幸運
回答
直接的な方法はありません。
@Majenkoに加えて
別の方法:L293dのようなHブリッジを使用して、連続レベルを提供できます。多くのDIYインバータ回路がこの技術を使用しています。
http://www.instructables.com/id/How-to-Make-an-Inverter-Using-ARDUINO/?ALLSTEPS