如何在输出引脚上输出真实的模拟电压


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,并且不会产生模拟电压。
Dat Ha

@DatHa是否表示无法以这种方式完成?还有输出模拟电压的功能吗?
bytk


@dpw我认为它不起作用,因为我的程序必须通过其外部编程端口连接到电子负载,并使用0-5V对其进行控制。
bytk

PWM输出特定的电压,或者说我在1734年勋爵那年是个海盗。您不能超过8位值,并且在读取它时总是有些不准确。
user400344 '16

Answers:


11

您基本上有三个选择:

  1. 切换到具有内置DAC的Arduino Due,该DAC输出实际电压。
  2. 添加外部DAC芯片(例如MCP4821 / 2)为您创建电压
  3. 在PWM引脚上使用低通滤波器(RC网络)。

在这三个选项中,我通常使用MCP4822,因为它可提供最佳结果,并且成本不及使用Due。


谢谢。选项2听起来确实不错,但是由于时间限制,我继续使用选项3并获得了想要的结果。
bytk

1
或使用R-2R阶梯作为“穷人的DAC”
Andre Holzner

1
@AndreHolzner我数了一个R-2R梯子,它与DAC芯片相同,但导线太多,无法在普通的Arduino上使用。
马延科

@Majenko我只是想补充一下,在DIP-8芯片中存在“数字电位器”或“数字电位器”,它们几乎都是R-2R梯形图。它们比DAC便宜。(例如X9C103)
Filip Franik

1
@FilipFranik除非它们不是R-2R梯子。它们只是电阻器链,每个电阻器之间的连接都连接有FET。只有R。许多R都是一样的。是的,如果用电位计的两端将其写到VCC和GND,您会得到一种DAC,但它会遇到与实际电位计相同的阻抗问题。它提供一对电阻,而DAC提供电压。
马延科

7

在5V电压下,一个1欧姆的电阻将试图吸收1A电流,并且远远超过40mA的规格。请至少使用一个5 / 0.040 = 125欧姆的电阻器来保护您的引脚。而且,如果在电阻和地之间放置一个电容器,则电容器的RC电路会将PWM平滑为模拟电压。

请使用47K电阻和1uF电容器尝试建议的@russell答案,您将在结点获得一个模拟电压,以与电子负载配合使用。



0

不能。无法从Arduino获取模拟电压。最好的办法是使用线性稳压器,升压器,电感器和mosfet晶体管将Arduino用作线性或升压模式的降压电压转换器。您可能还需要使用Mega或Dulorme,它们可以提供标准50o Hz以外的PWM频率。

好运


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.