สารบัญ:

4 Ch DMX Dimmer: 6 ขั้นตอน
4 Ch DMX Dimmer: 6 ขั้นตอน

วีดีโอ: 4 Ch DMX Dimmer: 6 ขั้นตอน

วีดีโอ: 4 Ch DMX Dimmer: 6 ขั้นตอน
วีดีโอ: Dimmer 6*6kW DMX ได้ ต่อไฟ PAR 1000 w ได้ถึง 36 ดวงในตัวเดียว 2024, พฤศจิกายน
Anonim
4 Ch DMX หรี่
4 Ch DMX หรี่

แนวคิดคือการออกแบบและสร้างเครื่องหรี่แบบพกพา

ความต้องการ:

  • ควบคุม DMX512 ได้
  • 4 ช่อง
  • แบบพกพา
  • ง่ายต่อการใช้

ฉันเสนอแนวคิดนี้ให้กับอาจารย์ของฉันที่ WSU เพราะฉันต้องการผสมผสานความหลงใหลในโรงละครและคอมพิวเตอร์เข้าด้วยกัน โปรเจ็กต์นี้ทำเหมือนกับโปรเจ็กต์อาวุโสของฉันในแผนกละคร หากคุณมีความคิดเห็นหรือคำถามใด ๆ ฉันชอบที่จะช่วย

การพัฒนาในอนาคตอาจรวมถึงช่องสัญญาณเพิ่มเติม, ขั้วต่อ DMX 5 พิน, DMX passthrough, สวิตช์จุ่ม 8 ตัวเพื่อเปลี่ยนช่อง, แผงวงจรพิมพ์

ฉันได้ย้ายโครงการนี้จาก https://danfredell.com/df/Projects/Entries/2013/1/6_DMX_Dimmer.html เพราะฉันยังคงเป็นที่นิยมอยู่ นอกจากนี้ ฉันทำไฟล์ iWeb seed หาย ดังนั้นฉันจึงไม่สามารถอัปเดตได้อย่างง่ายดายอีกต่อไป เป็นการดีที่จะให้ผู้คนแบ่งปันคำถามเกี่ยวกับโครงการกัน

ขั้นตอนที่ 1: รวบรวมฮาร์ดแวร์

รวบรวมฮาร์ดแวร์
รวบรวมฮาร์ดแวร์

ฮาร์ดแวร์ที่ใช้: ส่วนใหญ่สั่งซื้อจาก Tayda Electronics ฉันชอบมันมากกว่า DigiKey เพราะตัวเลือกที่เล็กกว่าและเข้าใจง่ายกว่า

  1. ATMEGA328, ไมโครคอนโทรลเลอร์
  2. MOC3020, ออปโตคัปเปลอร์ TRIAC ไม่ใช่ซีโร่ครอส
  3. MAX458 หรือ SN75176BP, ตัวรับ DMX
  4. ISP814, AC ออปโตคัปเปลอร์
  5. 7805 ตัวควบคุม 5v
  6. BTA24-600, 600V 25A TRIAC
  7. คริสตัล 20MHz
  8. แหล่งจ่ายไฟ 9V

อุปสรรคและบทเรียนเล็กๆ น้อยๆ ที่เรียนรู้ระหว่างทาง

  • หากคุณไม่ใช่ผู้เชี่ยวชาญด้านการลงทะเบียน ให้ใช้ ATMEGA328P
  • ออปโตคัปเปลอร์ที่ไม่ถูกต้อง คุณไม่ต้องการ Zero Cross
  • ช่องสัญญาณสูงไม่เสถียร การเปลี่ยนจาก 16MHz เป็น 20MHz แก้ปัญหานี้ได้
  • ไม่สามารถมีไฟแสดงสถานะ DMX เนื่องจากการโทรขัดจังหวะต้องเร็วมาก
  • กระแสไฟตรงจะต้องมีความเสถียรสูง การกระเพื่อมใดๆ จะทำให้สัญญาณ DMX มีเสียงดังมาก

การออกแบบ TRIAC มาจาก MRedmon ขอบคุณ

ขั้นตอนที่ 2: การออกแบบวงจร

การออกแบบวงจร
การออกแบบวงจร

ฉันใช้ Fritzing 7.7 บน Mac เพื่อออกแบบวงจรของฉัน

MAX485 ที่ด้านบนใช้เพื่อแปลงสัญญาณ DMX เป็นสิ่งที่ Arduino สามารถอ่านได้

4N35 ทางด้านซ้ายใช้เพื่อตรวจจับการข้ามศูนย์ของสัญญาณ AC เพื่อให้ Arduino รู้ว่าจะหรี่เอาต์พุตคลื่นไซน์ในเวลาใด ข้อมูลเพิ่มเติมเกี่ยวกับวิธีการโต้ตอบของฮาร์ดแวร์และซอฟต์แวร์ในส่วนซอฟต์แวร์

