Làm thế nào để xuất một điện áp tương tự thực sự ở chân đầu ra


12

Về chương trình của tôi, nó là một chương trình thực hiện một số tính toán và sau đó đưa ra một điện áp dựa trên kết quả bằng cách sử dụng chức năng analogWrite. Tuy nhiên, vấn đề của tôi là tôi đã thực hiện chương trình của mình dựa trên một quan niệm sai lầm rằng chức năng analogWrite thông qua PWM không tạo ra điện áp tương tự, trong thực tế, nó chỉ "mô phỏng" điện áp tương tự.

Đây là những phần có liên quan trong mã của tôi:

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

}

Đối với mạch điện, chân đầu ra 11 đang được kết nối với điện trở 1 ohm và sau đó đến GND. (Nơi tôi đo điện áp) Tôi đang sử dụng bo mạch Arduino Uno.

CẬP NHẬT :

Như đã nói trong các bình luận của @DatHa, pwm không xuất điện áp. Có cách nào để điện áp đầu ra như đã nói, mà không thay đổi bảng?


PS Analog write sử dụng PWM và nó KHÔNG tạo ra điện áp tương tự.
Đạt Hà

@DatHa có nghĩa là nó không thể được thực hiện theo cách này? Có một chức năng khác để đầu ra điện áp tương tự?
bytk

Xem câu trả lời @Russell trên arduino.stackexchange.com/questions/10041/ory
dhimaspw

@dpw Tôi không nghĩ rằng nó hoạt động vì chương trình của tôi phải kết nối với tải điện tử thông qua cổng lập trình bên ngoài và điều khiển nó bằng 0-5V.
bytk

PWM tạo ra một điện áp cụ thể, hoặc tôi là một tên cướp biển trong năm Lord 1734 của chúng tôi. Bạn không thể vượt quá giá trị 8 bit và luôn luôn có một số điểm không chính xác khi đọc nó.
dùng400344

Câu trả lời:


11

Về cơ bản, bạn có ba tùy chọn:

  1. Chuyển sang một Arduino Do có bộ xử lý tích hợp sẵn tạo ra điện áp thực.
  2. Thêm một chip DAC bên ngoài (chẳng hạn như MCP4821 / 2) để tạo điện áp cho bạn
  3. Sử dụng bộ lọc thông thấp (mạng RC) trên chân PWM.

Trong ba tùy chọn tôi thường sử dụng MCP4822 vì nó mang lại kết quả tốt nhất và không tốn nhiều tiền như sử dụng Hạn.


Cảm ơn bạn. Tùy chọn 2 nghe có vẻ thực sự tốt, nhưng do hạn chế về thời gian, tôi đã tiếp tục với Tùy chọn 3 và nhận được kết quả tôi muốn.
bytk

1
hoặc sử dụng thang R-2R làm "DAC của người nghèo"
Andre Holzner

1
@AndreHolzner Tôi đếm một chiếc thang R-2R giống như một con chip DAC nhưng có quá nhiều dây để làm cho nó thực tế trên Arduino trung bình của bạn.
Majenko

@Majenko Tôi chỉ muốn nói thêm rằng có "chiết áp kỹ thuật số" hoặc "digipots" có khá nhiều thang R-2R bên trong chip DIP-8. Họ là rẻ hơn sau đó các DAC. (Ví dụ X9C103)
Filip Franik

1
@FilipFranik Ngoại trừ họ không phải thang R-2R. Chúng chỉ là một chuỗi các điện trở có FET được kết nối với mỗi kết nối giữa các điện trở. Chỉ có R. Nhiều R tất cả giống nhau. Có, nếu bạn viết nó lên bằng hai đầu của chiết áp cho VCC và GND, bạn sẽ có được một loại DAC, nhưng nó cũng gặp phải vấn đề trở kháng tương tự như một chiết áp thực. Nó cung cấp một cặp điện trở, trong khi một bộ DAC cung cấp điện áp.
Majenko

6

Ở mức 5V, điện trở 1 ohm sẽ cố gắng chìm 1A và vượt xa thông số kỹ thuật 40mA. Vui lòng sử dụng ít nhất một điện trở 5 / 0,040 = 125 ohm để bảo vệ pin của bạn. Và nếu bạn đặt một tụ điện giữa điện trở và mặt đất của bạn, mạch RC của tụ điện sẽ làm mịn PWM thành một điện áp tương tự.

Vui lòng thử câu trả lời @russell được đề xuất với điện trở 47K và tụ điện 1uF, bạn sẽ nhận được điện áp tương tự tại điểm nối để sử dụng với tải điện tử của mình.


2

Theo như tôi biết thì Arduinos có ADC (Bộ chuyển đổi tương tự sang số) nhưng không có bất kỳ bộ chuyển đổi (Chuyển đổi kỹ thuật số sang tương tự) nào. Vì vậy, bạn không thể xuất điện áp đặt từ bất kỳ chân nào dựa trên giá trị kỹ thuật số.


2
Arduinos dựa trên ARM thường có ít nhất một kênh DAC.
KIIV

0

KHÔNG .. Không có cách nào để có được một điện áp tương tự từ Arduino. Điều tốt nhất mà bạn có thể làm là sử dụng Arduino làm bộ chuyển đổi điện áp Buck ở chế độ tuyến tính hoặc tăng cường bằng cách sử dụng bộ điều chỉnh điện áp, cuộn cảm và bóng bán dẫn mosfet. Bạn cũng có thể cần phải sử dụng Mega hoặc Dulorme cung cấp tần số PWM khác với tần số 50o Hz tiêu chuẩn.

May mắn nhất


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.