หมวกกันน็อค Spartan Voice Changer: 14 ขั้นตอน (พร้อมรูปภาพ)
หมวกกันน็อค Spartan Voice Changer: 14 ขั้นตอน (พร้อมรูปภาพ)
Anonim
หมวกเปลี่ยนเสียงสปาร์ตัน
หมวกเปลี่ยนเสียงสปาร์ตัน
หมวกเปลี่ยนเสียงสปาร์ตัน
หมวกเปลี่ยนเสียงสปาร์ตัน

สวัสดี! เราคือทีมนักเรียน 4 คนจากโรงเรียนโปลีเทคนิคของมหาวิทยาลัยซอร์บอนน์:

  • หลุยส์ บูเชิร์ต
  • บิลัล เมเลฮี
  • Bao Tinh Piot
  • มาร์โก ลองเปญ

โครงการนี้เป็นส่วนหนึ่งของการศึกษาของเรา และมีเป้าหมายที่จะนำเครื่องมือต่างๆ มาใช้ควบคู่ไปกับการแสดงความสำเร็จตามทฤษฎีของเรา

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

เป้าหมายการศึกษา:

  • บันทึกเสียงจากไมโครโฟน
  • ขยาย กรอง แปลงสัญญาณเป็นดิจิทัล
  • ตระหนักถึง FFT ของสัญญาณ
  • แสดง FFT นี้บนหน้าจอ
  • การสังเคราะห์สัญญาณ
  • ดึงเสียงออกจากลำโพง
  • ตระหนักถึงผลกระทบต่อเสียง (เสียงก้อง, เสียงสะท้อน, ฯลฯ …)

ตอนนี้เราได้ใส่พื้นหลังและนำเสนอโครงการแล้วก็ถึงเวลาลงมือทำ!

ขั้นตอนที่ 1: ข้อกำหนด 1/3 - ฮาร์ดแวร์

ข้อกำหนด 1/3 - ฮาร์ดแวร์
ข้อกำหนด 1/3 - ฮาร์ดแวร์

ในการสร้างหมวกกันน็อคของคุณให้สำเร็จ เราจำเป็นต้องมีฮาร์ดแวร์บางอย่างเพื่อใช้งานอุปกรณ์

  • DE0-Nano-SoC Development Board โดย Terasic + Adafruit TFT LCD Screen (Arduino)
  • การเข้าถึงเครื่องพิมพ์ 3 มิติเพื่อทำหมวกกันน็อค (หากคุณเป็นนักศึกษามหาวิทยาลัยย้ายเข้าไปใกล้มหาวิทยาลัยของคุณ บางแห่งจะมีห้องทดลองสำหรับนักศึกษา)
  • คอมพิวเตอร์ที่มีการเชื่อมต่ออินเทอร์เน็ตและการเชื่อมต่อขั้นต่ำ (USB, อีเธอร์เน็ต) คอมพิวเตอร์ของคุณจำเป็นต้องมีโปรเซสเซอร์ที่แข็งแกร่ง เนื่องจากการรวบรวมโปรแกรมบน Qsys ใช้เวลานาน
  • (ไม่จำเป็น) เครื่องพิมพ์ที่ทำแผ่นวงจรพิมพ์ (PCB) จากไฟล์ Gerber เพื่อลดขนาดวงจร + หัวแร้งสำหรับวางส่วนประกอบบน PCB
  • (ขอแนะนำอย่างยิ่ง): กาแฟชั้นดีที่จะเพลิดเพลินไปกับการทำงานของคุณด้วยคำแนะนำของเรา:)

ขั้นตอนที่ 2: ข้อกำหนด 2/3 - ส่วนประกอบสำหรับวงจรของคุณ

ข้อกำหนด 2/3 - ส่วนประกอบสำหรับวงจรของคุณ
ข้อกำหนด 2/3 - ส่วนประกอบสำหรับวงจรของคุณ
ข้อกำหนด 2/3 - ส่วนประกอบสำหรับวงจรของคุณ
ข้อกำหนด 2/3 - ส่วนประกอบสำหรับวงจรของคุณ
ข้อกำหนด 2/3 - ส่วนประกอบสำหรับวงจรของคุณ
ข้อกำหนด 2/3 - ส่วนประกอบสำหรับวงจรของคุณ

