สำหรับ DC มันง่ายกว่ามากในการควบคุมพลังงานโดยใช้ PWM ที่เราใช้ MOSFETs และสามารถปิดหรือเปิดได้ตลอดเวลา
Howerver สำหรับ AC เราต้องจัดการกับ Triacs Triac ยังมีประตูในการควบคุม แต่ถ้า Triac เปิดใช้งานมันไม่สามารถปิดได้จนกว่าแรงดันไฟฟ้า AC จะลดลงเหลือ 0 โวลต์ หากเราพิจารณากระแสไฟฟ้า AC ด้วย 220 V และ 50 Hz จะมี SINE เต็มระยะเวลา 50 ช่วงเวลาและ 100 ช่วงครึ่ง (50 แรงดันไฟฟ้าบวก 50 แรงดันลบ)
วิธีหนึ่งที่เป็นไปได้ในการจัดการอัตราพลังงานคือการเปลี่ยนเฟส:
เพื่อให้ทำงานได้คุณต้องใช้เครื่องตรวจจับ Ad Zero Cross และเปิด Triac สำหรับการเปลี่ยนเฟสที่จำเป็น แต่ก่อนที่จะสิ้นสุด มันใช้งานได้ดี แต่ข้อเสียเปรียบที่ยิ่งใหญ่คือการรบกวนทางแม่เหล็กไฟฟ้าจำนวนมาก (EMI) และสิ่งต่าง ๆ ก็ไม่ดีเมื่อคุณต้องการเปลี่ยนพลังอันยิ่งใหญ่เช่น 4 กิโลวัตต์ คุณจะได้รับ EMI และ TRIACs จำนวนมากจะอยู่ในโหมดเครียด
มันจะดีกว่ามากที่จะเปิด TRIAC เมื่อแรงดันไฟฟ้าต่ำ (ใกล้ถึง 0 โวลต์) และอีกวิธีหนึ่งคือการเปิด TRIAC ในช่วงเวลาครึ่งหนึ่ง: ในกรณีนี้ไม่มีปัญหากับ EMI Howerver วิธีการให้คะแนนพลังงานอย่างแม่นยำมากขึ้น? ตัวอย่างเช่นคุณต้องการอัตราพลังงาน = 40% คุณจำเป็นต้องเปิด TRIAC ในช่วงเวลา 40 ครึ่งแรกเท่านั้นหรือไม่? เพื่อแก้ปัญหานี้ในวิธีที่แม่นยำยิ่งขึ้นเราสามารถใช้อัลกอริทึม Bresenham ซึ่งสามารถช่วยให้เรากระจายอำนาจในช่วงเวลาหนึ่ง
มาดูตัวอย่างสำหรับ 50 Hz -> 100 ช่วงครึ่งช่วงเวลา, - Triac ปิด, # - Triac เปิดอยู่:
นอกจากนี้สำหรับวิธีนี้เราต้องใช้เครื่องตรวจจับข้ามเป็นศูนย์และ Triac จะต้องจัดการด้วย MOC3041 (หรือ IC ที่คล้ายกัน) โดยมีการตรวจจับข้ามเป็นศูนย์ เป็นทางเลือกการถ่ายทอดสถานะของแข็งสามารถใช้งานได้เช่นกัน (โดยมีการตรวจจับข้ามเป็นศูนย์) เช่น Fotek SSR-40 DA
แต่คุณไม่สามารถใช้วิธีการนี้สำหรับการหรี่แสงที่ต้องการความถี่สูงกว่า สำหรับ 50 Hz AC TRIAC สามารถเปิดได้ตั้งแต่ 0 ถึง 100 ครั้งต่อวินาที สำหรับโหลดความต้านทาน (เครื่องทำความร้อน) เป็นเรื่องปกติมาก แต่หลอดไฟจะกระพริบ
เครื่องตรวจจับเป็นสิ่งจำเป็นสำหรับการประมวลผลอัลกอริทึม Bresenham แผนผังเครื่องตรวจจับข้ามศูนย์
และออสซิลโลแกรมของวงจรนี้:
จุดสูงสุดของชีพจรเมื่อแรงดันเท่ากับ 0 โวลต์
สร้างโฟลเดอร์ใหม่ที่เรียกว่า "Bresenhamtriacdriver" ภายใต้โฟลเดอร์ชื่อ "Libraries" ในโฟลเดอร์ Arduino Sketchbook ของคุณ สร้างโฟลเดอร์ "ไลบรารี" ในกรณีที่ยังไม่มีอยู่ วางไฟล์ทั้งหมดในโฟลเดอร์ "Bresenhamtriacdriver"
หากต้องการใช้ไลบรารีในร่างของคุณเองให้เลือกจาก Sketch> Import Library
testscketch.ino