So geben Sie eine echte analoge Spannung am Ausgangspin aus

12

In Bezug auf mein Programm ist es ein Programm, das einige Berechnungen durchführt und dann eine Spannung basierend auf dem Ergebnis unter Verwendung der AnalogWrite-Funktion ausgibt. Mein Problem ist jedoch, dass ich meine Programmierung aufgrund einer falschen Annahme durchgeführt habe, dass die analogWrite-Funktion über PWM eine analoge Spannung ausgibt, wobei sie stattdessen nur die analoge Spannung "simuliert".

Hier sind die relevanten Teile meines Codes:

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");

}

Der Ausgangspin 11 der Schaltung ist mit einem 1-Ohm-Widerstand und dann mit GND verbunden. (Wo ich die Spannung gemessen habe) Ich verwende Arduino Uno Board.

UPDATE :

Wie in den Kommentaren von @DatHa erwähnt, gibt pwm keine Spannung aus. Gibt es eine Möglichkeit, die Spannung wie gesagt auszugeben, ohne die Platine zu wechseln?

bytk
quelle
PS Analoges Schreiben verwendet PWM und erzeugt KEINE analoge Spannung.
Dat Ha
@DatHa heißt das, dass das nicht so geht? Gibt es eine andere Funktion zur Ausgabe der Analogspannung?
Bytk
Siehe @ Russell-Antwort auf arduino.stackexchange.com/questions/10041/…
dhimaspw
@dpw Ich glaube nicht, dass dies funktioniert, da mein Programm über seinen externen Programmierport eine Verbindung zu einer elektronischen Last herstellen und diese mit 0-5V steuern muss.
Bytk
PWM gibt eine bestimmte Spannung aus, oder ich bin ein Pirat im Jahr unseres Herrn 1734. Sie können einen 8-Bit-Wert nicht überschreiten, und es gibt immer eine gewisse Ungenauigkeit beim Lesen.
User400344

Antworten:

11

Sie haben grundsätzlich drei Möglichkeiten:

  1. Wechseln Sie zu einem Arduino Due mit integriertem DAC, der eine echte Spannung ausgibt.
  2. Fügen Sie einen externen DAC-Chip (wie den MCP4821 / 2) hinzu, um die Spannung für Sie zu erzeugen
  3. Verwenden Sie einen Tiefpassfilter (RC-Netzwerk) an einem PWM-Pin.

Von den drei Optionen verwende ich normalerweise einen MCP4822, da er die besten Ergebnisse liefert und nicht so viel kostet wie ein Due.

Majenko
quelle
Vielen Dank. Option 2 klingt wirklich gut, aber aus Zeitgründen habe ich Option 3 gewählt und die gewünschten Ergebnisse erzielt.
Bytk
1
Oder verwenden Sie eine R-2R-Leiter als "DAC des armen Mannes"
Andre Holzner
1
@AndreHolzner Ich zähle eine R-2R-Leiter wie einen DAC-Chip, aber mit zu vielen Drähten, um sie für einen durchschnittlichen Arduino praktisch zu machen.
Majenko
@Majenko Ich wollte nur hinzufügen, dass es "digitale Potentiometer" oder "Digipots" gibt, die so ziemlich R-2R-Leitern in einem DIP-8-Chip sind. Sie sind billiger als DACs. (Zum Beispiel X9C103)
Filip Franik
1
@FilipFranik Außer, dass es sich nicht um R-2R-Leitern handelt. Sie sind nur eine Kette von Widerständen mit einem FET, der an jede Verbindung zwischen Widerständen angeschlossen ist. Es gibt nur R. Viele Rs egal. Ja, wenn Sie es mit den beiden Enden des Potentiometers auf VCC und GND aufschreiben, erhalten Sie eine Art DAC, aber es tritt die gleiche Art von Impedanzproblemen auf, die ein echtes Potentiometer verursacht. Es liefert ein Paar Widerstände, während ein DAC eine Spannung liefert.
Majenko
6

Bei 5 V versucht ein 1-Ohm-Widerstand, 1A abzusinken und die 40-mA-Spezifikationen weit zu überschreiten. Bitte verwenden Sie mindestens einen 5 / 0.040 = 125 Ohm Widerstand, um Ihren Pin zu schützen. Und wenn Sie den Kondensator a zwischen Ihren Widerstand und Masse legen, glättet der RC-Schaltkreis des Kondensators die PWM in eine analoge Spannung.

Bitte probieren Sie die vorgeschlagene @ Russell-Antwort mit einem 47K-Widerstand und einem 1uF-Kondensator aus. Sie erhalten eine analoge Spannung an der Verbindungsstelle, die Sie für Ihre elektronische Last verwenden können.

Dave X.
quelle
2

Soweit ich weiß, haben Arduinos ADC (Analog-Digital-Wandler), aber keinen DAC (Digital-Analog-Wandler). Sie können also keine eingestellte Spannung von Pins ausgeben, die auf einem digitalen Wert basieren.

Andre Courchesne
quelle
2
Die ARM-basierten Arduinos haben normalerweise mindestens einen DAC-Kanal.
28.
0

NEIN. Es gibt keine Möglichkeit, eine analoge Spannung vom Arduino zu erhalten. Das Beste, was Sie tun können, ist, Arduino als Buck-Spannungswandler im linearen oder Boost-Modus mit einem Spannungsregler, einer Induktivität und dem Mosfet-Transistor zu verwenden. Möglicherweise müssen Sie auch eine Mega- oder Dulorme-Frequenz verwenden, die eine andere PWM-Frequenz als die Standard-50-Hz-Frequenz liefert.

Bestes Glück

Jose Enrique Calderon
quelle