นี่คือส่วนประกอบที่จำเป็นสำหรับวงจรของคุณ:

  • Texas Instrument LM386 เครื่องขยายเสียงคลาส AB
  • เขียงหั่นขนม
  • ชุดสายไฟชาย-ชาย, ชาย-หญิง
  • LM358P ตัวแปลงดิจิตอลเป็นอนาล็อก (DAC)
  • วิทยากร
  • ไมโครโฟนขนาดเล็กที่ใช้ในวงจรแอนะล็อก
  • ชุดเกมตัวต้านทานตั้งแต่ 1kOhm ถึง 220kOhm
  • ตัวเก็บประจุ 1.5nF
  • ตัวเก็บประจุ 50nF
  • ตัวเก็บประจุ 100nF
  • ตัวเก็บประจุ 100uF
  • ตัวเก็บประจุ 220uF
  • x4 ตัวเก็บประจุ 10uF

ขั้นตอนที่ 3: ข้อกำหนด 3/3 - ซอฟต์แวร์

ข้อกำหนด 3/3 - ซอฟต์แวร์
ข้อกำหนด 3/3 - ซอฟต์แวร์
ข้อกำหนด 3/3 - ซอฟต์แวร์
ข้อกำหนด 3/3 - ซอฟต์แวร์

สุดท้ายนี้ คุณจะต้องใช้ซอฟต์แวร์:

  • Quartus 15.1: รุ่น Lite
  • คอมไพเลอร์ A C (เช่น gcc)
  • Altium สำหรับการออกแบบ PCB
  • ชุด SoC แบบฝังของ Altera เพื่อสื่อสารกับแผนที่ SoC
  • สีโป๊ว

ขั้นตอนที่ 4: วงจรอินพุต

วงจรอินพุต
วงจรอินพุต
วงจรอินพุต
วงจรอินพุต
วงจรอินพุต
วงจรอินพุต
วงจรอินพุต
วงจรอินพุต

มาสร้างวงจรกันเถอะ ใช้ภาพด้านบนของวงจรเพื่อประกอบเข้ากับเขียงหั่นขนมของคุณ คุณจะเห็นรูปภาพของ BreadBoard และวงจรด้านในเพื่อดูว่าพินเชื่อมต่อกันอย่างไร วงจรทั้งหมดขับเคลื่อนด้วยกระแสตรง 5V (DC) สำหรับสิ่งนี้ คุณสามารถใช้แบตเตอรี่ 5V กับตัวแปลง USB-B หรือตัวสร้างฟังก์ชันได้

การเตือนความจำบางส่วน:

  • แหล่งจ่ายไฟ 5V และกราวด์เชื่อมต่ออยู่บนเส้นแนวนอนที่แยกจากกันของเขียงหั่นขนม
  • หากคุณต้องการเชื่อมต่อ 2 ส่วนประกอบแบบขนาน ให้วางไว้ในบรรทัดร่วมของเขียงหั่นขนม
  • หากคุณต้องการเชื่อมต่อ 2 ส่วนประกอบแบบอนุกรม ส่วนประกอบต้องมีเพียงพินเดียวในสายทั่วไปของเขียงหั่นขนม

อย่าลังเลที่จะดูบทแนะนำเกี่ยวกับวิธีใช้เขียงหั่นขนมและสร้างวงจรขึ้นมา อย่าลืมอ่านตำแหน่งพินของเครื่องขยายเสียง LM358P อย่างละเอียดด้วย (ดูภาพด้านบน)

ขั้นตอนที่ 5: วงจรเอาต์พุต

วงจรเอาท์พุต
วงจรเอาท์พุต
วงจรเอาท์พุต
วงจรเอาท์พุต
วงจรเอาท์พุต
วงจรเอาท์พุต
วงจรเอาท์พุต
วงจรเอาท์พุต

