Arduino สร้าง pwm ในการทำหม้อแปลงเทสลา


(Palm Witchapol) #1

คือผมจะสร้างpwm เพื่อต่อเข้าวงจร H-bride มันสร้างได้ไหมครับ แล้วมีแนวทางการเขียนโค้ดยังไงได้บ้างครับ


(Palm Witchapol) #2

พอดีผมเข้าไปเจอโค้ดของพี่พอดีครับ คือผมจะทำโปรเจคหม้อแปลงเทสลาควบคุมโดยใช้arduino ใช้อาดูโน่ไปสร้างพัลแล้วไปต่อเข้ากับวงจร h bride อ่ะครับ


(Palm Witchapol) #3


ถ้าใช้โค้ตแบบนี้จะดีไหมครับ แล้วถ้าผมอยากจะเปลี่ยน duty cycle เป็น 50% ผมต้องทำยังไง เพิ่มโค้ตหรือแก้โค้ตตรงไหนบ้างครับ


(Permpol Thanapunnamas) #4

เบื้องต้นเปลี่ยน /4 เป็น /2 ครับ น่าจะออกเป็น 50% นะครับ


(Permpol Thanapunnamas) #5

ระวังเรื่องเดตทามด้วย 50/50 มันอาจชนกันครับ


(Permpol Thanapunnamas) #6

ควรปรับเผื่อระยะเดตทามด้วยครับ ควรปรับค่าดิวตี้ไซเคิ้ลมากสุดที่ 45% ครับ


(Palm Witchapol) #7

คือผมอยากจะรู้ว่าถ้าผมจะสร้างพัลบวกและพัลบแยกกันเพื่อไปต่อเข้ากับวงจรH bride มันจะมีแนวทางอย่างไรบ้างครับ ผมทำที่ความถี่ 210kHz โดยประมาณ


(Permpol Thanapunnamas) #8

ขอรูปพัล ที่ต้องการหน่อยครับวาดมาก็ได้จะได้เข้าใจตรงกัน


(Palm Witchapol) #9

ผมต้องการให้เอ้าพุตออก 2 ขา หลักการทำงานคล้ายๆวงจรนี้แต่ผมใช้ arduino มาทำแทน


(Permpol Thanapunnamas) #10

ตามโค้ตนี้ output ก็ออกสองขานิครับ ออกที่ขา 9 และ 10


(Palm Witchapol) #11

ผมเห็นพี่เขียนโค้ดประกาศ pinmode(9,outtput); แล้วผมลองซิมในโปรแกรมโพทีอุส แล้วใช้สโคปวัด มันออกแค่ขาเดียว คือขา9 ที่ประกาศ output อ่ะครับ แล้วก็ ถ้าผมต้องการ ให้ได้กราฟตามรูปที่ผมส่ง ที่ทำให้เฟสต่างอ่ะครับ ผมต้องปรับDuty cycle และมุมเฟสยังไงให้ได้ตามรูปที่ผมส่งไปอ่ะครับพี่


(Permpol Thanapunnamas) #12
   #include "TimerOne.h"
    int pot = 0; // analog value 0-5VDC : 0-255
    void setup()
    {
      OCR2A = pot;
      pinMode(9, OUTPUT);
      pinMode(10, OUTPUT);
      Timer1.initialize(20);         // initialize timer1, and set at 50kHz
      Timer1.pwm(9, pot);         // setup pwm on pin 9, 25% duty cycle
      Timer1.pwm(10, pot);       // setup pwm on pin 10, 25% duty cycle

    TCCR2A = _BV(COM2A1) | _BV(COM2B1) | _BV(WGM21) | _BV(WGM20);
    TCCR2B = _BV(CS20); // prescaler à 1.
    OCR2A = pot;
    }

    void loop()
    {
     pot = analogRead(A0)/4; // Value between 0 and 255
     Timer1.pwm(9, pot);         // setup pwm on pin 9, 25% duty cycle
      Timer1.pwm(10, pot);       // setup pwm on pin 10, 25% duty cycle
    }

ขอแก้ไขเบื้องต้นเรื่องที่ซิมแล้ว ออกแค่พินเดียวก่อนนะครับ โดยการเพิ่ม

pinMode(10, OUTPUT);

เข้าไปครับเพราะว่าเราไม่ได้ประกาศให้มันเป็น output มันเลยไม่มี PWM ออกมาที่ pin 10 ครับ


(Permpol Thanapunnamas) #13

ส่วนเรื่องต้องการชิฟเฟสกันติดตามได้จากกระทู้นนี้ครับ


(Palm Witchapol) #14

พี่ครับถ้าผมต้องการที่จะใช้ตัว R ปรับค่าได้ในการปรับความถี่ต้องเพิ่มโค้ดจากส่วนตรงไหนบ้างครับ


(Permpol Thanapunnamas) #15

เคยทำแต่ R ปรับ Duty ครับ ปรับความถี่ ลองหาโค้ต ใน google มาคุยกันดูครับ


(Palm Witchapol) #16

ขอดูโค้ดที่ปรับdutyหน่อยได้ไหมครับ


(Permpol Thanapunnamas) #17

แบบไหนหรอครับ


(Palm Witchapol) #18

ที่ใช้ R ปรับค่าได้ในการปรับอ่ะครับ


(Permpol Thanapunnamas) #19

ตอบให้ไปแล้วในโค้ตล่าสุดครับ


(Permpol Thanapunnamas) #20

pot = analogRead(A0)/4; // Value between 0 and 255

บรรทัดนี้จะเป็นการอ่านค่าแรงดัน 0 - 5 V เพื่อเอามาปรับค่าดิวตี้ไซเคิ้ล เราสามารถทำได้สองวิธีคือ

จ่ายแรงดัน 0 - 5 V ที่สามารถปรับค่าได้เข้าไปเลย สองคือ คำนวณ โวลท์เตจ ดีไวเดอร์ แต่ละช่วง 0 1 2 3 4 และ 5 V ตามลำดับ เพื่อให้ได้ ตัวต้านทางมาต่อเป็นวงจรปรับได้ เพื่อปรับแรงดันครับ