- ไอซี PT2258
- PT2258 IC ทำงานอย่างไร
- แผนผัง
- ส่วนประกอบที่จำเป็น
- รหัส Arduino
- การทดสอบวงจรควบคุมระดับเสียงดิจิตอล
- การปรับปรุงเพิ่มเติม
โพเทนชิออมิเตอร์เป็นอุปกรณ์เชิงกลที่ใช้ซึ่งสามารถตั้งค่าความต้านทานตามค่าที่ต้องการจึงเปลี่ยนกระแสที่ไหลผ่าน มีแอพพลิเคชั่นมากมายสำหรับโพเทนชิออมิเตอร์ แต่ส่วนใหญ่จะใช้โพเทนชิออมิเตอร์เป็นตัวควบคุมระดับเสียงสำหรับเครื่องขยายเสียง
โพเทนชิออมิเตอร์ไม่ได้ควบคุมการขยายของสัญญาณ แต่สร้างตัวแบ่งแรงดันไฟฟ้าและนั่นคือสาเหตุที่สัญญาณอินพุตถูกลดทอน ดังนั้นในโครงการนี้ผมจะแสดงให้คุณวิธีการสร้างปริมาณดิจิตอลควบคุมด้วย IC PT2258 และติดต่อด้วย Arduino เพื่อควบคุมระดับเสียงของวงจรเครื่องขยายเสียง คุณยังสามารถตรวจสอบวงจรเกี่ยวกับเสียงต่างๆได้ที่นี่รวมถึงมิเตอร์ VU, วงจรควบคุมโทนเสียง ฯลฯ
ไอซี PT2258
ดังที่ฉันได้กล่าวไปก่อนหน้านี้ PT2258 เป็น IC ที่สร้างขึ้นเพื่อใช้เป็นตัวควบคุมระดับเสียงอิเล็กทรอนิกส์ 6 ช่อง IC นี้ใช้เทคโนโลยี CMOS ที่ออกแบบมาเป็นพิเศษสำหรับแอปพลิเคชันเสียงและวิดีโอแบบหลายช่องสัญญาณ
IC นี้มีอินเทอร์เฟซการควบคุม I2C พร้อมช่วงการลดทอนตั้งแต่ 0 ถึง -79dB ที่ 1dB / step และมาในแพ็คเกจ DIP หรือ SOP 20 พิน
คุณสมบัติพื้นฐานบางประการ ได้แก่
- 6 ช่องอินพุตและเอาต์พุต (สำหรับระบบเสียงภายในบ้าน 5.1)
- ที่อยู่ I2C ที่เลือกได้ (สำหรับแอปพลิเคชัน Daisy-chain)
- การแยกช่องสัญญาณสูง (สำหรับการใช้งานเสียงรบกวนต่ำ)
- อัตราส่วน S / N> 100dB
- แรงดันไฟฟ้าที่ใช้งานคือ 5 ถึง 9V
PT2258 IC ทำงานอย่างไร
IC นี้ส่งและรับข้อมูลจากไมโครคอนโทรลเลอร์ผ่านสาย SCL และ SDA SDA และ SCL เป็นส่วนต่อประสานบัส เส้นเหล่านี้จะต้องดึงให้สูงด้วยตัวต้านทาน 4.7K สองตัวเพื่อให้การทำงานมีเสถียรภาพ
ก่อนที่เราจะไปที่การทำงานของฮาร์ดแวร์จริงนี่คือคำอธิบายการทำงานโดยละเอียดของ IC หากคุณไม่ต้องการทราบทั้งหมดนี้คุณสามารถข้ามส่วนนี้ได้เนื่องจากส่วนการทำงานทั้งหมดได้รับการจัดการโดยไลบรารี Arduino
การตรวจสอบข้อมูล
- ข้อมูลบนสาย SDA ถือว่าเสถียรเมื่อสัญญาณ SCL สูง
- สถานะสูงและต่ำของบรรทัด SDA จะเปลี่ยนแปลงเมื่อ SCL ต่ำเท่านั้น
เริ่มต้นและหยุดเงื่อนไข
เงื่อนไขการเริ่มทำงานจะเปิดใช้งานเมื่อ
- SCL ถูกตั้งค่าเป็น HIGH และ
- SDA เปลี่ยนจากสถานะสูงเป็นสถานะต่ำ
เงื่อนไขการหยุดจะเปิดใช้งานเมื่อ
- SCL ถูกตั้งค่าเป็นสูงและ
- SDA เปลี่ยนจากสถานะต่ำเป็นสถานะสูง
บันทึก! ข้อมูลนี้มีประโยชน์มากสำหรับการดีบักสัญญาณ
รูปแบบข้อมูล
ทุกไบต์ที่ส่งไปยัง SDA Line ประกอบด้วย 8 บิตซึ่งเป็นไบต์ แต่ละไบต์ต้องตามด้วย Acknowledge Bit
การรับทราบ
การรับทราบทำให้การทำงานมีเสถียรภาพและเหมาะสม ระหว่าง Acknowledge Clock Pulse ไมโครคอนโทรลเลอร์จะดึงพิน SDA HIGH ในช่วงเวลาที่แน่นอนอุปกรณ์ต่อพ่วง (ตัวประมวลผลเสียง) ดึงสาย SDA ลง (ต่ำ)
ขณะนี้อุปกรณ์ต่อพ่วง (PT2258) ได้รับการแก้ไขแล้วและต้องสร้างการรับทราบหลังจากได้รับไบต์มิฉะนั้นสาย SDA จะยังคงอยู่ที่ระดับสูงในช่วง Clock Pulse ที่เก้า (9) ในกรณีนี้เครื่องส่งสัญญาณหลักจะสร้างข้อมูล STOP เพื่อยกเลิกการถ่ายโอน
ซึ่งจะช่วยลดความจำเป็นในการถ่ายโอนข้อมูลที่ถูกต้อง
การเลือกที่อยู่
ที่อยู่ I2C ของ IC นี้ขึ้นอยู่กับสถานะของ CODE1 (Pin No.17) และ CODE2 (Pin No.4)
CODE1 (PIN หมายเลข 17) |
CODE2 (PIN หมายเลข 4) |
ที่อยู่ HEX |
0 |
0 |
0X80 |
0 |
1 |
0X84 |
1 |
0 |
0X88 |
1 |
1 |
0X8C |
ลอจิกสูง = 1
ลอจิกต่ำ = 0
โปรโตคอลการเชื่อมต่อ
โปรโตคอลอินเทอร์เฟซประกอบด้วยสิ่งต่อไปนี้:
- บิตเริ่มต้น
- ไบต์ที่อยู่ชิป
- ACK = บิตรับทราบ
- ไบต์ข้อมูล
- หยุดสักหน่อย
แม่บ้านทำความสะอาดเล็กน้อย
หลังจากเปิด IC แล้วต้องรออย่างน้อย 200ms ก่อนที่จะส่งข้อมูลบิตแรกมิฉะนั้นการถ่ายโอนข้อมูลอาจล้มเหลว
หลังจากเกิดความล่าช้าสิ่งแรกที่ต้องทำคือการล้างรีจิสเตอร์โดยส่ง“ 0XC0” vi ไปยังบรรทัด I2C ซึ่งจะทำให้มั่นใจได้ว่าการทำงานจะถูกต้อง
ขั้นตอนข้างต้นเป็นการล้างรีจิสเตอร์ทั้งหมดตอนนี้เราต้องตั้งค่าให้กับรีจิสเตอร์มิฉะนั้นรีจิสเตอร์จะเก็บค่าขยะและเราได้ผลลัพธ์ที่เป็นกระ
เพื่อให้แน่ใจว่ามีการปรับระดับเสียงที่เหมาะสมจำเป็นต้องส่งหลาย 10dB ตามด้วยรหัส 1dB ไปยังตัวลดทอนตามลำดับมิฉะนั้น IC อาจทำงานผิดปกติได้ แผนภาพด้านล่างอธิบายเพิ่มเติม
ทั้งสองวิธีข้างต้นจะทำงานได้อย่างถูกต้อง
เพื่อให้แน่ใจว่ามีการทำงานที่ถูกต้องตรวจสอบให้แน่ใจว่าความเร็วในการถ่ายโอนข้อมูล I2C ไม่เกิน 100KHz
นั่นคือวิธีที่คุณสามารถส่งไบต์ไปยัง IC และลดทอนสัญญาณอินพุต ส่วนด้านบนคือการเรียนรู้ว่า IC ทำงานอย่างไร แต่อย่างที่ฉันได้กล่าวไปก่อนหน้านี้เราจะใช้ไลบรารี Arduino เพื่อสื่อสารกับ IC ซึ่งจัดการฮาร์ดโค้ดทั้งหมดและเราต้องทำการเรียกใช้ฟังก์ชันบางอย่าง
ข้อมูลข้างต้นทั้งหมดนำมาจากแผ่นข้อมูลโปรดดูข้อมูลเพิ่มเติม
แผนผัง
แสดงให้เห็นภาพด้านบนวงจรทดสอบปริมาณ PT2258 ตามการควบคุมวงจร นำมาจากแผ่นข้อมูลและแก้ไขตามความต้องการ
สำหรับการสาธิตวงจรถูกสร้างขึ้นบนเขียงหั่นขนมแบบไม่บัดกรีด้วยความช่วยเหลือของแผนผังที่แสดงด้านบน
บันทึก! ส่วนประกอบทั้งหมดจะถูกวางไว้อย่างใกล้ชิดที่สุดเพื่อลดความเหนี่ยวนำและความต้านทานของกาฝาก
ส่วนประกอบที่จำเป็น
- PT2258 IC - 1
- Arduino Nano Controller - 1
- เขียงหั่นขนมทั่วไป - 1
- ขั้วต่อสกรู 5 มม. x 3 - 1
- ปุ่มกด - 1
- ตัวต้านทาน 4.7K, 5% - 2
- ตัวต้านทาน 150K, 5% - 4
- ตัวต้านทาน 10k, 5% - 2
- ตัวเก็บประจุ 10uF - 6
- ตัวเก็บประจุ 0.1uF - 1
- สายจัมเปอร์ - 10
รหัส Arduino
เพื่อความง่ายฉันจะใช้ไลบรารี PT2258 จาก GitHub ซึ่งสร้างโดย sunrutcon
นี่เป็นไลบรารีที่เขียนได้ดีมากนั่นเป็นเหตุผลว่าทำไมฉันถึงตัดสินใจใช้มัน แต่เนื่องจากมันเก่ามากจึงมีข้อบกพร่องเล็กน้อยและเราต้องแก้ไขก่อนจึงจะใช้งานได้
ขั้นแรกให้ดาวน์โหลดและแยกไลบรารีจากที่เก็บ GitHub
คุณจะได้รับสองไฟล์ข้างต้นหลังจากการแตกไฟล์
# รวม # รวม
จากนั้นเปิดไฟล์ PT2258.cpp ด้วยโปรแกรมแก้ไขข้อความที่คุณชื่นชอบฉันใช้ Notepad ++
คุณจะเห็นว่า“ w” ของไลบรารีลวดเป็นตัวอักษรขนาดเล็กซึ่งเข้ากันไม่ได้กับ Arduino เวอร์ชันล่าสุดและคุณต้องแทนที่ด้วยตัวพิมพ์ใหญ่“ W” นั่นแหล่ะ
รหัสที่สมบูรณ์สำหรับ PT2258 Volume Controller สามารถพบได้ในตอนท้ายของส่วนนี้ นี่คือส่วนที่สำคัญของโปรแกรมจะอธิบาย
เราเริ่มต้นรหัสโดยรวมไฟล์ไลบรารีที่จำเป็นทั้งหมด ไลบรารี Wire ใช้เพื่อสื่อสารระหว่าง Arduino และ PT2258 ไลบรารี PT2258 มีข้อมูลการกำหนดเวลา I2C ที่สำคัญทั้งหมดและการตอบรับ ezButton ห้องสมุดจะใช้ในการอินเตอร์เฟซที่มีปุ่มกดที่
แทนที่จะใช้ภาพโค้ดด้านล่างให้คัดลอกอินสแตนซ์โค้ดทั้งหมดจากไฟล์โค้ดและทำให้เป็นรูปแบบเหมือนที่เราเคยทำในโครงการอื่น ๆ
# รวม
จากนั้นสร้างวัตถุสำหรับสองปุ่มและไลบรารี PT2258 เอง
PT2258 pt2258; ezButton button_1 (2); ezButton button_2 (4);
จากนั้นกำหนดระดับเสียง นี่คือระดับเสียงเริ่มต้นที่ IC นี้จะเริ่มต้นด้วย
ปริมาณ Int = 40;
จากนั้นเริ่มต้น UART และตั้งค่าความถี่สัญญาณนาฬิกาสำหรับบัส I2C
Serial.begin (9600); Wire.setClock (100000);
การตั้งค่านาฬิกา I2C เป็นสิ่งสำคัญมากมิฉะนั้น IC จะไม่ทำงานเนื่องจากความถี่สัญญาณนาฬิกาสูงสุดที่ IC นี้รองรับคือ 100KHz
ต่อไปเราจะทำความสะอาดเล็กน้อยด้วยคำสั่ง if else เพื่อให้แน่ใจว่า IC สื่อสารกับบัส I2C ได้อย่างถูกต้อง
ถ้า (! pt2258.init ()) Serial.printIn (“ PT2258 เริ่มต้นสำเร็จ”); อื่น Serial.printIn (“ ล้มเหลวในการเริ่มต้น PT2258”);
ต่อไปเราจะตั้งค่าการหน่วงเวลา debounce สำหรับปุ่มกด
Button_1.setDebounceTime (50); Button_2.setDebounceTime (50);
สุดท้ายเริ่มต้น PT2258 IC โดยตั้งค่าด้วยระดับเสียงช่องสัญญาณเริ่มต้นและหมายเลขพิน
/ * เริ่มต้น PT ด้วยโวลุ่มเริ่มต้นและ Pin * / Pt2258.setChannelVolume (ระดับเสียง 4); Pt2258.setChannelVolume (ระดับเสียง 5);
เครื่องหมายนี้ตอนท้ายของ การติดตั้งเป็นโมฆะ () ส่วน
ในส่วน Loop เราจำเป็นต้องเรียกใช้ฟังก์ชันลูปจากคลาสปุ่ม มันเป็นบรรทัดฐานของห้องสมุด
Button_1.loop (); // บรรทัดฐานของไลบรารี Button_2.loop (); // บรรทัดฐานของห้องสมุด
ส่วน if ด้านล่างคือการลดระดับเสียง
/ * ถ้ากดปุ่ม 1 ถ้าเงื่อนไขเป็นจริง * / ถ้า (button_1.ispressed ()) {Volume ++; // การเพิ่มตัวนับระดับเสียง // คำสั่ง if นี้ทำให้แน่ใจว่าโวลุ่มไม่เกิน 79 If (volume> = 79) {Volume = 79; } Serial.print (“ ปริมาณ:“); // การพิมพ์ระดับเสียง Serial.printIn (ระดับเสียง); / * ตั้งระดับเสียงสำหรับช่อง 4 ซึ่งอยู่ใน PIN 9 ของ PT2558 IC * / Pt2558.setChannelVolume (ระดับเสียง 4); / * ตั้งค่าระดับเสียงสำหรับช่อง 5 ซึ่งเป็น PIN 10 ของ PT2558 IC * / Pt2558.setChannelVolume (ระดับเสียง 5); }
ส่วน if ด้านล่างคือการเพิ่มระดับเสียง
// สิ่งเดียวกันนี้เกิดขึ้นกับปุ่ม 2 ถ้า (button_2.isPressed ()) {Volume--; // คำสั่ง if นี้ช่วยให้ระดับเสียงไม่ต่ำกว่าศูนย์ ถ้า (ปริมาตร <= 0) ปริมาณ = 0; Serial.print (“ ปริมาณ:“); Serial.printIn (ระดับเสียง); Pt2258.setChannelVolume (ระดับเสียง 4); Pt2558.setChannelVolume (ระดับเสียง 5); }
การทดสอบวงจรควบคุมระดับเสียงดิจิตอล
ในการทดสอบวงจรใช้อุปกรณ์ต่อไปนี้
- หม้อแปลงไฟฟ้าที่มี Tap 13-0-13
- 2 ลำโพง4Ω 20W เป็นโหลด
- แหล่งที่มาของเสียง (โทรศัพท์)
ในบทความก่อนหน้านี้ฉันได้แสดงวิธีสร้างแอมพลิฟายเออร์เสียง 2x32 วัตต์อย่างง่ายด้วย TDA2050 IC ไปแล้วฉันจะใช้มันสำหรับการสาธิตนี้ด้วย
ฉันทำโพเทนชิออมิเตอร์แบบกลไกไม่เป็นระเบียบและทำให้สายไฟสองเส้นสั้นลงด้วยสายจัมเปอร์ขนาดเล็กสองเส้น
ตอนนี้ด้วยความช่วยเหลือของปุ่มกดสองปุ่มสามารถควบคุมระดับเสียงของเครื่องขยายเสียงได้
การปรับปรุงเพิ่มเติม
วงจรนี้สามารถแก้ไขเพิ่มเติมเพื่อปรับปรุงประสิทธิภาพได้ การปรับปรุงเช่นวงจรสามารถทำกับ PCB เพื่อกำจัดสัญญาณรบกวนที่เกิดจากส่วนดิจิตอลของ IC เพิ่มเติม นอกจากนี้เรายังสามารถเพิ่มตัวกรองเพิ่มเติมเพื่อปฏิเสธเสียงความถี่สูง นอกจากนี้ตรวจสอบวงจรขยายเสียงอื่น ๆ และโครงการอื่น ๆ ที่เกี่ยวข้องกับเสียง
ฉันหวังว่าคุณจะชอบบทความนี้และเรียนรู้สิ่งใหม่ ๆ จากบทความนี้ หากคุณมีข้อสงสัยคุณสามารถถามได้ในความคิดเห็นด้านล่างหรือสามารถใช้ฟอรัมของเราสำหรับการอภิปรายโดยละเอียด