คำแนะนำค่อนข้างเหมือนกับขั้นตอนที่ 4 อินพุตสี่ตัว: SDI ไม่ใช่ CS, SCK ไม่ใช่ LDAC มาจากบอร์ด DE0-Nano-Soc ของคุณ เราจะเห็นในภายหลังว่าจะสร้างได้อย่างไร

อย่าลืมอ่านตำแหน่งพินของเครื่องขยายเสียง LM386 อย่างละเอียด (ดูภาพด้านบน)

ขั้นตอนที่ 6: [ไม่บังคับ] การสร้างแผงวงจรพิมพ์และส่วนประกอบบัดกรี

[ไม่บังคับ] การสร้างแผงวงจรพิมพ์และส่วนประกอบการบัดกรี
[ไม่บังคับ] การสร้างแผงวงจรพิมพ์และส่วนประกอบการบัดกรี
[ไม่บังคับ] การสร้างแผงวงจรพิมพ์และส่วนประกอบการบัดกรี
[ไม่บังคับ] การสร้างแผงวงจรพิมพ์และส่วนประกอบการบัดกรี
[ไม่บังคับ] การสร้างแผงวงจรพิมพ์และส่วนประกอบการบัดกรี
[ไม่บังคับ] การสร้างแผงวงจรพิมพ์และส่วนประกอบการบัดกรี

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

คุณจะต้องใช้ไฟล์ GERBER 2 ไฟล์นี้

ไฟล์เหล่านี้สร้างบน Altium ใช้บนซอฟต์แวร์เครื่องพิมพ์ PCB ของคุณเพื่อพิมพ์ PCB ของคุณ เมื่อคุณได้รับ PCB แล้ว ตรวจสอบให้แน่ใจว่า PCB ของคุณสะอาดและพิมพ์แทร็กอย่างถูกต้อง

ตอนนี้มาถึงข้อตกลงที่แท้จริง: การบัดกรี 2 รูปข้างบนนี้เป็นแผนผังของวงจรบน PCB แต่ละองค์ประกอบมีชื่อ (R6, C4, MK1 เป็นต้น) รูปภาพในขั้นตอนที่ 4 และ 5 แสดงพารามิเตอร์ส่วนประกอบ (ความต้านทาน การนำไฟฟ้า..) วางแต่ละส่วนประกอบจากเขียงหั่นขนมของคุณไปยัง PCB ตามชื่อ

เมื่อคุณบัดกรีทุกอย่างด้วยหัวแร้งแล้ว ให้ทดสอบส่วนประกอบทุกชิ้นด้วยโวลต์มิเตอร์เพื่อตรวจสอบว่ามีการลัดวงจรหรือไม่

ขั้นตอนที่ 7: การตั้งค่า SoC

การตั้งค่า SoC
การตั้งค่า SoC
การตั้งค่า SoC
การตั้งค่า SoC

เกี่ยวกับการตั้งค่า SoC คุณจะต้องเรียกใช้คำสั่งและสคริปต์บางอย่างที่รวมอยู่ในชุดฝังตัว SoC ภายในเทอร์มินัล ในการทำเช่นนี้ คุณจะต้องเพิ่ม $PATH PATH ถูกใช้ภายในเทอร์มินัลเพื่อบอกให้ค้นหาไฟล์ในไดเร็กทอรีที่กำหนดโดยพาธเมื่อคุณรันคำสั่ง โดยพิมพ์บรรทัดคำสั่งต่อไปนี้:

เส้นทางการส่งออก=/cygdrive/c/altera_lite/15.1/quartus/sopc_builder/bin:$PATH

จากนั้นพิมพ์บรรทัดคำสั่งเพื่อสร้างส่วนหัวจากไฟล์ sof คุณได้รับไฟล์ sof โดยรวบรวมโครงการของคุณบน Quartus โดยพิมพ์:./generate_header

ขั้นตอนที่ 8: การเขียนโปรแกรม C HPS

การเขียนโปรแกรม C HPS
การเขียนโปรแกรม C HPS

