การสร้างสัญญาณ pwm ที่สามารถปรับค่าความถี่ และดิวตี้ไซเคิลได้ตามต้องการ

อันนี้เป็น วิธีการสร้างสัญญาณ PWM ออกมา

Top เป็นตัวกำหนดความถี่
Compare ก็คือสัญญาณเปรียบเทียบซึ่งจะเปรียบเทียบแล้วจ่ายเป็นค่ากิวตี้ไซต์เคิล
Bottom ก็คือค่าต่ำสุด ซึ่งตรงข้ามกับ ค่า Top นั้นเอง

คืออธิบายแบบนี้ครับ
โปรแกรมสามารถสร้างความถี่ที่เป้นจุดทศยมได้ครับ
แต่โปรแกรมไม่สามารถสร้างความถี่ที่เป้นจุดทศนิยมได้ทุกค่าครับพี่

อันนี้คือ เอาไปใส่ใน คำสั่ง Timer1.initialize(); หรอครับ
จะใส่ Timer1.initialize(44.333); หรอ

ลองเอา 12.3333kHz ไปคำนวณกลับยังว่าได้ค่า TOP เท่าไหร่ แล้วนำไปใส่ดู เอาค่าที่ใกล้เคียงก็ได้

ได้81.103 ครับ แต่ถ้าผมเอาค่า81.103 โปรแกรมจะค่าแค่81 ทำให้ความถี่ออกมา12.345KHzครับ จะไม่ได้12.333kHz

ถ้าเป็น แบบชิฟเฟส กันสองสัญญาณ จะได้ตามรูปนี้

ไม่ว่าจะสร้าง PWM ในโหมดไหนๆ มันก็มีพื้นฐานมาจากหลักการเดียวกันครับ คือ กำหนดความถี่ที่เราต้องการก่อนจากนั้น
คำนวณ ในสมการ เพื่อหาค่า TOP แล้วเอาไปกำหนดค่าในโปรแกรมวิธีสร้างสัญญาณออกมาก็ตามรูปอะครับ

แต่ถ้าสมมุติว่า ผมอยากได้ค่า12.208KHz แล้วคำนวณค่าTop ออกมาได้ 81.91 แต่พอผมเอาค่า81.91ไปใส่ในโปรแกรม โปรแกรมจะอ่านค่าแค่เป็น81 ทำให้ความถี่ที่ออกมา เป็น12.345KHz

มีผลอย่างไรครับ ทำไมถึงต้องใช้ 12.333 kHz เราใช้ 12.345 kHz ไม่ได้หรอครับ

พี่เคยบอกไปแล้วว่า ค่า TOP ต้องเป็นจำนวนเต็มเท่านั้น เพราะงั้นเราต้องเลือกกำหนดค่าความถี่ที่เป็นจุดทศนิยม ที่สามารถนำไปคำนวณค่า TOP ได้เป็นจำนวนเต็มพอดีเท่านั้นครับ :sweat:

ถ้าเป็น12.33กลับ12.34นี้ไม่มีผลนะครับ
แต่บ้างค่ามันโดนไปมากเลยนะครับ เช่น 12.33 เป็น13.01 แบบนี้นะครับ

น้องคงต้องลองปรับอย่างอื่นดู เพราะว่าการสร้าง PWM ตอนนี้เรามีข้อจำกัดอยู่

โอเคครับพี่ ขอบคุณมากนะครับ สำหรับคำแนะนำครับพี่

ผมขอลบกวนสอบถามหน่อยนะครับ โคตที่พี่ให้มามันใช้สร้างรู้คลื่นพลัสได้ใช่ไหมครับ

1 Likes

พอดีผมกำลังทำ power maximum solar อ่ะครับ

ได้ครับผม ตามรูปเลยครับ

1 Likes

จะลิมิต แรงดันแบบใช้ Feedbabk ป้อนกลับมาจาก output หรอครับ

1 Likes

คือผมจะอยากกำหนดช่วงดิวตี้อยู่ที่ 75 เปอร์กับ 100 เปอร์เซน ที่ความถี่ 25 khz เพื่อไปต่อกับวงจรขับเกต เพื่อเพิมแรงดันขึ้นเพื่อจะสามารถขับมอสเฟสได้อ่ะครับ แต่ก่อนผมใช้ Tl494 ได้ค่าดิวตี้แค่ 50 เปอร์เซนครับ

ใช้แบบ เฟส เดียวหรอครับ

ใช่ครับพี่ พอดีผมจะไปต่อกับปั้มน้ำ DC 24 V 1.8 A

TCCR2A = _BV(COM2A1)|_BV(COM2B1)|_BV(WGM21)|_BV(WGM20);
TCCR2B = _BV(CS10);

TCCR2A เป็นคำสั่งความถี่หรือครับพี่