출력 핀에서 실제 아날로그 전압을 출력하는 방법


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

에 @Russell의 답변을 참조 arduino.stackexchange.com/questions/10041/...
dhimaspw

@dpw 내 프로그램이 외부 프로그래밍 포트를 통해 전자 부하에 연결하고 0-5V를 사용하여 제어해야하기 때문에 작동하지 않는다고 생각합니다.
bytk

PWM은 특정 전압을 출력하거나 Lord 1734 년 해적입니다. 8 비트 값을 초과 할 수 없으며 읽기에는 항상 부정확 한 부분이 있습니다.
user400344

답변:


11

기본적으로 세 가지 옵션이 있습니다.

  1. DAC가 내장되어 실제 전압을 출력하는 Arduino Due로 전환합니다.
  2. 외부 DAC 칩 (예 : MCP4821 / 2)을 추가하여 전압을 생성하십시오
  3. PWM 핀에서 저역 통과 필터 (RC 네트워크)를 사용하십시오.

세 가지 옵션 중 나는 MCP4822를 사용합니다. MCP4822는 최상의 결과를 제공하고 Due를 사용하는 것만 큼 비용이 들지 않기 때문입니다.


감사합니다. 옵션 2는 정말 좋아 보이지만 시간 제약으로 인해 옵션 3으로 진행하여 원하는 결과를 얻었습니다.
bytk

1
또는 사용 R-2R 사다리 는 "가난한 사람의 DAC"로
앙드레 HOLZNER

1
@AndreHolzner 저는 R-2R 래더를 DAC 칩과 동일하지만 전선이 너무 많아 평균 Arduino에서 실용적이지 않습니다.
Majenko

@Majenko 저는 DIP-8 칩 안에 거의 R-2R 래더 인 "디지털 포텐쇼미터"또는 "digipots"가 있다고 덧붙였습니다. DAC보다 저렴합니다. (예 : X9C103)
Filip Franik

1
@FilipFranik R-2R 사다리가 아닌 것을 제외하고. 그것들은 저항 사이의 각 연결에 FET가 연결된 저항 체인입니다. R 만 있습니다. 많은 R이 모두 같습니다. 예, 전위차계의 두 끝을 VCC와 GND에 쓰면 일종의 DAC가 발생하지만 실제 전위차계와 같은 종류의 임피던스 문제가 발생합니다. DAC는 전압을 제공하는 반면 한 쌍의 저항을 제공합니다.
Majenko

7

5V에서 1 옴 저항은 1A를 싱크하려고 시도하며 40mA 사양을 훨씬 초과합니다. 핀을 보호하려면 5 / 0.040 = 125 옴 저항 이상을 사용하십시오. 커패시터를 저항과 접지 사이에 놓으면 커패시터의 RC 회로가 PWM을 아날로그 전압으로 부드럽게합니다.

47K 저항과 1uF 커패시터로 제안 된 @russell 응답 을 시도하십시오 . 전자 부하와 함께 사용할 접점에서 아날로그 전압을 얻습니다.


2

내가 아는 한 Arduinos에는 ADC (Analog to Digital Converters)가 있지만 DAC (Digital to Analog Converters)는 없습니다. 따라서 디지털 값을 기준으로 핀에서 설정 전압을 출력 할 수 없습니다.


2
ARM 기반 Arduino에는 일반적으로 하나 이상의 DAC 채널이 있습니다.
KIIV

0

아두 이노에서 아날로그 전압을 얻는 방법은 없습니다. 전압 레귤레이터, 인덕터 및 MOSFET 트랜지스터를 사용하여 선형 또는 부스트 모드에서 Arduino를 벅 전압 변환기로 사용하는 것이 가장 좋습니다. 표준 50o Hz 이외의 PWM 주파수를 제공하는 Mega 또는 Dulorme을 사용해야 할 수도 있습니다.

최고의 행운


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.