ในส่วนนี้เราต้องตระหนัก 2 สิ่ง คือ อ่านค่า ADC แล้วเขียนลงใน SPI

1. อ่านค่า ADC

แอดเดรสของหน่วยความจำที่มี ADC อยู่นั้นไม่สามารถเข้าถึงได้โดยตรง อันที่จริง ระบบ linux ที่อยู่บนการ์ดจะตั้งค่าส่วนที่เป็นนามธรรมของหน่วยความจำ ในการเข้าถึงที่อยู่ ADC เราจะใช้ฟังก์ชัน mmap

"h2p_lw_spi_addr=virtual_base + ((unsigned long)(ALT_LWFPGASLVS_OFST + SPI_0_BASE) & (unsigned long)(HW_REGS_MASK));"

คำแนะนำนี้อนุญาตให้เพิ่มออฟเซ็ตที่จุดเริ่มต้นของที่อยู่ฐานเพื่อเข้าถึงที่อยู่ของหน่วยความจำที่จัดสรรสำหรับ ADC และดำเนินการกับที่อยู่ที่เป็นผลลัพธ์ ตรรกะ และ เพื่อพิจารณาการมาสก์

หลังจากนั้น จำเป็นต้องยกเลิกการอ้างอิงพอยน์เตอร์ในโปรแกรมเพื่อรับค่าของมัน

2. เขียนค่าของ ADC ใน SPI

การจัดการเหมือนกัน คราวนี้เราให้ mmap ออฟเซ็ตไปยังที่อยู่ที่จัดสรรโดย SPI ขณะเขียน SPI เอกสารทางเทคนิคระบุว่าคุณต้องเขียนไปยังที่อยู่ +1 ค่าของ adc

"*(h2p_lw_spi_addr+1) = ((0x1 << 12) | *h2p_lw_adc_addr);"

คำแนะนำนี้ช่วยให้คุณสามารถเขียนถึง SPI แน่นอนบิต 4 ดังนั้น 1 << 12 เป็นบิตที่ช่วยให้เปิดใช้งาน SPI ด้วยตรรกะ OR เราจึงให้ทั้งบิตการเปิดใช้งานและค่าของ ADC แก่ SPI

ขั้นตอนที่ 9: การได้มาซึ่ง ADC แบบดิจิทัลจากการ์ด

การได้มาซึ่ง ADC แบบดิจิทัลจากการ์ด
การได้มาซึ่ง ADC แบบดิจิทัลจากการ์ด
การได้มาซึ่ง ADC แบบดิจิทัลจากการ์ด
การได้มาซึ่ง ADC แบบดิจิทัลจากการ์ด
การได้มาซึ่ง ADC แบบดิจิทัลจากการ์ด
การได้มาซึ่ง ADC แบบดิจิทัลจากการ์ด
การได้มาซึ่ง ADC แบบดิจิทัลจากการ์ด
การได้มาซึ่ง ADC แบบดิจิทัลจากการ์ด

ก่อนอื่น คุณจะต้องตั้งค่าที่อยู่ IP ของอีเทอร์เน็ตของคอมพิวเตอร์ของคุณผ่านแผงควบคุม -> เครือข่าย -> การ์ด Parmesals เลือกอินเทอร์เฟซอีเทอร์เน็ตของการ์ด คุณสมบัติ ที่อยู่ ipv4 และป้อน IP คงที่ หน้ากาก ฯลฯ …

ถัดไป เชื่อมต่อการ์ดจากด้านแจ็คไฟด้วยสายไมโคร USB เปิดโปรแกรมเมอร์ Quartus และเริ่มต้นการส่งออก การจัดการนี้จะทำใหม่หลังจากปิดการ์ดแต่ละครั้ง

เปลี่ยนสายปลั๊กไมโคร USB เพื่อเชื่อมต่อในครั้งนี้ถัดจากแจ็คอีเทอร์เน็ต ตอนนี้ด้วย Putty จำเป็นต้องเชื่อมต่อกับการ์ดโดยใช้ลิงก์แบบอนุกรม การกำหนดค่าสามารถมองเห็นได้ในภาพถ่าย แนวคิดคือการแทนที่ COM5 ด้วย COM ตามด้วยหมายเลขที่คุณสามารถหาได้ในตัวจัดการอุปกรณ์ของคุณ (คลิกขวาที่โลโก้ windows เพื่อเปิด)

