วิธีการส่งออกแรงดันไฟฟ้าอะนาล็อกที่แท้จริงที่ขาออก


12

เกี่ยวกับโปรแกรมของฉันมันเป็นโปรแกรมที่ทำการคำนวณบางอย่างแล้วส่งแรงดันไฟฟ้าตามผลลัพธ์โดยใช้ฟังก์ชัน analogWrite อย่างไรก็ตามปัญหาของฉันคือฉันได้ทำการเขียนโปรแกรมของฉันตามความเข้าใจผิดว่าฟังก์ชัน analogWrite ผ่าน PWM ทำหน้าที่ส่งสัญญาณแรงดันไฟฟ้าอะนาล็อกซึ่งจริงๆแล้วมันเป็นเพียง "จำลอง" แรงดันไฟฟ้าอนาล็อกแทน

นี่คือส่วนที่เกี่ยวข้องในรหัสของฉัน:

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 Analog write ใช้ PWM และไม่สร้างแรงดันไฟฟ้าแบบอะนาล็อก
Dat Ha

@DatHa หมายความว่าไม่สามารถทำได้ด้วยวิธีนี้? มีฟังก์ชั่นอื่นสำหรับเอาต์พุตแรงดันอะนาล็อกหรือไม่
bytk

ดูคำตอบ@Russell
dhimaspw

@dpw ฉันไม่คิดว่าจะทำงานได้เพราะโปรแกรมของฉันต้องเชื่อมต่อกับโหลดอิเล็กทรอนิกส์ผ่านพอร์ตการเขียนโปรแกรมภายนอกและควบคุมด้วย 0-5V
bytk

PWM ให้แรงดันไฟฟ้าที่เฉพาะเจาะจงหรือฉันเป็นโจรสลัดในปี 1734 ของเราคุณไม่สามารถสูงกว่าค่า 8 บิตและมีความคลาดเคลื่อนบางประการในการอ่าน
user400344

คำตอบ:


11

คุณมีสามตัวเลือกโดยทั่วไป:

  1. เปลี่ยนเป็น Arduino Due ซึ่งมี DAC ในตัวซึ่งให้แรงดันไฟฟ้าจริง
  2. เพิ่มชิป DAC ภายนอก (เช่น MCP4821 / 2) เพื่อสร้างแรงดันให้คุณ
  3. ใช้ตัวกรองความถี่ต่ำ (เครือข่าย RC) บนขา PWM

ในสามตัวเลือกฉันมักจะใช้ MCP4822 เพราะให้ผลลัพธ์ที่ดีที่สุดและไม่เสียค่าใช้จ่ายเท่าการใช้งาน Due


ขอบคุณ. ตัวเลือกที่ 2 ฟังดูดีมาก แต่เนื่องจากข้อ จำกัด ด้านเวลาฉันไปข้างหน้าด้วยตัวเลือก 3 และได้ผลลัพธ์ที่ต้องการ
bytk

1
หรือใช้บันได R-2Rเป็น "DAC ของคนจน"
อังเดรโฮลเนอร์

1
@ Andreholzner ฉันนับบันได R-2R เหมือนกับชิป DAC แต่มีสายมากเกินไปที่จะทำให้มันใช้งานได้จริงบน Arduino โดยเฉลี่ยของคุณ
Majenko

@ มาเจนโกฉันแค่อยากจะเพิ่มว่ามี "โพเทนชิโอมิเตอร์แบบดิจิตอล" หรือ "ดิจิพอต" ที่มีบันได R-2R อยู่ในชิป DIP-8 พวกเขาถูกกว่า DACs (ตัวอย่างเช่น X9C103)
Filip Franik

1
@FilipFranik ยกเว้นพวกเขาไม่ใช่ R-2R ladders พวกเขาเป็นเพียงสายโซ่ของตัวต้านทานที่มี FET เชื่อมต่อกับการเชื่อมต่อระหว่างตัวต้านทานแต่ละตัว มีอาร์เท่านั้นอาร์เอสมากมายที่เหมือนกันหมด ใช่ถ้าคุณเขียนมันด้วยปลายทั้งสองของโพเทนชิออมิเตอร์ถึง VCC และ GND คุณจะได้ DAC แต่มันมีปัญหาความต้านทานแบบเดียวกันที่โพเทนชิออมิเตอร์จริงทำ มันมีความต้านทานคู่หนึ่งในขณะที่ DAC ให้แรงดัน
Majenko

7

ที่ 5V ตัวต้านทาน 1 โอห์มจะพยายามจม 1A และเกินข้อกำหนด 40mA โปรดใช้ตัวต้านทานอย่างน้อย 5 / 0.040 = 125 โอห์มเพื่อป้องกันพินของคุณ และถ้าคุณใส่ตัวเก็บประจุระหว่างตัวต้านทานและกราวด์ของคุณวงจร RC ของตัวเก็บประจุจะทำให้ PWM ในกระแสไฟฟ้าอะนาล็อกราบรื่น

โปรดลองคำตอบ @russell ที่แนะนำพร้อมตัวต้านทาน 47K และตัวเก็บประจุ 1uF คุณจะได้รับแรงดันไฟฟ้าอนาล็อกที่ทางแยกเพื่อใช้กับโหลดอิเล็กทรอนิกส์ของคุณ


2

เท่าที่ฉันรู้ Arduinos มี ADC (ตัวแปลงสัญญาณอนาล็อกเป็นดิจิทัล) แต่ไม่มีตัวแปลง DAC (ตัวแปลงสัญญาณดิจิตอลเป็นอนาล็อก) ดังนั้นคุณจึงไม่สามารถส่งออกแรงดันไฟฟ้าที่ตั้งไว้จากหมุดใด ๆ ขึ้นอยู่กับค่าดิจิตอล


2
Arduinos ที่ใช้ ARM มักจะมี DAC อย่างน้อยหนึ่งช่อง
KIIV

0

ไม่ .. ไม่มีวิธีรับแรงดันไฟฟ้าอะนาล็อกจาก Arduino สิ่งที่ดีที่สุดที่คุณสามารถทำได้คือการใช้ Arduino เป็นตัวแปลงแรงดันไฟฟ้า Buck ในโหมดเชิงเส้นหรือเพิ่มโดยใช้ตัวควบคุมแรงดันไฟฟ้า, ตัวเหนี่ยวนำและทรานซิสเตอร์ mosfet คุณอาจต้องใช้ Mega หรือ Dulorme ซึ่งให้ความถี่ PWM อื่น ๆ ที่เป็นมาตรฐาน 50o Hz

ขอให้โชคดี


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.