出力ピンに真のアナログ電圧を出力する方法


12

私のプログラムに関しては、いくつかの計算を行い、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に接続されています。(電圧を測定した場所)私はArduino Unoボードを使用しています。

更新

@DatHaのコメントで述べたように、pwmは電圧を出力しません。ボードを変更せずに、前述のように電圧を出力する方法はありますか?


PSアナログ書き込みはPWMを使用し、アナログ電圧を生成しません。
ダッハ

@DatHaは、この方法で実行できないことを意味しますか?アナログ電圧を出力する別の機能はありますか?
-bytk

上@Russellの答えを参照してくださいarduino.stackexchange.com/questions/10041/...
dhimaspw

@dpw私のプログラムは外部プログラミングポートを介して電子負荷に接続し、0-5Vを使用して制御しなければならないので、それが機能するとは思わない。
-bytk

PWMは特定の電圧を出力します。または、私が主1734年の海賊です。8ビットの値を超えることはできません。読み取りには常に多少の不正確さがあります。
user400344

回答:


11

基本的に3つのオプションがあります。

  1. 実際の電圧を出力する内蔵DACを備えたArduino Dueに切り替えます。
  2. 外部DACチップ(MCP4821 / 2など)を追加して、電圧を作成します
  3. PWMピンでローパスフィルター(RCネットワーク)を使用します。

3つのオプションのうち、通常はMCP4822を使用します。これは、最良の結果が得られ、Dueを使用するほどコストがかからないためです。


ありがとうございました。オプション2は本当に良いように聞こえますが、時間の制約のために、オプション3を進めて、思い通りの結果を得ました。
-bytk

1
または、R-2Rはしごを「貧乏人のDAC」として使用する
アンドレ・ホルツナー

1
@AndreHolzner R-2RはしごをDACチップと同じように数えますが、平均的なArduinoで実用的にするには配線が多すぎます。
マジェンコ

@Majenko DIP-8チップ内にはほとんどR-2Rの梯子である「デジタルポテンショメーター」または「デジポット」が存在することを付け加えたいと思います。DACよりも安価です。(たとえばX9C103)
フィリップフラニック

1
@FilipFranik R-2Rラダーではないことを除いて。これらは、抵抗間の各接続に接続されたFETを備えた単なる抵抗のチェーンです。Rのみがあります。多くのRはすべて同じです。はい、ポテンショメータの両端でVCCとGNDに書き込むと、一種のDACになりますが、実際のポテンショメータと同じ種類のインピーダンスの問題があります。DACは電圧を提供しますが、抵抗のペアを提供します。
マジェンコ

6

5Vでは、1オームの抵抗が1Aをシンクしようとし、40mA仕様をはるかに超えます。ピンを保護するには、少なくとも5 / 0.040 = 125オームの抵抗を使用してください。抵抗とグランドの間にコンデンサを配置すると、コンデンサのRC回路によりPWMがアナログ電圧に平滑化されます。

47Kの抵抗と1uFのコンデンサを使用して、提案された@russellの回答を試してください。電子負荷で使用する接合部でアナログ電圧が得られます。


2

私の知る限り、ArduinosにはADC(アナログ-デジタルコンバーター)がありますが、DAC(デジタル-アナログコンバーター)はありません。そのため、デジタル値に基づいてピンから設定電圧を出力することはできません。


2
ARMベースのArduinoには通常、少なくとも1つのDACチャネルがあります。
KIIV

0

いいえ。Arduinoからアナログ電圧を取得する方法はありません。できる最善の方法は、電圧レギュレータ、インダクタ、MOSFETトランジスタを使用して、線形モードまたは昇圧モードで降圧電圧コンバータとしてArduinoを使用することです。また、標準50o Hz以外のPWM周波数を提供するMegaまたはDulormeを使用する必要があるかもしれません。

幸運


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.