กด Enter คุณเชื่อมต่อแล้ว

ข้อมูลการเริ่มต้นโครงการใหม่: - แก้ไข IP ของอีเทอร์เน็ตที่สอดคล้องกับการ์ด - เปิดการ์ด ทุกครั้งที่คุณเปิดเครื่อง จำเป็นต้องใส่ "โปรแกรม" ไว้ใต้ควอตัสของโปรเจ็กต์ที่คอมไพล์ในการ์ด ทำได้ผ่านพอร์ต micro-USB - เพื่อให้สามารถแสดงผลของโปรแกรมได้ เราใช้ micro USB มากขึ้น แต่ UART - ด้วยการกำหนดค่า putty สำหรับ serial COM5 (หรือ 6 watch gestinnaire periph) เชื่อมต่อกับการ์ด - ตั้งรหัสผ่าน (passwd) - ตั้งค่าที่อยู่ IP ifconfig ethxx IPchoice (IP ไม่ไกลจากนั้นสำหรับ eth ของพีซี) - สร้างส่วนหัวตาม Qsys ด้วยเทอร์มินัลที่ฝังอยู่ (export PATH) - ทำ - scp l exec ใน แผนที่ - ดำเนินการภายใต้สีโป๊ว prog

ขั้นตอนที่ 10: การคำนวณ FFT

การคำนวณ FFT
การคำนวณ FFT

เพื่อให้ได้ Fast Fourier Transform ในโปรแกรม C เราจะใช้ไลบรารี่ที่เขียนโดย Mark Borgerding: Kiss FFT คุณสามารถดาวน์โหลดห้องสมุดได้ที่นี่: https://kissfft.sourceforge.net/ จำเป็นต้องใช้ FFT กับสัญญาณเพื่อแก้ไขและใช้เอฟเฟกต์สัญญาณ นอกจากนี้ยังสามารถแสดงสเปกตรัมของสัญญาณได้อีกด้วย

ขั้นตอนแรกในโปรแกรม C ของคุณประกอบด้วยการจัดสรรหน่วยความจำเพื่อจัดเก็บผลลัพธ์ FFT ขนาดของหน่วยความจำขึ้นอยู่กับจำนวนจุดที่ใช้ในการคำนวณ FFT ยิ่งคุณมีคะแนนมากเท่าไร FFT ก็จะยิ่งเข้มงวดมากขึ้นเท่านั้น อย่างไรก็ตาม โปรแกรมจะทำงานช้าลงและจะใช้หน่วยความจำมากขึ้น โปรดทราบว่าคุณจะได้รับสองอาร์เรย์จากฟังก์ชัน kiss_fft: อินพุตและเอาต์พุตของฟังก์ชัน (cx_in และ cx_out)

เมื่ออาร์เรย์ของเราเต็มไปด้วยค่า FFT ใหม่ เช่น เมื่อ r = Win - 1 เรากำลังประมวลผล FFT เกี่ยวกับการแสดงผล เราแสดงเฉพาะส่วนบวกของสเปกตรัม เนื่องจากมีความสมมาตรระหว่างส่วนลบกับส่วนบวก

เกี่ยวกับแกนนอน เรากำลังลดค่าพีคลง 100*height/(height²) เพื่อแยกความแตกต่างของพีคของความถี่หลัก

เรากำลังใช้การเรียกระบบ usleep เพื่อกำหนดความถี่ในการอ่านค่า ADC ความถี่นี้ตั้งไว้ที่ 1, 5 Hz

ขั้นตอนที่ 11: การแสดง FFT

กำลังแสดง FFT
กำลังแสดง FFT
กำลังแสดง FFT
กำลังแสดง FFT