ฉันได้รับคำถามว่าโปรเจ็กต์นี้จะทำงานในยุโรปด้วย 230V และ 50Hz หรือไม่ ฉันไม่ได้อาศัยอยู่ในยุโรป และไม่ได้เดินทางไปที่นั่นบ่อยๆ เพื่อทดสอบการออกแบบนี้ มันน่าจะใช้ได้นะ คุณแค่ต้องแก้ไขเส้นเวลาความสว่างของโค้ดสำหรับการหน่วงเวลาความถี่ที่ต่างกัน

ขั้นตอนที่ 3: การออกแบบวงจรของ Kovari

การออกแบบวงจรของ Kovari
การออกแบบวงจรของ Kovari
การออกแบบวงจรของ Kovari
การออกแบบวงจรของ Kovari

ผ่านกระบวนการสร้างเว็บไซต์ ฉันสามารถสนทนาทางอีเมลได้สองสามฉบับ หนึ่งคือกับ Kovari Andrei ผู้ออกแบบวงจรตามโครงการนี้และต้องการแบ่งปันการออกแบบของเขา ฉันไม่ใช่นักออกแบบแผงวงจร แต่เป็นโครงการ Eagle แจ้งให้เราทราบว่ามันทำงานอย่างไรสำหรับคุณหากคุณใช้งาน

ขั้นตอนที่ 4: การออกแบบวงจรของ Giacomo

การออกแบบวงจรของจาโกโม
การออกแบบวงจรของจาโกโม

บางครั้งผู้คนจะส่งข้อความถึงฉันเกี่ยวกับการปรับเปลี่ยนที่น่าตื่นเต้นที่พวกเขาได้ทำกับคำแนะนำนี้ และฉันคิดว่าฉันควรแบ่งปันกับพวกคุณทุกคน

Giacomo ได้ดัดแปลงวงจรเพื่อไม่ให้มีหม้อแปลงไฟฟ้าแบบเกลียวกลาง pcb เป็นแบบด้านเดียวและอาจเป็นวิธีแก้ปัญหาที่ถูกกว่าสำหรับผู้ที่ไม่สามารถทำสองด้านที่บ้านได้ (ค่อนข้างยาก)

ขั้นตอนที่ 5: ซอฟต์แวร์

ซอฟต์แวร์
ซอฟต์แวร์

ฉันเป็นวิศวกรซอฟต์แวร์โดยการค้าขาย ดังนั้นส่วนนี้จึงละเอียดที่สุด

Summery:เมื่อ Arduino บูทครั้งแรก เมธอด setup() จะถูกเรียก ในนั้นฉันตั้งค่าตัวแปรและตำแหน่งเอาต์พุตบางส่วนเพื่อใช้ในภายหลัง zeroCrossInterupt() ถูกเรียก/ ทำงานทุกครั้งที่ AC ข้ามจากแรงดันบวกไปเป็นลบ มันจะตั้งค่าสถานะ zeroCross สำหรับทุกช่องสัญญาณและเริ่มจับเวลา วิธีการวนซ้ำ () ถูกเรียกอย่างต่อเนื่องตลอดไป ในการเปิดเอาต์พุต TRIAC จะต้องถูกทริกเกอร์เป็นเวลา 10 ไมโครวินาทีเท่านั้น หากถึงเวลาที่ต้องทริกเกอร์ TRIAC และ zeroCross ได้เกิดขึ้น เอาต์พุตจะเปิดขึ้นจนกระทั่งสิ้นสุดเฟส AC

มีตัวอย่างบางส่วนทางออนไลน์ที่ฉันใช้ในการเริ่มต้นโครงการนี้ สิ่งสำคัญที่ฉันไม่พบคือการมีเอาต์พุต TRIAC หลายรายการ คนอื่นใช้ฟังก์ชั่นหน่วงเวลากับเอาต์พุต PWM แต่นั่นจะไม่ทำงานในกรณีของฉันเพราะ ATMEGA ต้องฟัง DMX ตลอดเวลา ฉันแก้ปัญหานี้ด้วยการเต้น TRIAC หลายๆ มิลลิวินาทีหลังจาก zero-cross โดยการดึง TRIAC ให้เข้าใกล้ศูนย์-Cross จะทำให้คลื่นบาปถูกส่งออกมากขึ้น

นี่คือสิ่งที่ครึ่งคลื่นบาป 120VAC ดูเหมือนบนออสซิลโลสโคปด้านบน

ISP814 เชื่อมต่อกับอินเตอร์รัปต์ 1 ดังนั้นเมื่อได้รับสัญญาณว่า AC เปลี่ยนจากบวกเป็นลบหรือในทางกลับกัน จะตั้งค่า zeroCross สำหรับแต่ละช่องเป็น true และเริ่มจับเวลา