จากตัวอย่างที่แสดงบนหน้าจอ Adafruit TFT LCD ที่มีให้ที่นี่: https://www.terasic.com/downloads/cd-rom/de0-nano-s… เราได้ตั้งโปรแกรม NIOS ของบอร์ดไว้เพื่อให้เขาอ่านได้ ค่า ADC

ดังนั้นการลงทะเบียน ADC จะถูกแชร์ระหว่าง NIOS และ HPS เนื่องจากค่า ADC จะถูกใช้เพื่อแสดง FFT บนหน้าจอ NIOS และค่าเดียวกันนั้นจะถูกเขียนบน SPI เพื่อส่งออกไปยังบอร์ดและสุดท้ายจะถูกแปลง โดย DAC เพื่อรับสัญญาณแอนะล็อก

ขั้นตอนที่ 12: การประกอบ

การประกอบ
การประกอบ

เราใกล้จะเสร็จแล้ว ! คุณจะต้องประกอบทุกส่วนของโปรเจ็กต์ (วงจรเข้า วงจรเอาท์พุต และบอร์ด) ตรวจสอบให้แน่ใจว่าได้เชื่อมต่อชิ้นส่วนต่างๆ เพื่อแก้ไขหมุดตามโครงการ Quartus

  1. วงจรอินพุตจะส่งสัญญาณเสียงที่ไมโครโฟนจับ ขยาย กรอง และออฟเซ็ต
  2. โปรแกรม C ที่แสดงบนการ์ดจะอ่านค่าของ ADC ตามที่เราได้เห็นก่อนหน้านี้ และจะเขียนลงใน SPI เพื่อให้เราสามารถกู้คืนค่าบน GPIO ของการ์ดได้
  3. จากนั้นเอาต์พุต GPIO ของ SPI จะส่งข้อมูลที่จะถอดรหัสโดย DAC ของเราและขยายโดยวิ่งไปถึงลำโพง

ขั้นตอนที่ 13: เอฟเฟกต์เสียง

เสียงประกอบ
เสียงประกอบ
เสียงประกอบ
เสียงประกอบ

ขั้นตอนเดียวที่เหลือคือเอฟเฟกต์เสียง

เอฟเฟกต์ที่ใช้ได้คือ:

  • ตัวกรองความถี่สูง
  • ตัวกรองความถี่ต่ำ

คุณสามารถสลับระหว่างเอฟเฟกต์ได้ด้วยปุ่มเดียว ปุ่มนี้จะเปลี่ยนตัวแปรในโปรแกรม C ของเรา เพื่อให้สามารถใช้เอฟเฟกต์ที่เหมาะสมได้

ขั้นตอนที่ 14: [ไม่บังคับ] การสร้างหมวกกันน็อค

[ไม่บังคับ] การทำหมวกกันน็อค
[ไม่บังคับ] การทำหมวกกันน็อค
[ไม่บังคับ] การทำหมวกกันน็อค
[ไม่บังคับ] การทำหมวกกันน็อค
[ไม่บังคับ] การทำหมวกกันน็อค
[ไม่บังคับ] การทำหมวกกันน็อค

เราอยู่ในขั้นตอนที่ต้องทำมากที่สุดของโครงการ:

  1. อันดับแรก เราติดส่วนต่างๆ ที่พิมพ์ 3 มิติของหมวกกันน็อค
  2. ในการเติมช่องว่างระหว่างชิ้นส่วนที่ติดกาว เราได้เพิ่มการตกแต่งโดยใช้ปากกา 3 มิติ
  3. เราขัดส่วนที่คั่นด้วยปากกาและหมวกกันน๊อคให้เป็นปกติมากขึ้น เพื่อให้ภาพวาดติดแน่นในภายหลัง
  4. เราทาสีหมวกกันน็อคด้วย 2 ชั้น: ชั้นแรกเป็นสีดำแอนทราไซต์ในระยะใกล้ และชั้นที่สองเป็นสีเขียวหลักจากที่อื่นเพื่อให้เฉดสีเขียวเข้มขึ้น
  5. ในที่สุดเราก็พิมพ์โลโก้ของโรงเรียนของเราที่ด้านข้างของหมวกกันน็อค