ในเมธอด loop() จะตรวจสอบทุกแชนเนลว่า zeroCross เป็นจริงหรือไม่ และเวลาสำหรับการเปิดใช้งานได้ผ่านไปแล้ว จะทำให้ TRIAC ชีพจรเต้นเป็นเวลา 10 ไมโครวินาที เท่านี้ก็เพียงพอแล้วที่จะเปิด TRIAC เมื่อเปิด TRIAC แล้ว จะยังคงเปิดอยู่จนถึง zeroCross แสงจะกะพริบเมื่อ DMX อยู่ที่ประมาณ 3% ดังนั้นฉันจึงเพิ่มการตัดทอนเข้าไปเพื่อป้องกัน สิ่งนี้ทำให้ Arduino ทำงานช้าเกินไป และบางครั้งพัลส์ก็กระตุ้นคลื่นบาปถัดไปแทนที่จะเป็น 4% สุดท้ายของคลื่น

นอกจากนี้ในลูป () ฉันตั้งค่า PWM ของไฟ LED แสดงสถานะ ไฟ LED เหล่านี้สามารถใช้ PWM ภายในที่สร้างโดย Arduino ได้เนื่องจากเราไม่ต้องกังวลเกี่ยวกับ zeroCross ของ AC เมื่อตั้งค่า PWM แล้ว Arduino จะดำเนินต่อไปที่ความสว่างนั้นจนกว่าจะบอกอย่างอื่น

ตามที่ระบุไว้ในความคิดเห็นด้านบนเพื่อใช้ DMX ขัดจังหวะบนพิน 2 และทำงานที่ 20MHz คุณจะต้องแก้ไขไฟล์แอปพลิเคชัน Arduino บางไฟล์ ใน HardwareSerial.cpp โค้ดบางส่วนจะต้องถูกลบทิ้ง ซึ่งจะทำให้เราสามารถเขียนการเรียกอินเทอร์รัปต์ของเราเองได้ วิธี ISR นี้อยู่ที่ด้านล่างของโค้ดเพื่อจัดการการขัดจังหวะ DMX หากคุณกำลังจะใช้ Arduino เป็นโปรแกรมเมอร์ ISP อย่าลืมเปลี่ยนการเปลี่ยนแปลงของคุณเป็น HardwareSerial.cpp มิฉะนั้น ATMEGA328 บนบอร์ดขนมปังจะไม่สามารถเข้าถึงได้ การเปลี่ยนแปลงครั้งที่สองเป็นเรื่องที่ง่ายกว่า ไฟล์ board.txt จะต้องเปลี่ยนเป็นความเร็วสัญญาณนาฬิกา 20MHz ใหม่

ความสว่าง[ch]=แผนที่(DmxRxField[ch], 0, 265, 8000, 0);

ความสว่างจับคู่กับ 8000 เพราะนั่นคือปริมาณไมโครวินาที 1/2 ของคลื่นไซน์ AC ที่ 60Hz ดังนั้นที่ความสว่างเต็มที่ 256 DMX โปรแกรมจะปล่อย 1/2 ของ AC sine wave ON สำหรับ 8000us ฉันมากับ 8000 ผ่านการเดาและตรวจสอบ การทำคณิตศาสตร์ของ 1000000us/60hz/2 = 8333 เพื่อให้เป็นตัวเลขที่ดีกว่า แต่การมีโอเวอร์เฮด 333us พิเศษช่วยให้ TRIAC เปิดขึ้นและความกระวนกระวายใจในโปรแกรมอาจเป็นความคิดที่ดี

บน Arduino 1.5.3 พวกเขาย้ายตำแหน่งของไฟล์ HardwareSerial.cpp ตอนนี้ /Applications/Arduino.app/Contents/Java/hardware/arduino/avr/cores/arduino/HardwareSerial0.cpp คุณจะต้องแสดงความคิดเห็นทั้งหมดนี้หากบล็อกเริ่มต้นด้วยบรรทัดที่ 39: #if กำหนด (USART_RX_vect)

มิฉะนั้น คุณจะจบลงด้วยข้อผิดพลาดนี้: core/core.a(HardwareSerial0.cpp.o): ในฟังก์ชัน `_vector_18':

ขั้นตอนที่ 6: บรรจุหีบห่อ

บรรจุภัณฑ์ขึ้น
บรรจุภัณฑ์ขึ้น
บรรจุภัณฑ์ขึ้น
บรรจุภัณฑ์ขึ้น
บรรจุภัณฑ์ขึ้น
บรรจุภัณฑ์ขึ้น

ฉันหยิบกล่องโครงการสีเทาที่ Menards ในส่วนไฟฟ้าของพวกเขา ฉันใช้เลื่อยลูกสูบเพื่อตัดรูปลั๊กไฟฟ้าออก กรณีมี c-clamp โรงละครติดอยู่ด้านบนเพื่อวัตถุประสงค์ในการแขวน ไฟสถานะสำหรับทุกอินพุตและเอาต์พุตเพื่อช่วยวินิจฉัยว่ามีปัญหาหรือไม่ เครื่องติดฉลากถูกใช้เพื่ออธิบายพอร์ตต่างๆ บนอุปกรณ์ ตัวเลขข้างปลั๊กแต่ละอันแสดงถึงหมายเลขช่องสัญญาณ DMX ฉันติดแผงวงจรและหม้อแปลงด้วยกาวร้อน ไฟ LED ติดอยู่กับที่ยึด LED

แนะนำ: